[cig-commits] r22008 - short/3D/PyLith/trunk/pylith/meshio
brad at geodynamics.org
brad at geodynamics.org
Wed May 8 19:27:04 PDT 2013
Author: brad
Date: 2013-05-08 19:27:04 -0700 (Wed, 08 May 2013)
New Revision: 22008
Modified:
short/3D/PyLith/trunk/pylith/meshio/OutputManager.py
Log:
Added weakref to improve memory management.
Modified: short/3D/PyLith/trunk/pylith/meshio/OutputManager.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/OutputManager.py 2013-05-09 02:26:42 UTC (rev 22007)
+++ short/3D/PyLith/trunk/pylith/meshio/OutputManager.py 2013-05-09 02:27:04 UTC (rev 22008)
@@ -108,8 +108,9 @@
"""
Setup output manager.
"""
+ import weakref
self._setupLogging()
- self.dataProvider = dataProvider
+ self.dataProvider = weakref.ref(dataProvider)
return
@@ -117,19 +118,19 @@
"""
Verify compatibility of configuration.
"""
- if None == self.dataProvider:
+ if None == self.dataProvider():
raise ValueError("Need to set 'dataProvider' in OutputManager.")
- self._verifyFields(self.dataProvider.availableFields)
+ self._verifyFields(self.dataProvider().availableFields)
- if not "getDataMesh" in dir(self.dataProvider):
+ if not "getDataMesh" in dir(self.dataProvider()):
raise TypeError("Data provider must have a 'getDataMesh' function.")
if len(self.vertexInfoFields) > 0 or len(self.vertexDataFields) > 0:
- if not "getVertexField" in dir(self.dataProvider):
+ if not "getVertexField" in dir(self.dataProvider()):
raise TypeError("Data provider must have a 'getVertexField' function.")
if len(self.cellInfoFields) > 0 or len(self.cellDataFields) > 0:
- if not "getCellField" in dir(self.dataProvider):
+ if not "getCellField" in dir(self.dataProvider()):
raise TypeError("Data provider must have a 'getCellField' function.")
return
@@ -142,6 +143,7 @@
self._eventLogger.eventBegin(logEvent)
# Nondimensionalize time step
+ import weakref
self.normalizer = normalizer
timeScale = normalizer.timeScale()
self.dtN = normalizer.nondimensionalize(self.dt, timeScale)
@@ -178,7 +180,7 @@
nsteps = self._estimateNumSteps(totalTime, numTimeSteps)
- (mesh, label, labelId) = self.dataProvider.getDataMesh()
+ (mesh, label, labelId) = self.dataProvider().getDataMesh()
self._open(mesh, nsteps, label, labelId)
self._eventLogger.eventEnd(logEvent)
@@ -208,15 +210,15 @@
if len(self.vertexInfoFields) > 0 or len(self.cellInfoFields) > 0:
t = 0.0
self.open(totalTime=0.0, numTimeSteps=0)
- (mesh, label, labelId) = self.dataProvider.getDataMesh()
+ (mesh, label, labelId) = self.dataProvider().getDataMesh()
self._openTimeStep(t, mesh, label, labelId)
for name in self.vertexInfoFields:
- field = self.dataProvider.getVertexField(name)
+ field = self.dataProvider().getVertexField(name)
self._appendVertexField(t, field, mesh)
for name in self.cellInfoFields:
- field = self.dataProvider.getCellField(name)
+ field = self.dataProvider().getCellField(name)
self._appendCellField(t, field, label, labelId)
self._closeTimeStep()
@@ -237,15 +239,15 @@
( len(self.vertexDataFields) > 0 or \
len(self.cellDataFields) ) > 0:
- (mesh, label, labelId) = self.dataProvider.getDataMesh()
+ (mesh, label, labelId) = self.dataProvider().getDataMesh()
self._openTimeStep(t, mesh, label, labelId)
for name in self.vertexDataFields:
- field = self.dataProvider.getVertexField(name, fields)
+ field = self.dataProvider().getVertexField(name, fields)
self._appendVertexField(t, field, mesh)
for name in self.cellDataFields:
- field = self.dataProvider.getCellField(name, fields)
+ field = self.dataProvider().getCellField(name, fields)
self._appendCellField(t, field, label, labelId)
self._closeTimeStep()
@@ -341,12 +343,12 @@
if not fieldCategory in available.keys():
raise ValueError, \
"Key '%s' not found in available fields dictionary for " \
- "object '%s'." % (fieldCategory, self.dataProvider.name)
+ "object '%s'." % (fieldCategory, self.dataProvider().name)
for dataCategory in ["info", "data"]:
if not dataCategory in available[fieldCategory].keys():
raise ValueError, \
"Key '%s' not found in available fields dictionary for " \
- "object '%s'." % (fieldCategory, self.dataProvider.name)
+ "object '%s'." % (fieldCategory, self.dataProvider().name)
notavailable = []
for name in requested[fieldCategory][dataCategory]:
@@ -357,7 +359,7 @@
"Requested fields not available for output.\n" \
"Data provider: '%s'\n" \
"Field type: '%s'\n" \
- "Data type: '%s'\n" % (self.dataProvider.name,
+ "Data type: '%s'\n" % (self.dataProvider().name,
fieldCategory, dataCategory)
msg += "Available fields: "
for name in available[fieldCategory][dataCategory]:
More information about the CIG-COMMITS
mailing list