[cig-commits] r14664 - in short/3D/PyLith/branches/pylith-swig: . modulesrc/meshio pylith/meshio unittests/pytests/meshio

brad at geodynamics.org brad at geodynamics.org
Fri Apr 10 17:13:37 PDT 2009


Author: brad
Date: 2009-04-10 17:13:36 -0700 (Fri, 10 Apr 2009)
New Revision: 14664

Added:
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py
Modified:
   short/3D/PyLith/branches/pylith-swig/TODO
   short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py
   short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py
Log:
Worked on updating Python output unit tests.

Modified: short/3D/PyLith/branches/pylith-swig/TODO
===================================================================
--- short/3D/PyLith/branches/pylith-swig/TODO	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/TODO	2009-04-11 00:13:36 UTC (rev 14664)
@@ -39,6 +39,8 @@
 
     Eliminate use of Inventory class.
 
+    add test_factory() methods to Python unit tests
+
     Cleanup error checking on PETSc calls.
       FaultCohesiveKin
       DataWriterVTK
@@ -47,6 +49,9 @@
       Add _cleanup() to components to deallocate local data structures.
       Add cleanup() to non-components to deallocate local data structures.
 
+    Create createModuleObj() methods to Python objects as standard way
+    of creating handle to C++ object.
+
     Add check before calling newSection() when want to enforce at
     least 1 value.
 

Modified: short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am	2009-04-11 00:13:36 UTC (rev 14664)
@@ -27,7 +27,8 @@
 	VertexFilterVecNorm.i \
 	DataWriter.i \
 	DataWriterVTK.i \
-	OutputManager.i
+	OutputManager.i \
+	OutputSolnSubset.i
 
 swig_generated = \
 	meshio_wrap.cxx \

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -17,10 +17,10 @@
 ##
 ## Factory: output_cell_filter
 
-from pyre.components.Component import Component
+from pylith.utils.PetscComponent import PetscComponent
 
 # CellFilter class
-class CellFilter(Component):
+class CellFilter(PetscComponent):
   """
   Python abstract base class for filtering cell fields when writing
   finite-element data.
@@ -28,33 +28,13 @@
   Factory: output_cell_filter
   """
 
-  # INVENTORY //////////////////////////////////////////////////////////
-
-  class Inventory(Component.Inventory):
-    """
-    Python object for managing CellFilter facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing CellFilter facilities and properties.
-    ##
-    ## \b Properties
-    ## @li None
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="cellfilter"):
     """
     Constructor.
     """
-    Component.__init__(self, name, facility="cellfilter")
-    self.cppHandle = None
+    PetscComponent.__init__(self, name, facility="cellfilter")
     return
 
 
@@ -69,33 +49,9 @@
     """
     Initialize output manager.
     """
-    self._createCppHandle()
-
-    if None != self.cppHandle and quadrature != None:
-      # Only set quadrature if filter is specified and quadrature is
-      # provided.
-      assert(None != self.cppHandle)
-      self.cppHandle.quadrature = quadrature.cppHandle
     return
 
 
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Set members based using inventory.
-    """
-    Component._configure(self)
-    return
-
-
-  def _createCppHandle(self):
-    """
-    Create handle to C++ object.
-    """
-    return
-  
-
 # FACTORIES ////////////////////////////////////////////////////////////
 
 def output_cell_filter():

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,45 +18,79 @@
 ## Factory: output_cell_filter
 
 from CellFilter import CellFilter
+from meshio import MeshCellFilterAvg as ModuleMeshObject
+from meshio import SubMeshCellFilterAvg as ModuleSubMeshObject
 
-# CellFilterAvg class
-class CellFilterAvg(CellFilter):
+# MeshCellFilterAvg class
+class MeshCellFilterAvg(CellFilter, ModuleMeshObject):
   """
   Python class for average cell fields over each cell's quadrature
   points when writing finite-element data.
 
-  Factory: output_cell_filter
+  Factory: mesh_output_cell_filter
   """
 
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
-  def __init__(self, name="cellfilteravg"):
+  def __init__(self, name="meshcellfilteravg"):
     """
     Constructor.
     """
     CellFilter.__init__(self, name)
+    ModuleMeshObject.__init__(self)
     return
 
 
-  # PRIVATE METHODS ////////////////////////////////////////////////////
+  def initialize(self, quadrature):
+    """
+    Initialize output manager.
+    """
+    self.quadrature(quadrature)
+    return
 
-  def _createCppHandle(self):
+
+# SubMeshCellFilterAvg class
+class SubMeshCellFilterAvg(CellFilter, ModuleSubMeshObject):
+  """
+  Python class for average cell fields over each cell's quadrature
+  points when writing finite-element data.
+
+  Factory: submesh_output_cell_filter
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="submeshcellfilteravg"):
     """
-    Create handle to C++ object.
+    Constructor.
     """
-    if None == self.cppHandle:
-      import meshio as bindings
-      self.cppHandle = bindings.CellFilterAvg()
+    CellFilter.__init__(self, name)
+    ModuleSubMeshObject.__init__(self)
     return
-  
 
+
+  def initialize(self, quadrature):
+    """
+    Initialize output manager.
+    """
+    self.quadrature(quadrature)
+    return
+
+
 # FACTORIES ////////////////////////////////////////////////////////////
 
-def output_cell_filter():
+def mesh_output_cell_filter():
   """
   Factory associated with CellFilter.
   """
-  return CellFilterAvg()
+  return MeshCellFilterAvg()
 
 
+def submesh_output_cell_filter():
+  """
+  Factory associated with CellFilter.
+  """
+  return SubMeshCellFilterAvg()
+
+
 # End of file 

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -16,41 +16,25 @@
 ##
 ## Factory: output_data_writer
 
-from pyre.components.Component import Component
+from pylith.utils.PetscComponent import PetscComponent
 
 # DataWriter class
-class DataWriter(Component):
+class DataWriter(PetscComponent):
   """
   Python abstract base class for writing finite-element data.
   """
 
   # INVENTORY //////////////////////////////////////////////////////////
+  
+  # None
 
-  class Inventory(Component.Inventory):
-    """
-    Python object for managing DataWriter facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing DataWriter facilities and properties.
-    ##
-    ## \b Properties
-    ## @li None
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="datawriter"):
     """
     Constructor.
     """
-    Component.__init__(self, name, facility="datawriter")
-    self.cppHandle = None
+    PetscComponent.__init__(self, name, facility="datawriter")
     return
 
 
@@ -65,27 +49,7 @@
     """
     Initialize writer.
     """
-    self._createCppHandle()
-
     return
 
 
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Set members based using inventory.
-    """
-    Component._configure(self)
-    return
-
-
-  def _createCppHandle(self):
-    """
-    Create handle to corresponding C++ object.
-    """
-    raise NotImplementedError("Please implement _createCppHandle() in " \
-                              "derived class.")
-  
-  
 # End of file

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -13,54 +13,46 @@
 ## @file pyre/meshio/DataWriterVTK.py
 ##
 ## @brief Python object for writing finite-element data to VTK file.
-##
-## Factory: output_data_writer
 
 from DataWriter import DataWriter
+from meshio import MeshDataWriterVTK as ModuleMeshObject
+from meshio import SubMeshDataWriterVTK as ModuleSubMeshObject
 
 # DataWriterVTK class
 class DataWriterVTK(DataWriter):
   """
   Python object for writing finite-element data to VTK file.
 
-  Factory: output_data_writer
+  Inventory
+
+  \b Properties
+  @li \b filename Name of VTK file.
+  @li \b time_format C style format string for time stamp in filename.
+  @li \b time_constant Value used to normalize time stamp in filename.
+  
+  \b Facilities
+  @li None
   """
 
   # INVENTORY //////////////////////////////////////////////////////////
 
-  class Inventory(DataWriter.Inventory):
-    """
-    Python object for managing DataWriterVTK facilities and properties.
-    """
+  import pyre.inventory
 
-    ## @class Inventory
-    ## Python object for managing DataWriterVTK facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b filename Name of VTK file.
-    ## @li \b time_format C style format string for time stamp in filename.
-    ## @li \b time_constant Value used to normalize time stamp in filename.
-    ##
-    ## \b Facilities
-    ## @li None
+  filename = pyre.inventory.str("filename", default="output.vtk")
+  filename.meta['tip'] = "Name of VTK file."
 
-    import pyre.inventory
+  timeFormat = pyre.inventory.str("time_format", default="%f")
+  timeFormat.meta['tip'] = "C style format string for time stamp in filename."
 
-    filename = pyre.inventory.str("filename", default="output.vtk")
-    filename.meta['tip'] = "Name of VTK file."
+  from pyre.units.time import second
+  timeConstant = pyre.inventory.dimensional("time_constant",
+                                            default=1.0*second,
+                                            validator=pyre.inventory.greater(0.0*second))
+  timeConstant.meta['tip'] = "Values used to normalize time stamp in filename."
 
-    timeFormat = pyre.inventory.str("time_format", default="%f")
-    timeFormat.meta['tip'] = "C style format string for time stamp in filename."
-
-    from pyre.units.time import second
-    timeConstant = pyre.inventory.dimensional("time_constant",
-                                              default=1.0*second,
-                              validator=pyre.inventory.greater(0.0*second))
-    timeConstant.meta['tip'] = "Values used to normalize time stamp in filename."
-
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
-  def __init__(self, name="solutioniovtk"):
+  def __init__(self, name="datawritervtk"):
     """
     Constructor.
     """
@@ -78,43 +70,89 @@
     timeScale = normalizer.timeScale()
     self.timeConstant = normalizer.nondimensionalize(self.timeConstant,
                                                      timeScale)
-    
-    self.cppHandle.filename = self.filename
-    self.cppHandle.timeFormat = self.timeFormat
-    self.cppHandle.timeConstant = self.timeConstant
     return
   
 
-  # PRIVATE METHODS ////////////////////////////////////////////////////
+# MeshDataWriterVTK class
+class MeshDataWriterVTK(DataWriterVTK, ModuleMeshObject):
+  """
+  Python object for writing finite-element data to VTK file.
 
-  def _configure(self):
+  Inventory
+
+  Factory: mesh_output_data_writer
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="meshdatawritervtk"):
     """
-    Set members based using inventory.
+    Constructor.
     """
-    DataWriter._configure(self)
-    self.filename = self.inventory.filename
-    self.timeFormat = self.inventory.timeFormat
-    self.timeConstant = self.inventory.timeConstant
+    DataWriterVTK.__init__(self, name)
+    ModuleMeshObject.__init__(self)
     return
 
 
-  def _createCppHandle(self):
+  def initialize(self, normalizer):
     """
-    Create handle to corresponding C++ object.
+    Initialize writer.
     """
-    if None == self.cppHandle:
-      import pylith.meshio.meshio as bindings
-      self.cppHandle = bindings.DataWriterVTK()
+    DataWriterVTK.initialize(self, normalizer)
+
+    ModuleMeshObject.filename(self, self.filename)
+    ModuleMeshObject.timeFormat(self, self.timeFormat)
+    ModuleMeshObject.timeConstant(self, self.timeConstant.value)
     return
   
 
+# SubMeshDataWriterVTK class
+class SubMeshDataWriterVTK(DataWriterVTK, ModuleSubMeshObject):
+  """
+  Python object for writing finite-element data to VTK file.
+
+  Inventory
+
+  Factory: submesh_output_data_writer
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="submeshdatawritervtk"):
+    """
+    Constructor.
+    """
+    DataWriterVTK.__init__(self, name)
+    ModuleSubMeshObject.__init__(self)
+    return
+
+
+  def initialize(self, normalizer):
+    """
+    Initialize writer.
+    """
+    DataWriterVTK.initialize(self, normalizer)
+
+    ModuleSubMeshObject.filename(self, self.filename)
+    ModuleSubMeshObject.timeFormat(self, self.timeFormat)
+    ModuleSubMeshObject.timeConstant(self, self.timeConstant.value)
+    return
+  
+
 # FACTORIES ////////////////////////////////////////////////////////////
 
-def output_data_writer():
+def mesh_output_data_writer():
   """
-  Factory associated with DataWriterVTK.
+  Factory associated with MeshDataWriterVTK.
   """
-  return DataWriterVTK()
+  return MeshDataWriterVTK()
 
 
+def submesh_output_data_writer():
+  """
+  Factory associated with SubMeshDataWriterVTK.
+  """
+  return SubMeshDataWriterVTK()
+
+
 # End of file 

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,6 +18,8 @@
 ## Factory: output_manager
 
 from pyre.components.Component import Component
+from meshio import MeshOutputManager as ModuleMeshObject
+from meshio import SubMeshOutputManager as ModuleSubMeshObject
 
 # OutputManager class
 class OutputManager(Component):
@@ -25,69 +27,33 @@
   Python abstract base class for managing output of finite-element
   information.
 
-  Factory: output_manager
+  \b Properties
+  @li \b output_freq Flag indicating whether to use 'time_step' or 'skip'
+  to set frequency of solution output.
+  @li \b time_step Time step between solution output.
+  @li \b skip Number of time steps to skip between solution output.
+  
+  \b Facilities
+  @li \b coordsys Coordinate system for output.
   """
 
   # INVENTORY //////////////////////////////////////////////////////////
 
-  class Inventory(Component.Inventory):
-    """
-    Python object for managing OutputManager facilities and properties.
-    """
+  import pyre.inventory
 
-    ## @class Inventory
-    ## Python object for managing OutputManager facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b output_freq Flag indicating whether to use 'time_step' or 'skip'
-    ##   to set frequency of solution output.
-    ## @li \b time_step Time step between solution output.
-    ## @li \b skip Number of time steps to skip between solution output.
-    ##
-    ## \b Facilities
-    ## @li \b writer Writer for data.
-    ## @li \b coordsys Coordinate system for output.
-    ## @li \b vertex_filter Filter for vertex data.
-    ## @li \b cell_filter Filter for cell data.
-
-    import pyre.inventory
-
-    outputFreq = pyre.inventory.str("output_freq", default="skip",
-             validator=pyre.inventory.choice(["skip", "time_step"]))
-    outputFreq.meta['tip'] = "Flag indicating whether to use 'time_step' " \
-                             "or 'skip' to set frequency of output."
-
-    from pyre.units.time import s
-    dt = pyre.inventory.dimensional("time_step", default=1.0*s)
-    dt.meta['tip'] = "Time step between output."
-
-    skip = pyre.inventory.int("skip", default=0,
-                              validator=pyre.inventory.greaterEqual(0))
-    skip.meta['tip'] = "Number of time steps to skip between output."
-
-    from DataWriterVTK import DataWriterVTK
-    writer = pyre.inventory.facility("writer", factory=DataWriterVTK,
-                                     family="data_writer")
-    writer.meta['tip'] = "Writer for data."
-
-    from spatialdata.geocoords.CSCart import CSCart
-    coordsys = pyre.inventory.facility("coordsys", family="coordsys",
-                                       factory=CSCart)
-    coordsys.meta['tip'] = "Coordinate system for output."
+  outputFreq = pyre.inventory.str("output_freq", default="skip",
+                                  validator=pyre.inventory.choice(["skip", "time_step"]))
+  outputFreq.meta['tip'] = "Flag indicating whether to use 'time_step' " \
+      "or 'skip' to set frequency of output."
   
-    from VertexFilter import VertexFilter
-    vertexFilter = pyre.inventory.facility("vertex_filter",
-                                           factory=VertexFilter,
-                                           family="output_vertex_filter")
-    vertexFilter.meta['tip'] = "Filter for vertex data."
-                                     
-    from CellFilter import CellFilter
-    cellFilter = pyre.inventory.facility("cell_filter",
-                                           factory=CellFilter,
-                                           family="output_cell_filter")
-    cellFilter.meta['tip'] = "Filter for cell data."
-                                     
-
+  from pyre.units.time import s
+  dt = pyre.inventory.dimensional("time_step", default=1.0*s)
+  dt.meta['tip'] = "Time step between output."
+  
+  skip = pyre.inventory.int("skip", default=0,
+                            validator=pyre.inventory.greaterEqual(0))
+  skip.meta['tip'] = "Number of time steps to skip between output."
+  
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="outputmanager"):
@@ -96,7 +62,6 @@
     """
     Component.__init__(self, name, facility="outputmanager")
     self._loggingPrefix = "OutM "
-    self.cppHandle = None
     self._stepCur = 0
     self._stepWrite = None
     self._tWrite = None
@@ -105,12 +70,14 @@
     self.vertexDataFields = []
     self.cellInfoFields = []
     self.cellDataFields = []
+
+    self._createModuleObj()
     return
 
 
   def preinitialize(self, dataProvider):
     """
-    Do
+    Setup output manager.
     """
     self._setupLogging()
     self.dataProvider = dataProvider
@@ -156,7 +123,6 @@
 
     self.cellFilter.initialize(quadrature)
     self.writer.initialize(normalizer)
-    self._sync()
 
     self._logger.eventEnd(logEvent)
     return
@@ -176,13 +142,9 @@
       nsteps = 1 + int(totalTime / self.dt)
 
     (mesh, label, labelId) = self.dataProvider.getDataMesh()
-    
-    assert(None != self.cppHandle)
-    assert(None != mesh.cppHandle)
-    assert(None != mesh.coordsys.cppHandle)
-    self.cppHandle.open(mesh.cppHandle, mesh.coordsys.cppHandle,
-                        nsteps, label, labelId)
 
+    ModuleOutputManager.open(self, mesh, nsteps, label, labelId)
+
     self._logger.eventEnd(logEvent)    
     return
 
@@ -194,8 +156,7 @@
     logEvent = "%sclose" % self._loggingPrefix
     self._logger.eventBegin(logEvent)    
 
-    assert(None != self.cppHandle)
-    self.cppHandle.close()
+    ModuleOutputManager.close(self)
 
     self._logger.eventEnd(logEvent)    
     return
@@ -212,21 +173,17 @@
       t = 0.0
       self.open(totalTime=0.0, numTimeSteps=0)
       (mesh, label, labelId) = self.dataProvider.getDataMesh()
-      self.cppHandle.openTimeStep(t,
-                                  mesh.cppHandle, mesh.coordsys.cppHandle,
-                                  label, labelId)
+      ModuleOutputManager.openTimeStep(self, t, mesh, label, labelId)
 
       for name in self.vertexInfoFields:
         (field, fieldType) = self.dataProvider.getVertexField(name)
-        self.cppHandle.appendVertexField(t, name, field, fieldType, 
-                                         mesh.cppHandle)
+        ModuleOutputManager.appendVertexField(self, t, field)
 
       for name in self.cellInfoFields:
         (field, fieldType) = self.dataProvider.getCellField(name)
-        self.cppHandle.appendCellField(t, name, field, fieldType, 
-                                       mesh.cppHandle, label, labelId)
+        ModuleOutputManager.appendCellField(self, t, field, label, labelId)
 
-      self.cppHandle.closeTimeStep()
+      ModuleOutputManager.closeTimeStep(self)
       self.close()
 
     self._logger.eventEnd(logEvent)
@@ -245,21 +202,17 @@
              len(self.cellDataFields) ) > 0:
 
       (mesh, label, labelId) = self.dataProvider.getDataMesh()
-      self.cppHandle.openTimeStep(t,
-                                  mesh.cppHandle, mesh.coordsys.cppHandle,
-                                  label, labelId)
+      ModuleOutputManager.openTimeStep(self, t, mesh, label, labelId)
 
       for name in self.vertexDataFields:
         (field, fieldType) = self.dataProvider.getVertexField(name, fields)
-        self.cppHandle.appendVertexField(t, name, field, fieldType, 
-                                         mesh.cppHandle)
+        ModuleOutputManager.appendVertexField(self, t, field)
 
       for name in self.cellDataFields:
         (field, fieldType) = self.dataProvider.getCellField(name, fields)
-        self.cppHandle.appendCellField(t, name, field, fieldType, 
-                                       mesh.cppHandle, label, labelId)
+        ModuleOutputManager.appendCellField(self, t, field)
 
-      self.cppHandle.closeTimeStep()
+      ModuleOutputManager.closeTimeStep(self)
 
     self._logger.eventEnd(logEvent)
     return
@@ -271,32 +224,16 @@
     """
     Set members based using inventory.
     """
-    Component._configure(self)
-    self.outputFreq = self.inventory.outputFreq
-    self.dt = self.inventory.dt
-    self.skip = self.inventory.skip
-    self.coordsys = self.inventory.coordsys
-    self.writer = self.inventory.writer
-    self.vertexFilter = self.inventory.vertexFilter
-    self.cellFilter = self.inventory.cellFilter
+    PetscComponent._configure(self)
+    ModuleOutputManager.coordsys(self, self.coordsys)
     return
 
 
-  def _sync(self):
+  def _createModuleObj(self):
     """
-    Force synchronization between Python and C++.
+    Create handle to C++ object.
     """
-    if None == self.cppHandle:
-      import pylith.meshio.meshio as bindings
-      self.cppHandle = bindings.OutputManager()
-
-    assert(self.coordsys.cppHandle != None)
-    assert(self.writer.cppHandle != None)
-      
-    self.cppHandle.coordsys = self.coordsys.cppHandle
-    self.cppHandle.writer = self.writer.cppHandle
-    self.cppHandle.vertexFilter = self.vertexFilter.cppHandle
-    self.cppHandle.cellFilter = self.cellFilter.cppHandle
+    ModuleOutputManager.__init__(self)
     return
 
 
@@ -399,13 +336,162 @@
     return
   
 
+# MeshOutputManager class
+class MeshOutputManager(OutputManager, ModuleMeshObject):
+  """
+  Python abstract base class for managing output of finite-element
+  information.
+
+  \b Properties
+  @li None
+  
+  \b Facilities
+  @li \b writer Writer for data.
+  @li \b vertex_filter Filter for vertex data.
+  @li \b cell_filter Filter for cell data.
+
+  Factory: mesh_output_manager
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+
+  from DataWriterVTK import MeshDataWriterVTK
+  writer = pyre.inventory.facility("writer", factory=MeshDataWriterVTK,
+                                 family="mesh_data_writer")
+  writer.meta['tip'] = "Writer for data."
+
+  from VertexFilter import MeshVertexFilter
+  vertexFilter = pyre.inventory.facility("vertex_filter",
+                                         factory=MeshVertexFilter,
+                                         family="mesh_output_vertex_filter")
+  vertexFilter.meta['tip'] = "Filter for vertex data."
+  
+  from CellFilter import MeshCellFilter
+  cellFilter = pyre.inventory.facility("cell_filter",
+                                       factory=MeshCellFilter,
+                                       family="mesh_output_cell_filter")
+  cellFilter.meta['tip'] = "Filter for cell data."
+  
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="outputmanager"):
+    """
+    Constructor.
+    """
+    OutputManager.__init__(self, name, facility="meshoutputmanager")
+    self._createModuleObj()
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    OutputManager._configure(self)
+    ModuleMeshObject.writer(self.writer)
+    ModuleMeshObject.vertexFilter(self.vertexFilter)
+    ModuleMeshObject.cellFilter(self.cellFilter)
+    return
+
+
+  def _createModuleObj(self):
+    """
+    Create handle to C++ object.
+    """
+    ModuleMeshObject.__init__(self)
+    return
+
+
+# SubMeshOutputManager class
+class SubMeshOutputManager(OutputManager, ModuleSubMeshObject):
+  """
+  Python abstract base class for managing output of finite-element
+  information.
+
+  \b Properties
+  @li None
+  
+  \b Facilities
+  @li \b writer Writer for data.
+  @li \b vertex_filter Filter for vertex data.
+  @li \b cell_filter Filter for cell data.
+
+  Factory: mesh_output_manager
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+
+  from DataWriterVTK import SubMeshDataWriterVTK
+  writer = pyre.inventory.facility("writer", factory=SubMeshDataWriterVTK,
+                                 family="mesh_data_writer")
+  writer.meta['tip'] = "Writer for data."
+
+  from VertexFilter import SubMeshVertexFilter
+  vertexFilter = pyre.inventory.facility("vertex_filter",
+                                         factory=SubMeshVertexFilter,
+                                         family="mesh_output_vertex_filter")
+  vertexFilter.meta['tip'] = "Filter for vertex data."
+  
+  from CellFilter import SubMeshCellFilter
+  cellFilter = pyre.inventory.facility("cell_filter",
+                                       factory=SubMeshCellFilter,
+                                       family="mesh_output_cell_filter")
+  cellFilter.meta['tip'] = "Filter for cell data."
+  
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="outputmanager"):
+    """
+    Constructor.
+    """
+    OutputManager.__init__(self, name, facility="meshoutputmanager")
+    self._createModuleObj()
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    OutputManager._configure(self)
+    ModuleSubMeshObject.writer(self.writer)
+    ModuleSubMeshObject.vertexFilter(self.vertexFilter)
+    ModuleSubMeshObject.cellFilter(self.cellFilter)
+    return
+
+
+  def _createModuleObj(self):
+    """
+    Create handle to C++ object.
+    """
+    ModuleSubMeshObject.__init__(self)
+    return
+
+
 # FACTORIES ////////////////////////////////////////////////////////////
 
-def output_manager():
+def mesh_output_manager():
   """
-  Factory associated with OutputManager.
+  Factory associated with MeshOutputManager.
   """
-  return OutputManager()
+  return MeshOutputManager()
 
 
+def submesh_output_manager():
+  """
+  Factory associated with SubMeshOutputManager.
+  """
+  return SubMeshOutputManager()
+
+
 # End of file 

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,6 +18,7 @@
 ## Factory: output_manager
 
 from OutputManager import OutputManager
+from meshio import OutputSolnSubset as ModuleOutputSolnSubset
 
 # OutputSolnSubset class
 class OutputSolnSubset(OutputManager):
@@ -25,36 +26,31 @@
   Python object for managing output of finite-element solution
   information over a subdomain.
 
+  @class Inventory
+  Python object for managing OutputSolnSubset facilities and properties.
+  
+  \b Properties
+  @li \b vertex_data_fields Names of vertex data fields to output.
+  @li \b label Name identifier for subdomain.
+  
+  \b Facilities
+  @li None
+
   Factory: output_manager
   """
 
   # INVENTORY //////////////////////////////////////////////////////////
 
-  class Inventory(OutputManager.Inventory):
-    """
-    Python object for managing OutputSolnSubset facilities and properties.
-    """
+  import pyre.inventory
 
-    ## @class Inventory
-    ## Python object for managing OutputSolnSubset facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b vertex_data_fields Names of vertex data fields to output.
-    ## @li \b label Name identifier for subdomain.
-    ##
-    ## \b Facilities
-    ## @li None
+  vertexDataFields = pyre.inventory.list("vertex_data_fields", 
+                                         default=["displacements"])
+  vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
+  
+  label = pyre.inventory.str("label", default="")
+  label.meta['tip'] = "Label identifier for subdomain."
 
-    import pyre.inventory
 
-    vertexDataFields = pyre.inventory.list("vertex_data_fields", 
-                                           default=["displacements"])
-    vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
-
-    label = pyre.inventory.str("label", default="")
-    label.meta['tip'] = "Label identifier for subdomain."
-
-
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="outputsolnsubset"):
@@ -78,9 +74,6 @@
     Do
     """
     OutputManager.preinitialize(self, dataProvider=self)
-    import meshio as bindings
-    self.cppHandle = bindings.OutputSolnSubset()
-    self.cppHandle.label = self.label
     return
   
 
@@ -89,8 +82,7 @@
     Verify compatibility of configuration.
     """
     OutputManager.verifyConfiguration(self, mesh)
-    assert(None != self.cppHandle);
-    self.cppHandle.verifyConfiguration(mesh.cppHandle)
+    ModuleOutputSolnSubset(self, mesh)
     return
 
 
@@ -101,12 +93,7 @@
     logEvent = "%sinit" % self._loggingPrefix
     self._logger.eventBegin(logEvent)    
 
-    from pylith.topology.Mesh import Mesh
-    self.mesh = Mesh()
-    self.mesh.initialize(mesh.coordsys)
-    assert(None != self.cppHandle)
-    self.cppHandle.mesh(self.mesh.cppHandle, mesh.cppHandle)
-
+    self.submesh = seld.subdomainMesh(mesh)
     OutputManager.initialize(self, normalizer)
 
     self._logger.eventEnd(logEvent)
@@ -127,11 +114,10 @@
     field = None
     fieldType = None
     if name == "displacements":
-      field = fields.getSolution()
-      fieldType = 1 # vector field
+      field = fields.solution()
     else:
       raise ValueError, "Vertex field '%s' not available." % name
-    return (field, fieldType)
+    return field
 
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
@@ -141,11 +127,18 @@
     Set members based using inventory.
     """
     OutputManager._configure(self)
-    self.vertexDataFields = self.inventory.vertexDataFields
-    self.label = self.inventory.label
+    ModuleOutputSolnSubset.label(self, self.label)
     return
 
 
+  def _createModuleObj(self):
+    """
+    Create handle to C++ object.
+    """
+    ModuleOutputSolnSubset.___init__(self)
+    return
+
+
 # FACTORIES ////////////////////////////////////////////////////////////
 
 def output_manager():

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -17,10 +17,10 @@
 ##
 ## Factory: output_vertex_filter
 
-from pyre.components.Component import Component
+from pylith.utils.PetscComponent import PetscComponent
 
 # VertexFilter class
-class VertexFilter(Component):
+class VertexFilter(PetscComponent):
   """
   Python abstract base class for filtering cell fields when writing
   finite-element data.
@@ -30,31 +30,15 @@
 
   # INVENTORY //////////////////////////////////////////////////////////
 
-  class Inventory(Component.Inventory):
-    """
-    Python object for managing VertexFilter facilities and properties.
-    """
+  # None
 
-    ## @class Inventory
-    ## Python object for managing VertexFilter facilities and properties.
-    ##
-    ## \b Properties
-    ## @li None
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="vertexfilter"):
     """
     Constructor.
     """
-    Component.__init__(self, name, facility="vertexfilter")
-    self.cppHandle = None
+    PetscComponent.__init__(self, name, facility="vertexfilter")
     return
 
 
@@ -69,27 +53,9 @@
     """
     Initialize output manager.
     """
-    self._createCppHandle()
     return
 
 
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Set members based using inventory.
-    """
-    Component._configure(self)
-    return
-
-
-  def _createCppHandle(self):
-    """
-    Create handle to C++ object.
-    """
-    return
-  
-
 # FACTORIES ////////////////////////////////////////////////////////////
 
 def output_vertex_filter():

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,9 +18,11 @@
 ## Factory: output_vertex_filter
 
 from VertexFilter import VertexFilter
+from meshio import MeshVertexFilterVecNorm as ModuleMeshObject
+from meshio import SubMeshVertexFilterVecNorm as ModuleSubMeshObject
 
-# VertexFilterVecNorm class
-class VertexFilterVecNorm(VertexFilter):
+# MeshVertexFilterVecNorm class
+class MeshVertexFilterVecNorm(VertexFilter, ModuleMeshObject):
   """
   Python class for computing vector norm for each vertex for field
   over vertices when writing finite-element data.
@@ -30,33 +32,58 @@
 
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
-  def __init__(self, name="vertexfiltervecnorm"):
+  def __init__(self, name="meshvertexfiltervecnorm"):
     """
     Constructor.
     """
     VertexFilter.__init__(self, name)
+    ModuleMeshObject.__init__(self)
     return
 
 
-  # PRIVATE METHODS ////////////////////////////////////////////////////
+# FACTORIES ////////////////////////////////////////////////////////////
 
-  def _createCppHandle(self):
+def mesh_output_vertex_filter():
+  """
+  Factory associated with VertexFilter.
+  """
+  return MeshVertexFilterVecNorm()
+
+
+# SubMeshVertexFilterVecNorm class
+class SubMeshVertexFilterVecNorm(VertexFilter, ModuleSubMeshObject):
+  """
+  Python class for computing vector norm for each vertex for field
+  over vertices when writing finite-element data.
+
+  Factory: output_vertex_filter
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="meshvertexfiltervecnorm"):
     """
-    Create handle to C++ object.
+    Constructor.
     """
-    if None == self.cppHandle:
-      import meshio as bindings
-      self.cppHandle = bindings.VertexFilterVecNorm()
+    VertexFilter.__init__(self, name)
+    ModuleSubMeshObject.__init__(self)
     return
-  
 
+
 # FACTORIES ////////////////////////////////////////////////////////////
 
-def output_vertex_filter():
+def mesh_output_vertex_filter():
   """
   Factory associated with VertexFilter.
   """
-  return VertexFilterVecNorm()
+  return MeshVertexFilterVecNorm()
 
 
+def submesh_output_vertex_filter():
+  """
+  Factory associated with VertexFilter.
+  """
+  return SubMeshVertexFilterVecNorm()
+
+
 # End of file 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -16,10 +16,11 @@
 
 import unittest
 
-from pylith.meshio.CellFilterAvg import CellFilterAvg
+from pylith.meshio.CellFilterAvg import MeshCellFilterAvg
+from pylith.meshio.CellFilterAvg import SubMeshCellFilterAvg
 
 # ----------------------------------------------------------------------
-class TestCellFilterAvg(unittest.TestCase):
+class TestMeshCellFilterAvg(unittest.TestCase):
   """
   Unit testing of Python CellFilterAvg object.
   """
@@ -28,7 +29,7 @@
     """
     Test constructor.
     """
-    filter = CellFilterAvg()
+    filter = MeshCellFilterAvg()
     filter._configure()
     return
 
@@ -37,24 +38,25 @@
     """
     Test constructor.
     """
-    from pylith.feassemble.quadrature.Quadrature1D import Quadrature1D
+    spaceDim = 1
     
     from pylith.feassemble.FIATSimplex import FIATSimplex
     cell = FIATSimplex()
-    cell.shape = "line"
-    cell.degree = 2
-    cell.order = 2
+    cell.inventory.shape = "line"
+    cell.inventory.degree = 2
+    cell.inventory.order = 2
+    cell._configure()
 
-    quadrature = Quadrature1D()
+    from pylith.feassemble.Quadrature import MeshQuadrature
+    quadrature = MeshQuadrature()
+    quadrature.inventory.cell = cell
     quadrature._configure()
-    quadrature.cell = cell
-    quadrature.preinitialize()
+    quadrature.preinitialize(spaceDim)
     quadrature.initialize()
 
-    filter = CellFilterAvg()
+    filter = MeshCellFilterAvg()
     filter._configure()
     filter.initialize(quadrature)
-    self.assertNotEqual(None, filter.cppHandle)    
     return
 
 
@@ -62,9 +64,59 @@
     """
     Test factory method.
     """
-    from pylith.meshio.CellFilterAvg import output_cell_filter
-    filter = output_cell_filter()
+    from pylith.meshio.CellFilterAvg import mesh_output_cell_filter
+    filter = mesh_output_cell_filter()
     return
 
 
+# ----------------------------------------------------------------------
+class TestSubMeshCellFilterAvg(unittest.TestCase):
+  """
+  Unit testing of Python CellFilterAvg object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    filter = SubMeshCellFilterAvg()
+    filter._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test constructor.
+    """
+    spaceDim = 2
+    
+    from pylith.feassemble.FIATSimplex import FIATSimplex
+    cell = FIATSimplex()
+    cell.inventory.shape = "line"
+    cell.inventory.degree = 2
+    cell.inventory.order = 2
+    cell._configure()
+
+    from pylith.feassemble.Quadrature import SubMeshQuadrature
+    quadrature = SubMeshQuadrature()
+    quadrature.inventory.cell = cell
+    quadrature._configure()
+    quadrature.preinitialize(spaceDim)
+    quadrature.initialize()
+
+    filter = SubMeshCellFilterAvg()
+    filter._configure()
+    filter.initialize(quadrature)
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.meshio.CellFilterAvg import mesh_output_cell_filter
+    filter = mesh_output_cell_filter()
+    return
+
+
 # End of file 

Added: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/meshio/TestDataWriterVTK.py
+
+## @brief Unit testing of Python DataWriterVTK object.
+
+import unittest
+
+from pylith.meshio.DataWriterVTK import MeshDataWriterVTK
+from pylith.meshio.DataWriterVTK import SubMeshDataWriterVTK
+
+# ----------------------------------------------------------------------
+class TestMeshDataWriterVTK(unittest.TestCase):
+  """
+  Unit testing of Python DataWriterVTK object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    filter = MeshDataWriterVTK()
+    filter._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test constructor.
+    """
+    filter = MeshDataWriterVTK()
+    filter._configure()
+
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    filter.initialize(normalizer)
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.meshio.DataWriterVTK import mesh_output_data_writer
+    filter = mesh_output_data_writer()
+    return
+
+
+# ----------------------------------------------------------------------
+class TestSubMeshDataWriterVTK(unittest.TestCase):
+  """
+  Unit testing of Python DataWriterVTK object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    filter = SubMeshDataWriterVTK()
+    filter._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test constructor.
+    """
+    filter = SubMeshDataWriterVTK()
+    filter._configure()
+
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    filter.initialize(normalizer)
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.meshio.DataWriterVTK import submesh_output_data_writer
+    filter = submesh_output_data_writer()
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -16,10 +16,11 @@
 
 import unittest
 
-from pylith.meshio.VertexFilterVecNorm import VertexFilterVecNorm
+from pylith.meshio.VertexFilterVecNorm import MeshVertexFilterVecNorm
+from pylith.meshio.VertexFilterVecNorm import SubMeshVertexFilterVecNorm
 
 # ----------------------------------------------------------------------
-class TestVertexFilterVecNorm(unittest.TestCase):
+class TestMeshVertexFilterVecNorm(unittest.TestCase):
   """
   Unit testing of Python VertexFilterVecNorm object.
   """
@@ -28,7 +29,7 @@
     """
     Test constructor.
     """
-    filter = VertexFilterVecNorm()
+    filter = MeshVertexFilterVecNorm()
     filter._configure()
     return
 
@@ -37,10 +38,9 @@
     """
     Test constructor.
     """
-    filter = VertexFilterVecNorm()
+    filter = MeshVertexFilterVecNorm()
     filter._configure()
     filter.initialize()
-    self.assertNotEqual(None, filter.cppHandle)    
     return
 
 
@@ -48,9 +48,43 @@
     """
     Test factory method.
     """
-    from pylith.meshio.VertexFilterVecNorm import output_vertex_filter
-    filter = output_vertex_filter()
+    from pylith.meshio.VertexFilterVecNorm import mesh_output_vertex_filter
+    filter = mesh_output_vertex_filter()
     return
 
 
+# ----------------------------------------------------------------------
+class TestSubMeshVertexFilterVecNorm(unittest.TestCase):
+  """
+  Unit testing of Python VertexFilterVecNorm object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    filter = SubMeshVertexFilterVecNorm()
+    filter._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test constructor.
+    """
+    filter = SubMeshVertexFilterVecNorm()
+    filter._configure()
+    filter.initialize()
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.meshio.VertexFilterVecNorm import submesh_output_vertex_filter
+    filter = submesh_output_vertex_filter()
+    return
+
+
 # End of file 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py	2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py	2009-04-11 00:13:36 UTC (rev 14664)
@@ -62,12 +62,24 @@
     from TestMeshIOLagrit import TestMeshIOLagrit
     suite.addTest(unittest.makeSuite(TestMeshIOLagrit))
 
-    #from TestVertexFilterVecNorm import TestVertexFilterVecNorm
-    #suite.addTest(unittest.makeSuite(TestVertexFilterVecNorm))
+    from TestVertexFilterVecNorm import TestMeshVertexFilterVecNorm
+    suite.addTest(unittest.makeSuite(TestMeshVertexFilterVecNorm))
 
-    #from TestCellFilterAvg import TestCellFilterAvg
-    #suite.addTest(unittest.makeSuite(TestCellFilterAvg))
+    from TestVertexFilterVecNorm import TestSubMeshVertexFilterVecNorm
+    suite.addTest(unittest.makeSuite(TestSubMeshVertexFilterVecNorm))
 
+    from TestCellFilterAvg import TestMeshCellFilterAvg
+    suite.addTest(unittest.makeSuite(TestMeshCellFilterAvg))
+
+    from TestCellFilterAvg import TestSubMeshCellFilterAvg
+    suite.addTest(unittest.makeSuite(TestSubMeshCellFilterAvg))
+
+    from TestDataWriterVTK import TestMeshDataWriterVTK
+    suite.addTest(unittest.makeSuite(TestMeshDataWriterVTK))
+
+    from TestDataWriterVTK import TestSubMeshDataWriterVTK
+    suite.addTest(unittest.makeSuite(TestSubMeshDataWriterVTK))
+
     #from TestOutputManager import TestOutputManager
     #suite.addTest(unittest.makeSuite(TestOutputManager))
 



More information about the CIG-COMMITS mailing list