[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