[cig-commits] r14854 - in short/3D/PyLith/branches/pylith-swig: pylith/problems unittests/pytests/problems

brad at geodynamics.org brad at geodynamics.org
Sun May 3 21:28:06 PDT 2009


Author: brad
Date: 2009-05-03 21:28:05 -0700 (Sun, 03 May 2009)
New Revision: 14854

Modified:
   short/3D/PyLith/branches/pylith-swig/pylith/problems/Formulation.py
   short/3D/PyLith/branches/pylith-swig/pylith/problems/Implicit.py
   short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStep.py
   short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepAdapt.py
   short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUniform.py
   short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUser.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStep.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepAdapt.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUniform.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUser.py
Log:
Fixed bugs associated with nondimensionalizing time stepping.

Modified: short/3D/PyLith/branches/pylith-swig/pylith/problems/Formulation.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/problems/Formulation.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/pylith/problems/Formulation.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -227,7 +227,7 @@
     """
     Get total time for simulation.
     """
-    return self.timeStep.totalTime
+    return self.timeStep.totalTimeN # Nondimensionalized total time
 
 
   def getTimeStep(self):

Modified: short/3D/PyLith/branches/pylith-swig/pylith/problems/Implicit.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/problems/Implicit.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/pylith/problems/Implicit.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -131,7 +131,8 @@
     """
     Get time at which time stepping should start.
     """
-    dt = self.timeStep.currentStep()
+    dt = self.timeStep.timeStep(self.mesh,
+                                self.integratorsMesh + self.integratorsSubMesh)
     return -dt
 
 

Modified: short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStep.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStep.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStep.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -38,6 +38,8 @@
     from pyre.units.time import second
     self.totalTime = 0.0*second
     self.dt = 0.0*second
+    self.totalTimeN = 0.0 # Nondimensionalized total time
+    self.dtN = 0.0 # Nondimenionalized time step
     return
 
 
@@ -73,8 +75,8 @@
 
     # Nondimensionalize time scales
     timeScale = normalizer.timeScale()
-    self.totalTime = normalizer.nondimensionalize(self.totalTime, timeScale)
-    self.dt = normalizer.nondimensionalize(self.dt, timeScale)
+    self.totalTimeN = normalizer.nondimensionalize(self.totalTime, timeScale)
+    self.dtN = normalizer.nondimensionalize(self.dt, timeScale)
 
     self._logger.eventEnd(logEvent)
     return
@@ -93,14 +95,14 @@
     Get stable time step for advancing forward in time.
     """
     # Default is to use the current time step.
-    return self.dt
+    return self.dtN
   
 
   def currentStep(self):
     """
     Get current time step size.
     """
-    return self.dt
+    return self.dtN
   
 
   # PRIVATE METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepAdapt.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepAdapt.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepAdapt.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -79,6 +79,7 @@
     TimeStep.__init__(self, name)
     self._loggingPrefix = "DtAd "
     self.skipped = 0
+    self.maxDtN = 0.0 # Nondimensionalized maximum time step
     return
 
 
@@ -93,7 +94,7 @@
 
     # Nondimensionalize time scales
     timeScale = normalizer.timeScale()
-    self.maxDt = normalizer.nondimensionalize(self.maxDt, timeScale)
+    self.maxDtN = normalizer.nondimensionalize(self.maxDt, timeScale)
 
     self._logger.eventEnd(logEvent)
     return
@@ -104,7 +105,7 @@
     Get number of total time steps (or best guess if adaptive).
     """
     # Guess using maximum time step
-    nsteps = int(1.0 + self.totalTime / self.maxDt)
+    nsteps = int(1.0 + self.totalTimeN / self.maxDtN)
     return nsteps
 
 
@@ -119,13 +120,13 @@
         dtStable = dt
     
     if self.skipped < self.adaptSkip and \
-          self.dt != 0.0 and \
-          self.dt < dtStable:
+          self.dtN != 0.0 and \
+          self.dtN < dtStable:
       self.skipped += 1
     else:
-      self.dt = min(dtStable/self.stabilityFactor, self.maxDt)
+      self.dtN = min(dtStable/self.stabilityFactor, self.maxDtN)
       self.skipped = 0
-    return self.dt
+    return self.dtN
 
   
   # PRIVATE METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUniform.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUniform.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUniform.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -71,7 +71,7 @@
     """
     Get number of total time steps (or best guess if adaptive).
     """
-    nsteps = int(1 + self.totalTime / self.dt)
+    nsteps = int(1 + self.totalTimeN / self.dtN)
     return nsteps
 
 
@@ -79,7 +79,7 @@
     """
     Adjust stable time step for advancing forward in time.
     """
-    return self.dt
+    return self.dtN
 
   
   # PRIVATE METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUser.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUser.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/pylith/problems/TimeStepUser.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -115,11 +115,14 @@
 
     # Nondimensionalize time steps
     timeScale = normalizer.timeScale()
+    self.totalTimeN = normalizer.nondimensionalize(self.totalTime, timeScale)
     for i in xrange(len(self.steps)):
-      self.steps[i] = normalizer.nondimensionalize(self.steps[i], timeScale)
+      step = normalizer.nondimensionalize(self.steps[i], timeScale)
+      assert(step > 0.0)
+      self.steps[i] = step
 
     # Set current time step
-    self.dt = self.steps[self.index]
+    self.dtN = self.steps[self.index]
 
     self._logger.eventEnd(logEvent)
     return
@@ -129,11 +132,10 @@
     """
     Get number of total time steps (or best guess if adaptive).
     """
-    from pyre.units.time import second
     t = 0.0
     nsteps = 0
     index = 0
-    while t <= self.totalTime:
+    while t <= self.totalTimeN:
       t += self.steps[index]
       index += 1
       if index >= len(self.steps):
@@ -149,12 +151,12 @@
     """
     Get time step for advancing forward in time.
     """
-    self.dt = self.steps[self.index]
+    self.dtN = self.steps[self.index]
     if self.index+1 < len(self.steps):
       self.index += 1
     elif self.loopSteps:
       self.index = 0
-    return self.dt
+    return self.dtN
 
   
   # PRIVATE METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStep.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStep.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStep.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -113,7 +113,7 @@
 
     self.assertEqual(0.0, tstep.currentStep())
 
-    tstep.dt = 1.0e-4
+    tstep.dtN = 1.0e-4
     self.assertEqual(1.0e-4, tstep.currentStep())
 
     return

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepAdapt.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepAdapt.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepAdapt.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -55,8 +55,8 @@
     """
     tstep = self.tstep
 
-    self.assertEqual(0.0, tstep.totalTime)
-    self.assertEqual(0.5, tstep.maxDt)
+    self.assertEqual(0.0, tstep.totalTimeN)
+    self.assertEqual(0.5, tstep.maxDtN)
     return
   
 
@@ -68,8 +68,8 @@
 
     self.assertEqual(1, tstep.numTimeSteps())
 
-    tstep.totalTime = 4.0
-    tstep.maxDt = 2.0
+    tstep.totalTimeN = 4.0
+    tstep.maxDtN = 2.0
     self.assertEqual(3, tstep.numTimeSteps())
 
     return
@@ -130,8 +130,8 @@
     Test currentStep().
     """
     tstep = self.tstep
-    tstep.maxDt = 10.0
-    tstep.dt = tstep.maxDt
+    tstep.maxDtN = 10.0
+    tstep.dtN = tstep.maxDtN
     
     self.assertEqual(10.0, tstep.currentStep())
 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUniform.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUniform.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUniform.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -17,6 +17,7 @@
 import unittest
 from pylith.problems.TimeStepUniform import TimeStepUniform
 
+from spatialdata.units.Nondimensional import Nondimensional
 from pyre.units.time import second
 
 # ----------------------------------------------------------------------
@@ -25,17 +26,32 @@
   Unit testing of TimeStepUniform object.
   """
 
-  def test_numTimeSteps(self):
+  def setUp(self):
     """
-    Test numTimeSteps().
+    Setup time step object.
     """
+    normalizer = Nondimensional()
+    normalizer._configure()
+
     tstep = TimeStepUniform()
     tstep._configure()
+    tstep.preinitialize()
+    tstep.verifyConfiguration()
+    tstep.initialize(normalizer)
+    self.tstep = tstep
+    return
 
+
+  def test_numTimeSteps(self):
+    """
+    Test numTimeSteps().
+    """
+    tstep = self.tstep
+
     self.assertEqual(1, tstep.numTimeSteps())
 
-    tstep.totalTime = 4.0*second
-    tstep.dt = 2.0*second
+    tstep.totalTimeN = 4.0
+    tstep.dtN = 2.0
     self.assertEqual(3, tstep.numTimeSteps())
 
     return
@@ -45,16 +61,15 @@
     """
     Test timeStep().
     """
-    tstep = TimeStepUniform()
-    tstep._configure()
+    tstep = self.tstep
 
     integrators = None
     mesh = None
 
-    self.assertEqual(1.0*second, tstep.timeStep(mesh, integrators))
+    self.assertEqual(1.0, tstep.timeStep(mesh, integrators))
 
-    tstep.dt = 1.0e-4*second
-    self.assertEqual(1.0e-4*second, tstep.timeStep(mesh, integrators))
+    tstep.dtN = 1.0e-4
+    self.assertEqual(1.0e-4, tstep.timeStep(mesh, integrators))
 
     return
 
@@ -63,13 +78,12 @@
     """
     Test currentStep().
     """
-    tstep = TimeStepUniform()
-    tstep._configure()
+    tstep = self.tstep
 
-    self.assertEqual(1.0*second, tstep.currentStep())
+    self.assertEqual(1.0, tstep.currentStep())
 
-    tstep.dt = 1.0e-4*second
-    self.assertEqual(1.0e-4*second, tstep.currentStep())
+    tstep.dtN = 1.0e-4
+    self.assertEqual(1.0e-4, tstep.currentStep())
 
     return
 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUser.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUser.py	2009-05-04 02:11:09 UTC (rev 14853)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/problems/TestTimeStepUser.py	2009-05-04 04:28:05 UTC (rev 14854)
@@ -19,7 +19,7 @@
 
 from pyre.units.time import second,year
 
-stepsE = [1.0*year, 2.0*year, 3.0*year]
+stepsE = [2*1.0, 2*2.0, 2*3.0]
 
 # ----------------------------------------------------------------------
 class TestTimeStepUser(unittest.TestCase):
@@ -31,7 +31,7 @@
     from spatialdata.units.Nondimensional import Nondimensional
     normalizer = Nondimensional()
     normalizer._configure()
-    normalizer.setTimeScale(2.0*second)
+    normalizer.setTimeScale(0.5*year)
 
     tstep = TimeStepUser()
     tstep._configure()
@@ -58,8 +58,7 @@
     tstep = self.tstep
 
     for stepE, step in zip(stepsE, tstep.steps):
-      valueE = stepE.value / 2.0 # Nondimensionalize
-      self.assertEqual(valueE, step)
+      self.assertEqual(stepE, step)
     return
 
 
@@ -71,11 +70,11 @@
 
     self.assertEqual(1, tstep.numTimeSteps())
 
-    tstep.totalTime = (12.0*year).value / 2.0 # nondimensionalize
+    tstep.totalTimeN = 12.0 / 0.5 # nondimensionalize
     self.assertEqual(6, tstep.numTimeSteps())
 
     tstep.loopSteps = True
-    tstep.totalTime = (7.0*year).value / 2.0 # nondimensionalize
+    tstep.totalTimeN = 7.0 / 0.5 # nondimensionalize
     self.assertEqual(5, tstep.numTimeSteps())
     return
 
@@ -86,9 +85,9 @@
     """
     tstep = self.tstep
 
-    step1 = (1.0*year).value / 2.0 # nondimensionalize
-    step2 = (2.0*year).value / 2.0 # nondimensionalize
-    step3 = (3.0*year).value / 2.0 # nondimensionalize
+    step1 = 1.0 / 0.5 # nondimensionalize
+    step2 = 2.0 / 0.5 # nondimensionalize
+    step3 = 3.0 / 0.5 # nondimensionalize
 
     integrators = None
     mesh = None
@@ -119,9 +118,8 @@
     mesh = None
 
     tstep.timeStep(mesh, integrators)
-    stepE = 1.0*year
-    valueE = stepE.value / 2.0 # nondimensionalize
-    self.assertEqual(valueE, tstep.currentStep())
+    stepE = 1.0 / 0.5 # Nondimensionalize
+    self.assertEqual(stepE, tstep.currentStep())
     return
 
 



More information about the CIG-COMMITS mailing list