[cig-commits] r7713 - in mc/3D/CitcomS/trunk/CitcomS: . Coupler
Solver
hlin at geodynamics.org
hlin at geodynamics.org
Thu Jul 19 11:37:14 PDT 2007
Author: hlin
Date: 2007-07-19 11:37:13 -0700 (Thu, 19 Jul 2007)
New Revision: 7713
Modified:
mc/3D/CitcomS/trunk/CitcomS/Controller.py
mc/3D/CitcomS/trunk/CitcomS/Coupler/EmbeddedCoupler.py
mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiC_Coupler.py
mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiE_Coupler.py
mc/3D/CitcomS/trunk/CitcomS/Coupler/__init__.py
mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py
mc/3D/CitcomS/trunk/CitcomS/Solver/CoupledSolver.py
Log:
M trunk/CitcomS/Coupler/MultiE_Coupler.py
M trunk/CitcomS/Coupler/__init__.py
M trunk/CitcomS/Coupler/EmbeddedCoupler.py
M trunk/CitcomS/Coupler/MultiC_Coupler.py
M trunk/CitcomS/Solver/CoupledSolver.py
M trunk/CitcomS/Controller.py
M trunk/CitcomS/MultiCoupledApp.py
solved the synchronization issue.
There are some bugs in the log of time.
Modified: mc/3D/CitcomS/trunk/CitcomS/Controller.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Controller.py 2007-07-19 17:50:38 UTC (rev 7712)
+++ mc/3D/CitcomS/trunk/CitcomS/Controller.py 2007-07-19 18:37:13 UTC (rev 7713)
@@ -85,7 +85,8 @@
# compute an acceptable timestep
dt = self.stableTimestep()
-
+ print "controller received dt = %g" %dt
+ print "self.step = %g" %self.step
# advance to the next step by dt
self.advance(dt)
Modified: mc/3D/CitcomS/trunk/CitcomS/Coupler/EmbeddedCoupler.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Coupler/EmbeddedCoupler.py 2007-07-19 17:50:38 UTC (rev 7712)
+++ mc/3D/CitcomS/trunk/CitcomS/Coupler/EmbeddedCoupler.py 2007-07-19 18:37:13 UTC (rev 7713)
@@ -212,34 +212,37 @@
- def stableTimestep(self, dt):
+ def stableTimestep(self, old_dt):
from ExchangerLib import exchangeTimestep
+
if self.synchronized:
+ print "start new big step"
mycomm = self.communicator
- self.ccplr_t = exchangeTimestep(dt,
+ self.ccplr_t = exchangeTimestep(old_dt,
mycomm.handle(),
self.sinkComm.handle(),
0)
self.ecplr_t = 0
self.synchronized = False
- old_dt = dt
+ dt = old_dt
+ self.ecplr_t += dt
# clipping oversized ecplr_t
- if self.ecplr_t + dt >= self.ccplr_t:
- dt = self.ccplr_t - self.ecplr_t
+ if self.ecplr_t >= self.ccplr_t:
+ print "** clip dt **"
+ print "dt = %g, ecplr_t = %g, ccplr_t = %g" %(dt, self.ecplr_t, self.ccplr_t)
+ dt = dt - (self.ecplr_t - self.ccplr_t)
self.ecplr_t = self.ccplr_t
self.synchronized = True
- #print "ECPLR: SYNCHRONIZED!"
- else:
- self.ecplr_t += dt
+ print self.name, " SYNCHRONIZED!"
# store timestep for interpolating boundary velocities
self.inlet.storeTimestep(self.ecplr_t, self.ccplr_t)
- #print "%s - old dt = %g exchanged dt = %g" % (
- # self.__class__, old_dt, dt)
- #print "ccplr_t = %g ecplr_t = %g" % (self.ccplr_t, self.ecplr_t)
+ print "%s - old dt = %g exchanged dt = %g" % (
+ self.name, old_dt, dt)
+ print "ccplr_t = %g ecplr_t = %g" % (self.ccplr_t, self.ecplr_t)
return dt
Modified: mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiC_Coupler.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiC_Coupler.py 2007-07-19 17:50:38 UTC (rev 7712)
+++ mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiC_Coupler.py 2007-07-19 18:37:13 UTC (rev 7713)
@@ -174,8 +174,8 @@
assert remote_dt2 < dt, \
'Size of dt in the esolver is greater than dt in the csolver2!'
- #print "%s - old dt = %g exchanged dt = %g" % (
- # self.__class__, dt, remote_dt)
+ print "%s - old dt = %g exchanged dt = %g" % (
+ self.__class__, dt, remote_dt)
return dt
def exchangeSignal2(self, signal):
@@ -187,9 +187,6 @@
return newsgnl
def endTimestep(self, steps, done):
- #########################################
- ## fundamentally changed revision
- #########################################
# exchange predefined signal btwn couplers
# the signal is used to sync the timesteps
@@ -207,7 +204,11 @@
#receive signals
recv = self.exchangeSignal(sent)
recv2= self.exchangeSignal2(sent)
+ #print "#####"
+ #print "recv= %d " % recv, "recv2 = %d" % recv2
+ #print "#####"
+
# determining what to send
if done or (recv == END_SIMULATION_SIGNAL) or \
(recv2 == END_SIMULATION_SIGNAL):
@@ -223,8 +224,6 @@
# tell the embedded couplers to keep going
sent = BIG_NEW_STEP_SIGNAL
#print self.name, 'exchanging timestep =', steps
- self.coupled_steps = self.exchangeSignal(steps)
- self.coupled_steps2 = self.exchangeSignal2(steps)
#print self.name, 'exchanged timestep =', self.coupled_steps
KEEP_WAITING_FLAG = False
else:
@@ -234,6 +233,17 @@
# send instructions to embedded couplers
recv = self.exchangeSignal(sent)
recv2= self.exchangeSignal2(sent)
+ #print "#####"
+ #print "sent = %d " % sent
+ #print "#####"
+ #import sys
+ #sys.stdout.flush()
+
+ # this must be put here because it use the same
+ # exchangeSignal function. The order of function calls matters.
+ if sent == BIG_NEW_STEP_SIGNAL:
+ self.coupled_steps = self.exchangeSignal(steps)
+ self.coupled_steps2 = self.exchangeSignal2(steps)
return done
Modified: mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiE_Coupler.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiE_Coupler.py 2007-07-19 17:50:38 UTC (rev 7712)
+++ mc/3D/CitcomS/trunk/CitcomS/Coupler/MultiE_Coupler.py 2007-07-19 18:37:13 UTC (rev 7713)
@@ -26,10 +26,16 @@
sent = KEEP_WAITING_SIGNAL
while 1:
+
+ #print "*****" , self.name
# send signal
recv = self.exchangeSignal(sent)
+ #print "ecplr send %d" % sent
+
# receive instruction
recv = self.exchangeSignal(sent)
+ #print "ecplr receive %d" % recv
+ #print "*****"
# determine what to do
if done or (recv == END_SIMULATION_SIGNAL):
@@ -41,7 +47,7 @@
pass
else:
break
- elif recv == BIG_NEW_STEP_SIGNAL:
+ elif recv == BIG_NEW_STEP_SIGNAL:
assert self.synchronized, \
"embedded coupler not synchronized on a big step"
#print self.name, 'exchanging timestep =', steps
Modified: mc/3D/CitcomS/trunk/CitcomS/Coupler/__init__.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Coupler/__init__.py 2007-07-19 17:50:38 UTC (rev 7712)
+++ mc/3D/CitcomS/trunk/CitcomS/Coupler/__init__.py 2007-07-19 18:37:13 UTC (rev 7713)
@@ -42,6 +42,11 @@
return MultiC_Coupler(name, facility)
+def multiembeddedcoupler(name, facility):
+ from MultiE_Coupler import MultiE_Coupler
+ return MultiE_Coupler(name, facility)
+
+
# version
__id__ = "$Id$"
Modified: mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py 2007-07-19 17:50:38 UTC (rev 7712)
+++ mc/3D/CitcomS/trunk/CitcomS/MultiCoupledApp.py 2007-07-19 18:37:13 UTC (rev 7713)
@@ -161,10 +161,10 @@
factory=Coupler.multicontainingcoupler,
args=("ccoupler","ccoupler"))
ecoupler1 = pyre.inventory.facility("ecoupler1",
- factory=Coupler.embeddedcoupler,
+ factory=Coupler.multiembeddedcoupler,
args=("ecoupler1","ecoupler1"))
ecoupler2 = pyre.inventory.facility("ecoupler2",
- factory=Coupler.embeddedcoupler,
+ factory=Coupler.multiembeddedcoupler,
args=("ecoupler2","ecoupler2"))
csolver = pyre.inventory.facility("csolver",
Modified: mc/3D/CitcomS/trunk/CitcomS/Solver/CoupledSolver.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Solver/CoupledSolver.py 2007-07-19 17:50:38 UTC (rev 7712)
+++ mc/3D/CitcomS/trunk/CitcomS/Solver/CoupledSolver.py 2007-07-19 18:37:13 UTC (rev 7713)
@@ -106,6 +106,7 @@
# negotiate with other solver(s)
dt = self.coupler.stableTimestep(dt)
+ print "solver received dt = %g" %dt
return dt
More information about the cig-commits
mailing list