[cig-commits] r15206 - in short/3D/PyLith/trunk/pylith: apps bc faults feassemble materials meshio perf problems topology utils

brad at geodynamics.org brad at geodynamics.org
Thu Jun 11 23:23:17 PDT 2009


Author: brad
Date: 2009-06-11 23:23:15 -0700 (Thu, 11 Jun 2009)
New Revision: 15206

Modified:
   short/3D/PyLith/trunk/pylith/apps/PyLithApp.py
   short/3D/PyLith/trunk/pylith/bc/AbsorbingDampers.py
   short/3D/PyLith/trunk/pylith/bc/DirichletBC.py
   short/3D/PyLith/trunk/pylith/bc/DirichletBoundary.py
   short/3D/PyLith/trunk/pylith/bc/Neumann.py
   short/3D/PyLith/trunk/pylith/bc/PointForce.py
   short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py
   short/3D/PyLith/trunk/pylith/faults/Fault.py
   short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py
   short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py
   short/3D/PyLith/trunk/pylith/feassemble/Constraint.py
   short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicit.py
   short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicit.py
   short/3D/PyLith/trunk/pylith/feassemble/Integrator.py
   short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticity.py
   short/3D/PyLith/trunk/pylith/materials/Material.py
   short/3D/PyLith/trunk/pylith/meshio/OutputManager.py
   short/3D/PyLith/trunk/pylith/meshio/OutputSoln.py
   short/3D/PyLith/trunk/pylith/meshio/OutputSolnSubset.py
   short/3D/PyLith/trunk/pylith/perf/Field.py
   short/3D/PyLith/trunk/pylith/perf/GlobalOrder.py
   short/3D/PyLith/trunk/pylith/perf/Jacobian.py
   short/3D/PyLith/trunk/pylith/perf/Logger.py
   short/3D/PyLith/trunk/pylith/perf/Material.py
   short/3D/PyLith/trunk/pylith/perf/Memory.py
   short/3D/PyLith/trunk/pylith/perf/MemoryLogger.py
   short/3D/PyLith/trunk/pylith/problems/Explicit.py
   short/3D/PyLith/trunk/pylith/problems/Formulation.py
   short/3D/PyLith/trunk/pylith/problems/Implicit.py
   short/3D/PyLith/trunk/pylith/problems/Problem.py
   short/3D/PyLith/trunk/pylith/problems/TimeDependent.py
   short/3D/PyLith/trunk/pylith/problems/TimeStep.py
   short/3D/PyLith/trunk/pylith/problems/TimeStepAdapt.py
   short/3D/PyLith/trunk/pylith/problems/TimeStepUser.py
   short/3D/PyLith/trunk/pylith/topology/Distributor.py
   short/3D/PyLith/trunk/pylith/topology/MeshGenerator.py
   short/3D/PyLith/trunk/pylith/topology/MeshImporter.py
   short/3D/PyLith/trunk/pylith/topology/MeshRefiner.py
   short/3D/PyLith/trunk/pylith/topology/RefineUniform.py
   short/3D/PyLith/trunk/pylith/utils/PetscComponent.py
Log:
Worked on memory logging. Added ability to recursively traverse facility arrays in PetscComponents. Renamed event logger to _eventLogger to prevent confusion.

Modified: short/3D/PyLith/trunk/pylith/apps/PyLithApp.py
===================================================================
--- short/3D/PyLith/trunk/pylith/apps/PyLithApp.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/apps/PyLithApp.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -80,7 +80,7 @@
     self._setupLogging()
 
     # Create mesh (adjust to account for interfaces (faults) if necessary)
-    self._logger.stagePush("Meshing")
+    self._eventLogger.stagePush("Meshing")
     interfaces = None
     if "interfaces" in dir(self.problem):
       interfaces = self.problem.interfaces.components()
@@ -89,10 +89,10 @@
     del interfaces
     del self.mesher
     self._debug.log(resourceUsageString())
-    self._logger.stagePop()
+    self._eventLogger.stagePop()
 
     # Setup problem, verify configuration, and then initialize
-    self._logger.stagePush("Setup")
+    self._eventLogger.stagePush("Setup")
     self.problem.preinitialize(mesh)
     self._debug.log(resourceUsageString())
 
@@ -101,16 +101,16 @@
     self.problem.initialize()
     self._debug.log(resourceUsageString())
 
-    self._logger.stagePop()
+    self._eventLogger.stagePop()
 
     # Run problem
     self.problem.run(self)
     self._debug.log(resourceUsageString())
 
     # Cleanup
-    self._logger.stagePush("Finalize")
+    self._eventLogger.stagePush("Finalize")
     self.problem.finalize()
-    self._logger.stagePop()
+    self._eventLogger.stagePop()
 
     del mesh
     del self.problem
@@ -144,7 +144,7 @@
     logger.className("PyLith")
     logger.initialize()
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/bc/AbsorbingDampers.py
===================================================================
--- short/3D/PyLith/trunk/pylith/bc/AbsorbingDampers.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/bc/AbsorbingDampers.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -89,7 +89,7 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     BoundaryCondition.verifyConfiguration(self, self.mesh)
     Integrator.verifyConfiguration(self)
@@ -102,7 +102,7 @@
                self.label, self.mesh.dimension()-1)    
     ModuleAbsorbingDampers.verifyConfiguration(self, self.mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -111,12 +111,12 @@
     Initialize AbsorbingDampers boundary condition.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     Integrator.initialize(self, totalTime, numTimeSteps, normalizer)    
     BoundaryCondition.initialize(self, totalTime, numTimeSteps, normalizer)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/bc/DirichletBC.py
===================================================================
--- short/3D/PyLith/trunk/pylith/bc/DirichletBC.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/bc/DirichletBC.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -45,7 +45,12 @@
                                       family="spatial_database")
   dbInitial.meta['tip'] = "Database of parameters for initial values."
   
+  from pylith.perf.MemoryLogger import MemoryLogger
+  perfLogger = pyre.inventory.facility("perf_logger", family="perf_logger",
+                                       factory=MemoryLogger)
+  perfLogger.meta['tip'] = "Performance and memory logging."
 
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="dirichletbc"):
@@ -72,11 +77,11 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     BoundaryCondition.verifyConfiguration(self, self.mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -85,12 +90,19 @@
     Initialize DirichletBC boundary condition.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
+    from pylith.utils.petsc import MemoryLogger
+    #memoryLogger = MemoryLogger.singleton()
+    #memoryLogger.setDebug(0)
+    #memoryLogger.stagePush("BoundaryConditions")
+
     self.normalizer(normalizer)
     BoundaryCondition.initialize(self, totalTime, numTimeSteps, normalizer)
 
-    self._logger.eventEnd(logEvent)    
+    #memoryLogger.stagePop()    
+    self._modelMemoryUse()
+    self._eventLogger.eventEnd(logEvent)    
     return
   
 
@@ -112,7 +124,15 @@
     ModuleDirichletBC.__init__(self)
     return
   
+  
+  def _modelMemoryUse(self):
+    """
+    Model memory allocation.
+    """
+    #self.perfLogger.logFields("BoundaryConditions", self.parameterFields())
+    return
 
+
 # FACTORIES ////////////////////////////////////////////////////////////
 
 def boundary_condition():

Modified: short/3D/PyLith/trunk/pylith/bc/DirichletBoundary.py
===================================================================
--- short/3D/PyLith/trunk/pylith/bc/DirichletBoundary.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/bc/DirichletBoundary.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -90,12 +90,12 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     DirichletBC.verifyConfiguration(self)
     self.output.verifyConfiguration(self.mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -104,14 +104,14 @@
     Initialize DirichletBoundary boundary condition.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     DirichletBC.initialize(self, totalTime, numTimeSteps, normalizer)
 
     self.output.initialize(normalizer)
     self.output.writeInfo()
 
-    self._logger.eventEnd(logEvent)    
+    self._eventLogger.eventEnd(logEvent)    
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/bc/Neumann.py
===================================================================
--- short/3D/PyLith/trunk/pylith/bc/Neumann.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/bc/Neumann.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -101,7 +101,7 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     BoundaryCondition.verifyConfiguration(self, self.mesh)
     Integrator.verifyConfiguration(self)
@@ -115,7 +115,7 @@
     self.output.verifyConfiguration(self.mesh)
     ModuleNeumann.verifyConfiguration(self, self.mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -124,7 +124,7 @@
     Initialize Neumann boundary condition.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     
     Integrator.initialize(self, totalTime, numTimeSteps, normalizer)
     BoundaryCondition.initialize(self, totalTime, numTimeSteps, normalizer)
@@ -132,7 +132,7 @@
     self.output.initialize(normalizer, self.bcQuadrature)
     self.output.writeInfo()
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/bc/PointForce.py
===================================================================
--- short/3D/PyLith/trunk/pylith/bc/PointForce.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/bc/PointForce.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -59,11 +59,11 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     BoundaryCondition.verifyConfiguration(self, self.mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -72,12 +72,12 @@
     Initialize PointForce boundary condition.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     Integrator.initialize(self, totalTime, numTimeSteps, normalizer)
     BoundaryCondition.initialize(self, totalTime, numTimeSteps, normalizer)
 
-    self._logger.eventEnd(logEvent)    
+    self._eventLogger.eventEnd(logEvent)    
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/faults/EqKinSrc.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -80,11 +80,11 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.slipfn.verifyConfiguration()
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -93,11 +93,11 @@
     Initialize.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.slipfn.initialize()
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -138,7 +138,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/faults/Fault.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/Fault.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/faults/Fault.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -127,7 +127,7 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     faultDim = self.mesh.dimension() - 1
     if faultDim != self.faultQuadrature.cell.cellDim:
@@ -139,7 +139,7 @@
     if None != self.output:
       self.output.verifyConfiguration(self.mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -148,7 +148,7 @@
     Initialize fault.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.faultQuadrature.initialize()
     ModuleFault.initialize(self, 
@@ -159,7 +159,7 @@
       self.output.writeInfo()
       self.output.open(totalTime, numTimeSteps)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -168,12 +168,12 @@
     Hook for doing stuff after advancing time step.
     """
     logEvent = "%spoststep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self._info.log("Writing fault data.")
     self.output.writeData(t+dt, fields)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -124,7 +124,7 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     FaultCohesive.verifyConfiguration(self)
     Integrator.verifyConfiguration(self)
@@ -133,7 +133,7 @@
     for eqsrc in self.eqsrcs.components():
       eqsrc.verifyConfiguration()
     
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -142,7 +142,7 @@
     Initialize cohesive elements.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     self._info.log("Initializing fault '%s'." % self.label())
 
     Integrator.initialize(self, totalTime, numTimeSteps, normalizer)
@@ -151,7 +151,7 @@
       eqsrc.initialize()
     FaultCohesive.initialize(self, totalTime, numTimeSteps, normalizer)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -160,12 +160,12 @@
     Hook for doing stuff after advancing time step.
     """
     logEvent = "%spoststep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     Integrator.poststep(self, t, dt, totalTime, fields)
     FaultCohesive.poststep(self, t, dt, totalTime, fields)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/faults/SlipTimeFn.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -50,9 +50,9 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -61,9 +61,9 @@
     Initialize.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -94,7 +94,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/feassemble/Constraint.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/Constraint.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/feassemble/Constraint.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -100,7 +100,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicit.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicit.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicit.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -44,13 +44,13 @@
     Do initialization.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     IntegratorElasticity.initialize(self, totalTime, numTimeSteps, normalizer)
     ModuleElasticityExplicit.initialize(self, self.mesh)
     self._initializeOutput(totalTime, numTimeSteps, normalizer)
     
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicit.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicit.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicit.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -44,13 +44,14 @@
     Do initialization.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     IntegratorElasticity.initialize(self, totalTime, numTimeSteps, normalizer)
     ModuleElasticityImplicit.initialize(self, self.mesh)
     self._initializeOutput(totalTime, numTimeSteps, normalizer)
     
-    self._logger.eventEnd(logEvent)
+    self._modelMemoryUse()
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/feassemble/Integrator.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/Integrator.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/feassemble/Integrator.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -82,13 +82,13 @@
     Do initialization.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.normalizer(normalizer)
     if None != self.gravityField:
       self.gravityField(self.gravityField)
     
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -97,11 +97,11 @@
     Hook for doing stuff after advancing time step.
     """
     logEvent = "%spoststep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.updateStateVars(t, fields)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -133,7 +133,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticity.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticity.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticity.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -67,12 +67,12 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     Integrator.verifyConfiguration(self)
     self.output.verifyConfiguration(self.mesh)
 
-    self._logger.eventEnd(logEvent)    
+    self._eventLogger.eventEnd(logEvent)    
     return
 
 
@@ -81,14 +81,14 @@
     Initialize material properties.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self._info.log("Initializing integrator for material '%s'." % \
                    self.materialObj.label)
     Integrator.initialize(self, totalTime, numTimeSteps, normalizer)
     self.materialObj.normalizer(normalizer)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
   
@@ -97,14 +97,14 @@
     Hook for doing stuff after advancing time step.
     """
     logEvent = "%spoststep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     Integrator.poststep(self, t, dt, totalTime, fields)
 
     self._info.log("Writing material data.")
     self.output.writeData(t+dt, fields)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -136,4 +136,12 @@
     return
 
 
+  def _modelMemoryUse(self):
+    """
+    Model allocated memory.
+    """
+    self.materialObj.modelMemoryUse()
+    return
+
+
 # End of file 

Modified: short/3D/PyLith/trunk/pylith/materials/Material.py
===================================================================
--- short/3D/PyLith/trunk/pylith/materials/Material.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/materials/Material.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -82,6 +82,12 @@
     quadrature.meta['tip'] = "Quadrature object for numerical integration."
 
 
+    from pylith.perf.MemoryLogger import MemoryLogger
+    perfLogger = pyre.inventory.facility("perf_logger", family="perf_logger",
+                                         factory=MemoryLogger)
+    perfLogger.meta['tip'] = "Performance and memory logging."
+
+  
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="material"):
@@ -111,7 +117,7 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     if self.quadrature.cellDim != self.mesh.dimension() or \
        self.quadrature.spaceDim != self.mesh.coordsys.spaceDim():
@@ -125,7 +131,7 @@
                self.quadrature.cellDim, self.quadrature.spaceDim,
                self.mesh.dimension(), self.mesh.coordsys().spaceDim())
     
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -136,6 +142,14 @@
     return (self.mesh, "material-id", self.id())
 
 
+  def modelMemoryUse(self):
+    """
+    Model allocated memory.
+    """
+    self.perfLogger.logMaterial('Materials', self)
+    return
+
+
   # PRIVATE METHODS ////////////////////////////////////////////////////
 
   def _configure(self):
@@ -151,6 +165,7 @@
       self.dbInitialState(self.inventory.dbInitialState)
 
     self.quadrature = self.inventory.quadrature
+    self.perfLogger = self.inventory.perfLogger
     return
 
   
@@ -179,7 +194,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/meshio/OutputManager.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/OutputManager.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/meshio/OutputManager.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -127,7 +127,7 @@
     Initialize output manager.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     # Nondimensionalize time step
     self.normalizer = normalizer
@@ -143,7 +143,7 @@
       self.cellFilter.initialize(quadrature)
     self.writer.initialize(normalizer)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -152,14 +152,14 @@
     Prepare for writing data.
     """
     logEvent = "%sopen" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     nsteps = self._estimateNumSteps(totalTime, numTimeSteps)
 
     (mesh, label, labelId) = self.dataProvider.getDataMesh()
     self._open(mesh, nsteps, label, labelId)
 
-    self._logger.eventEnd(logEvent)    
+    self._eventLogger.eventEnd(logEvent)    
     return
 
 
@@ -168,11 +168,11 @@
     Perform post-write cleanup.
     """
     logEvent = "%sclose" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     self._close()
 
-    self._logger.eventEnd(logEvent)    
+    self._eventLogger.eventEnd(logEvent)    
     return
 
 
@@ -181,7 +181,7 @@
     Write information fields.
     """
     logEvent = "%swriteInfo" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     if len(self.vertexInfoFields) > 0 or len(self.cellInfoFields) > 0:
       t = 0.0
@@ -200,7 +200,7 @@
       self._closeTimeStep()
       self._close()
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -209,7 +209,7 @@
     Write fields at current time step.
     """
     logEvent = "%swriteData" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     if self._checkWrite(t) and \
            ( len(self.vertexDataFields) > 0 or \
@@ -228,7 +228,7 @@
 
       self._closeTimeStep()
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
       
     
@@ -361,7 +361,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/meshio/OutputSoln.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/OutputSoln.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/meshio/OutputSoln.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -79,12 +79,12 @@
     Initialize output manager.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     self.mesh = mesh
     OutputManagerMesh.initialize(self, normalizer)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/meshio/OutputSolnSubset.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/OutputSolnSubset.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/meshio/OutputSolnSubset.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -95,12 +95,12 @@
     Initialize output manager.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     self.submesh = self.subdomainMesh(mesh)
     OutputManager.initialize(self, normalizer)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/perf/Field.py
===================================================================
--- short/3D/PyLith/trunk/pylith/perf/Field.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/perf/Field.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -29,6 +29,7 @@
     self.chartSize = chartSize
     return
 
+
   def tabulate(self, memDict):
     """
     Tabulate memory use.
@@ -36,9 +37,11 @@
     # Here we have data + atlas + bc
     if not self.label in memDict:
       memDict[self.label] = 0
-    memDict[self.label] += (self.sizeDouble * self.size) + (2 * self.sizeInt * self.chartSize) + (2 * self.sizeInt * self.chartSize)
+    memDict[self.label] += (self.sizeDouble * self.size) + \
+        (2 * self.sizeInt * self.chartSize) + (2 * self.sizeInt * self.chartSize)
     return
 
+
 if __name__ == '__main__':
   print 'Memory:',Material('rock', 35).tabulate()
 

Modified: short/3D/PyLith/trunk/pylith/perf/GlobalOrder.py
===================================================================
--- short/3D/PyLith/trunk/pylith/perf/GlobalOrder.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/perf/GlobalOrder.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -28,6 +28,7 @@
     self.chartSize = chartSize
     return
 
+
   def tabulate(self, memDict):
     """
     Tabulate memory use.
@@ -35,7 +36,8 @@
     # Here we have a map<int --> (int,int)> + set<int>
     if not self.label in memDict:
       memDict[self.label] = 0
-    memDict[self.label] += self.chartSize*(3 * self.sizeInt + self.sizeMapEntry) + self.chartSize*(self.sizeSetEntry+self.sizeInt)
+    memDict[self.label] += self.chartSize*(3 * self.sizeInt + self.sizeMapEntry) + \
+        self.chartSize*(self.sizeSetEntry+self.sizeInt)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/perf/Jacobian.py
===================================================================
--- short/3D/PyLith/trunk/pylith/perf/Jacobian.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/perf/Jacobian.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -27,6 +27,7 @@
     self.label = label
     return
 
+
   def tabulate(self, memDict):
     """
     Tabulate memory use.

Modified: short/3D/PyLith/trunk/pylith/perf/Logger.py
===================================================================
--- short/3D/PyLith/trunk/pylith/perf/Logger.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/perf/Logger.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -44,6 +44,7 @@
     verbose = pyre.inventory.bool("verbose", default=False)
     verbose.meta['tip'] = "Print information to the screen."
 
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="perf_logger"):
@@ -53,6 +54,7 @@
     PetscComponent.__init__(self, name, facility="perf_logger")
     return
 
+
   def join(self, logger):
     """
     Incorporate information from another logger.
@@ -60,6 +62,7 @@
     raise NotImplementedError, "join() not implemented."
     return
 
+
   def logMesh(self, stage, mesh):
     """
     Read mesh parameters to determine memory from our model.
@@ -79,13 +82,6 @@
     return
 
 
-  def _setupLogging(self):
-    """
-    Setup event logging.
-    """
-    return
-  
-
 # FACTORIES ////////////////////////////////////////////////////////////
 
 def perf_logger():

Modified: short/3D/PyLith/trunk/pylith/perf/Material.py
===================================================================
--- short/3D/PyLith/trunk/pylith/perf/Material.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/perf/Material.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -28,6 +28,7 @@
     self.ncells = numCells
     return
 
+
   def tabulate(self, memDict):
     """
     Tabulate memory use.

Modified: short/3D/PyLith/trunk/pylith/perf/Memory.py
===================================================================
--- short/3D/PyLith/trunk/pylith/perf/Memory.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/perf/Memory.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -14,25 +14,33 @@
 ##
 ## @brief Python object for calculating memory usage.
 
+import pylith.utils.petsc as petsc
+
 class Memory(object):
   sizeInt    = 4
   sizeDouble = 8
   import distutils.sysconfig
   pointerSize = distutils.sysconfig.get_config_var('SIZEOF_VOID_P')
+  if pointerSize is None:
+    # Get pointer using sizeof(void*) in PyLith C++ library.
+    pointerSize = petsc.sizeofVoidPtr()
+
   if pointerSize == 4:
     sizeSetEntry = 12
     sizeMapEntry = 16
     sizeArrow    = 40 # 32 bit
+
   elif pointerSize == 8:
     sizeSetEntry = 24
     sizeMapEntry = 32
     sizeArrow    = 56 # 64 bit
+
   elif pointerSize is None:
     sizeSetEntry = 0
     sizeMapEntry = 0
     sizeArrow    = 0 # Use 0 if can't get estimate of pointer size.
   else:
-    raise RuntimeError('Could not determine the size of a pointer')
+    raise RuntimeError("Unknown pointer size '%s'.")
 
 
 # End of file

Modified: short/3D/PyLith/trunk/pylith/perf/MemoryLogger.py
===================================================================
--- short/3D/PyLith/trunk/pylith/perf/MemoryLogger.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/perf/MemoryLogger.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -37,7 +37,7 @@
     ## Python object for managing Problem facilities and properties.
     ##
     ## \b Properties
-    ## @li \b dummy Nothing.
+    ## @li \b include_dealloc Subtract deallocate memory when reporting.
 
     import pyre.inventory
 
@@ -47,7 +47,7 @@
 
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
-  def __init__(self, name="perf_logger"):
+  def __init__(self, name="memory_logger"):
     """
     Constructor.
     """
@@ -113,7 +113,18 @@
     ##self.logField('Field', quadrature.basisDerivPrecomp())
     return
 
+  
+  def logFields(self, stage, fields):
+    """
+    Log fields to determine memory from our model.
+    """
+    names = fields.fieldNames()
+    for name in names:
+      field = fields.get(name)
+      self.logField(stage, field)
+    return
 
+
   def logField(self, stage, field):
     """
     Read field parameters to determine memory from our model.
@@ -183,6 +194,7 @@
     return '%s%-30s %8d bytes (%.3f MB)' % \
         (self.prefix(indent), name+' ('+source+'):', mem, mem / self.megabyte)
 
+
   def processMemDict(self, memDict, indent = 0, namePrefix = '', 
                      includeDealloc = True):
     from pylith.utils.petsc import MemoryLogger
@@ -229,6 +241,7 @@
                       (self.prefix(indent), total))
     return output, total, codeTotal
 
+
   def show(self):
     """
     Print memory usage.
@@ -247,6 +260,7 @@
     print '\n'.join(output)
     return
 
+
   # PRIVATE METHODS ////////////////////////////////////////////////////
 
   def _configure(self):
@@ -258,13 +272,6 @@
     return
 
 
-  def _setupLogging(self):
-    """
-    Setup event logging.
-    """
-    return
-  
-
 # FACTORIES ////////////////////////////////////////////////////////////
 
 def perf_logger():

Modified: short/3D/PyLith/trunk/pylith/problems/Explicit.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/Explicit.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/Explicit.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -63,11 +63,17 @@
     Initialize problem for explicit time integration.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     
     Formulation.initialize(self, dimension, normalizer)
 
-    self._info.log("Creating other fields and matrices.")
+    from pylith.utils.petsc import MemoryLogger
+    logger = MemoryLogger.singleton()
+    logger.setDebug(0)
+    logger.stagePush("Problem")
+
+    # Allocate other fields, reusing layout from dispIncr
+    self._info.log("Creating other fields.")
     self.fields.add("disp(t-dt)", "displacement")
     self.fields.copyLayout("dispIncr(t->t+dt)")
     self._debug.log(resourceUsageString())
@@ -81,6 +87,7 @@
     residual.zero()
     residual.createVector()
     self._debug.log(resourceUsageString())
+    logger.stagePop()
 
     self._info.log("Creating Jacobian matrix.")
     from pylith.topology.Jacobian import Jacobian
@@ -88,6 +95,7 @@
     self.jacobian.zero() # TEMPORARY, to get correct memory usage
     self._debug.log(resourceUsageString())
 
+    logger.stagePush("Problem")
     self._info.log("Initializing solver.")
     self.solver.initialize(self.fields, self.jacobian, self)
     self._debug.log(resourceUsageString())
@@ -98,7 +106,10 @@
     for integrator in self.integratorsMesh + self.integratorsSubMesh:
       integrator.useSolnIncr(True)
 
-    self._logger.eventEnd(logEvent)
+    logger.stagePop()
+    logger.setDebug(0)
+    self._modelMemoryUse()
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -107,7 +118,7 @@
     Hook for doing stuff before advancing time step.
     """
     logEvent = "%sprestep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     
     dispIncr = self.fields.get("dispIncr(t->t+dt)")
     for constraint in self.constraints:
@@ -121,7 +132,7 @@
     if needNewJacobian:
       self._reformJacobian(t, dt)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -130,7 +141,7 @@
     Advance to next time step.
     """
     logEvent = "%sstep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self._reformResidual(t, dt)
     
@@ -139,7 +150,7 @@
     dispIncr = self.fields.get("dispIncr(t->t+dt)")
     self.solver.solve(dispIncr, self.jacobian, residual)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -148,7 +159,7 @@
     Hook for doing stuff after advancing time step.
     """
     logEvent = "%spoststep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     
     dispIncr = self.fields.get("dispIncr(t->t+dt)")
     dispT = self.fields.get("disp(t)")
@@ -160,7 +171,7 @@
 
     Formulation.poststep(self, t, dt)
 
-    self._logger.eventEnd(logEvent)    
+    self._eventLogger.eventEnd(logEvent)    
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/problems/Formulation.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/Formulation.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/Formulation.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -107,6 +107,7 @@
                                          factory=MemoryLogger)
     perfLogger.meta['tip'] = "Performance and memory logging."
 
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="formulation"):
@@ -131,7 +132,7 @@
     """
     self._setupLogging()
     logEvent = "%spreinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.timeStep.preinitialize()
     
@@ -149,7 +150,7 @@
     for output in self.output.components():
       output.preinitialize()
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -158,7 +159,7 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.timeStep.verifyConfiguration()
 
@@ -169,7 +170,7 @@
     for output in self.output.components():
       output.verifyConfiguration(self.mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -178,7 +179,7 @@
     Create integrators for each element family.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     self.timeStep.initialize(normalizer)
 
@@ -217,9 +218,9 @@
     # Setup fields
     self._info.log("Creating solution field.")
     from pylith.utils.petsc import MemoryLogger
-    logger = MemoryLogger.singleton()
-    logger.setDebug(0)
-    logger.stagePush("Problem")
+    memoryLogger = MemoryLogger.singleton()
+    memoryLogger.setDebug(0)
+    memoryLogger.stagePush("Problem")
     self.fields.add("dispIncr(t->t+dt)", "displacement_increment")
     self.fields.add("disp(t)", "displacement")
     self.fields.add("residual", "residual")
@@ -239,13 +240,13 @@
     solution.allocate()
     for constraint in self.constraints:
       constraint.setConstraints(solution)
-    logger.stagePop()
+    memoryLogger.stagePop()
 
     # This creates a global order
     solution.createVector()
     solution.createScatter()
 
-    logger.stagePush("Problem")
+    memoryLogger.stagePush("Problem")
     dispT = self.fields.get("disp(t)")
     dispT.vectorFieldType(dispT.VECTOR)
     dispT.scale(lengthScale.value)
@@ -254,11 +255,11 @@
     residual.vectorFieldType(residual.VECTOR)
     residual.scale(lengthScale.value)
 
-    logger.stagePop()
-    logger.setDebug(0)
+    memoryLogger.stagePop()
+    memoryLogger.setDebug(0)
     self._debug.log(resourceUsageString())
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -281,12 +282,12 @@
     Get stable time step for advancing forward in time.
     """
     logEvent = "%stimestep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     dt = self.timeStep.timeStep(self.mesh,
                                 self.integratorsMesh + self.integratorsSubMesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return dt
   
 
@@ -295,9 +296,9 @@
     Hook for doing stuff before advancing time step.
     """
     logEvent = "%sprestep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -306,9 +307,9 @@
     Advance to next time step.
     """
     logEvent = "%sstep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -317,7 +318,7 @@
     Hook for doing stuff after advancing time step.
     """
     logEvent = "%spoststep" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     totalTime = self.timeStep.totalTime
 
@@ -329,7 +330,7 @@
     for constraint in self.constraints:
       constraint.poststep(t, dt, totalTime, self.fields)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -338,12 +339,13 @@
     Cleanup after time stepping.
     """
     logEvent = "%sfinalize" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     for name in self.fields.fieldNames():
       field = self.fields.get(name)
       self.perfLogger.logField('Problem', field)
-    self.perfLogger.logGlobalOrder('GlobalOrder', 'VectorOrder', self.fields.get('residual'))
+    self.perfLogger.logGlobalOrder('GlobalOrder', 'VectorOrder',
+                                   self.fields.get('residual'))
     for integrator in self.integratorsMesh + self.integratorsSubMesh:
       self.perfLogger.logQuadrature('Quadrature', integrator.quadrature())
 
@@ -362,7 +364,7 @@
       output.close()
     self._debug.log(resourceUsageString())
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -475,12 +477,12 @@
     """
     self._debug.log(resourceUsageString())
     self._info.log("Integrating Jacobian operator.")
-    self._logger.stagePush("Reform Jacobian")
+    self._eventLogger.stagePush("Reform Jacobian")
 
     self.updateSettings(self.jacobian, self.fields, t, dt)
     self.reformJacobian()
 
-    self._logger.stagePop()
+    self._eventLogger.stagePop()
 
     if self.viewJacobian:
       self.jacobianViewer.write(self.jacobian, t)
@@ -494,12 +496,12 @@
     Reform residual vector for operator.
     """
     self._info.log("Integrating residual term in operator.")
-    self._logger.stagePush("Reform Residual")
+    self._eventLogger.stagePush("Reform Residual")
 
     self.updateSettings(self.jacobian, self.fields, t, dt)
     self.reformResidual()
 
-    self._logger.stagePop()
+    self._eventLogger.stagePop()
     self._debug.log(resourceUsageString())
     return
 
@@ -533,10 +535,23 @@
     for stage in stages:
       logger.registerStage(stage)
 
-    self._logger = logger
+    self._eventLogger = logger
     return
-  
 
+
+  def _modelMemoryUse(self):
+    """
+    Model memory allocation.
+    """
+    self.perfLogger.logFields('Problem', self.fields)
+    self.perfLogger.logJacobian('Jacobian', 'dummy')
+    self.perfLogger.logGlobalOrder('GlobalOrder', 'VectorOrder',
+                                   self.fields.get('residual'))
+    for integrator in self.integratorsMesh + self.integratorsSubMesh:
+      self.perfLogger.logQuadrature('Quadrature', integrator.quadrature())
+    return
+
+
   def _cleanup(self):
     """
     Deallocate PETSc and local data structures.

Modified: short/3D/PyLith/trunk/pylith/problems/Implicit.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/Implicit.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/Implicit.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -88,13 +88,15 @@
     """
     Formulation.initialize(self, dimension, normalizer)
 
+    logEvent = "%sinit" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+    from pylith.utils.petsc import MemoryLogger
+    memoryLogger = MemoryLogger.singleton()
+    memoryLogger.setDebug(0)
+    memoryLogger.stagePush("Problem")
+
     # Allocate other fields, reusing layout from dispIncr
     self._info.log("Creating other fields.")
-    self._info.log("Creating solution field.")
-    from pylith.utils.petsc import MemoryLogger
-    logger = MemoryLogger.singleton()
-    logger.setDebug(0)
-    logger.stagePush("Problem")
     self.fields.copyLayout("dispIncr(t->t+dt)")
 
     # Setup fields and set to zero
@@ -104,7 +106,7 @@
     residual.zero()
     residual.createVector()
     self._debug.log(resourceUsageString())
-    logger.stagePop()
+    memoryLogger.stagePop()
 
     # Allocates memory for nonzero pattern and Jacobian
     self._info.log("Creating Jacobian matrix.")
@@ -113,7 +115,7 @@
     self.jacobian.zero() # TEMPORARY, to get correct memory usage
     self._debug.log(resourceUsageString())
 
-    logger.stagePush("Problem")
+    memoryLogger.stagePush("Problem")
     self._info.log("Initializing solver.")
     self.solver.initialize(self.fields, self.jacobian, self)
     self._debug.log(resourceUsageString())
@@ -125,8 +127,9 @@
     for integrator in self.integratorsMesh + self.integratorsSubMesh:
       integrator.useSolnIncr(False)
 
-    logger.stagePop()
-    logger.setDebug(0)
+    memoryLogger.stagePop()
+    memoryLogger.setDebug(0)
+    self._modelMemoryUse()
     return
 
 
@@ -186,9 +189,9 @@
 
     self._info.log("Solving equations.")
     residual = self.fields.get("residual")
-    self._logger.stagePush("Solve")
+    self._eventLogger.stagePush("Solve")
     self.solver.solve(dispIncr, self.jacobian, residual)
-    self._logger.stagePop()
+    self._eventLogger.stagePop()
 
     return
 
@@ -214,7 +217,6 @@
     Cleanup after time stepping.
     """
     Formulation.finalize(self)
-    self.perfLogger.logJacobian('Jacobian', 'dummy')
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/problems/Problem.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/Problem.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/Problem.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -192,11 +192,6 @@
     raise NotImplementedError, "initialize() not implemented."
     return
 
-  def logMaterials(self):
-    for material in self.materials.components():
-      self.perfLogger.logMaterial('Materials', material)
-    return
-
   def run(self, app):
     """
     Solve the problem.
@@ -253,7 +248,7 @@
     logger.className("Problem")
     logger.initialize()
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/problems/TimeDependent.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/TimeDependent.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/TimeDependent.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -108,14 +108,13 @@
     """
     Solve time dependent problem.
     """
-    self.logMaterials()
     self._info.log("Solving problem.")
     self.checkpointTimer.toplevel = app # Set handle for saving state
     
     t = self.formulation.getStartTime()
     timeScale = self.normalizer.timeScale()
     while t < self.formulation.getTotalTime():
-      self._logger.stagePush("Prestep")
+      self._eventLogger.stagePush("Prestep")
       tsec = self.normalizer.dimensionalize(t, timeScale)
       self._info.log("Main time loop, current time is t=%s" % tsec)
       
@@ -129,19 +128,19 @@
       self._info.log("Preparing to advance solution from time t=%s to t=%s." %\
                      (tsec, tsec+dtsec))
       self.formulation.prestep(t, dt)
-      self._logger.stagePop()
+      self._eventLogger.stagePop()
 
       self._info.log("Advancing solution from t=%s to t=%s." % \
                      (tsec, tsec+dtsec))
-      self._logger.stagePush("Step")
+      self._eventLogger.stagePush("Step")
       self.formulation.step(t, dt)
-      self._logger.stagePop()
+      self._eventLogger.stagePop()
 
       self._info.log("Finishing advancing solution from t=%s to t=%s." % \
                      (tsec, tsec+dtsec))
-      self._logger.stagePush("Poststep")
+      self._eventLogger.stagePush("Poststep")
       self.formulation.poststep(t, dt)
-      self._logger.stagePop()
+      self._eventLogger.stagePop()
 
       # Update time
       t += dt

Modified: short/3D/PyLith/trunk/pylith/problems/TimeStep.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/TimeStep.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/TimeStep.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -48,9 +48,9 @@
     """
     self._setupLogging()
     logEvent = "%spreinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -59,9 +59,9 @@
     Verify compatibility of configuration.
     """
     logEvent = "%sverify" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -70,14 +70,14 @@
     Initialize time step algorithm.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     # Nondimensionalize time scales
     timeScale = normalizer.timeScale()
     self.totalTimeN = normalizer.nondimensionalize(self.totalTime, timeScale)
     self.dtN = normalizer.nondimensionalize(self.dt, timeScale)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 
@@ -132,7 +132,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/problems/TimeStepAdapt.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/TimeStepAdapt.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/TimeStepAdapt.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -88,7 +88,7 @@
     Initialize time step algorithm.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     TimeStep.initialize(self, normalizer)
 
@@ -96,7 +96,7 @@
     timeScale = normalizer.timeScale()
     self.maxDtN = normalizer.nondimensionalize(self.maxDt, timeScale)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/problems/TimeStepUser.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/TimeStepUser.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/problems/TimeStepUser.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -105,7 +105,7 @@
     Initialize time step algorithm.
     """
     logEvent = "%sinit" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     TimeStep.initialize(self, normalizer)
 
@@ -124,7 +124,7 @@
     # Set current time step
     self.dtN = self.steps[self.index]
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/topology/Distributor.py
===================================================================
--- short/3D/PyLith/trunk/pylith/topology/Distributor.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/topology/Distributor.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -70,7 +70,7 @@
     """
     self._setupLogging()
     logEvent = "%sdistribute" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
 
     from pylith.topology.Mesh import Mesh
     newMesh = Mesh(mesh.dimension())
@@ -80,7 +80,7 @@
       self.dataWriter.initialize(normalizer)
       ModuleDistributor.write(self.dataWriter, newMesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return newMesh
 
 
@@ -110,7 +110,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/topology/MeshGenerator.py
===================================================================
--- short/3D/PyLith/trunk/pylith/topology/MeshGenerator.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/topology/MeshGenerator.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -89,14 +89,14 @@
     Adjust topology for interface implementation.
     """
     logEvent = "%sadjTopo" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     
     if not interfaces is None:
       for interface in interfaces:
         self._info.log("Adjusting topology for fault '%s'." % interface.label)
         interface.adjustTopology(mesh)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return
   
 
@@ -117,7 +117,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/topology/MeshImporter.py
===================================================================
--- short/3D/PyLith/trunk/pylith/topology/MeshImporter.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/topology/MeshImporter.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -83,7 +83,7 @@
 
     self._setupLogging()
     logEvent = "%screate" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)    
+    self._eventLogger.eventBegin(logEvent)    
 
     mesh = self.reader.read(normalizer, self.debug, self.interpolate)
     if self.debug:
@@ -105,7 +105,7 @@
     # Nondimensionalize mesh (coordinates of vertices).
     mesh.nondimensionalize(normalizer)
 
-    self._logger.eventEnd(logEvent)    
+    self._eventLogger.eventEnd(logEvent)    
     return mesh
 
 

Modified: short/3D/PyLith/trunk/pylith/topology/MeshRefiner.py
===================================================================
--- short/3D/PyLith/trunk/pylith/topology/MeshRefiner.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/topology/MeshRefiner.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -101,7 +101,7 @@
     for event in events:
       logger.registerEvent("%s%s" % (self._loggingPrefix, event))
 
-    self._logger = logger
+    self._eventLogger = logger
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/topology/RefineUniform.py
===================================================================
--- short/3D/PyLith/trunk/pylith/topology/RefineUniform.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/topology/RefineUniform.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -66,7 +66,7 @@
     """
     self._setupLogging()
     logEvent = "%srefine" % self._loggingPrefix
-    self._logger.eventBegin(logEvent)
+    self._eventLogger.eventBegin(logEvent)
     self._info.log("Refining mesh.")
 
     self._createCppHandle()
@@ -83,7 +83,7 @@
       self.cppHandle.write(self.dataWriter.cppHandle,
                            newMesh.cppHandle, newMesh.coordsys.cppHandle)
 
-    self._logger.eventEnd(logEvent)
+    self._eventLogger.eventEnd(logEvent)
     return newMesh
 
 

Modified: short/3D/PyLith/trunk/pylith/utils/PetscComponent.py
===================================================================
--- short/3D/PyLith/trunk/pylith/utils/PetscComponent.py	2009-06-12 03:19:41 UTC (rev 15205)
+++ short/3D/PyLith/trunk/pylith/utils/PetscComponent.py	2009-06-12 06:23:15 UTC (rev 15206)
@@ -43,6 +43,14 @@
         component.compilePerformanceLog()
         if hasattr(component, 'perfLogger'):
           self.perfLogger.join(component.perfLogger)
+
+      # Facility arrays are not PetscComponents but have components().
+      elif hasattr(component, "components"):
+        for subcomponent in component.components():
+          if isinstance(subcomponent, PetscComponent):
+            subcomponent.compilePerformanceLog()
+            if hasattr(subcomponent, 'perfLogger'):
+              self.perfLogger.join(subcomponent.perfLogger)
     return
 
 
@@ -53,6 +61,13 @@
     for component in self.components():
       if isinstance(component, PetscComponent):
         component.cleanup()
+
+      # Facility arrays are not PetscComponents but have components().
+      elif hasattr(component, "components"):
+        for subcomponent in self.components():
+          if isinstance(subcomponent, PetscComponent):
+            subcomponent.cleanup()
+
     self._cleanup()
     return
 



More information about the CIG-COMMITS mailing list