[cig-commits] r14668 - in short/3D/PyLith/branches/pylith-swig: libsrc/meshio modulesrc/include modulesrc/meshio modulesrc/topology pylith/meshio unittests/pytests/meshio

brad at geodynamics.org brad at geodynamics.org
Sat Apr 11 15:31:29 PDT 2009


Author: brad
Date: 2009-04-11 15:31:28 -0700 (Sat, 11 Apr 2009)
New Revision: 14668

Added:
   short/3D/PyLith/branches/pylith-swig/modulesrc/include/submeshfield.i
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerMesh.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerSubMesh.py
Removed:
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManager.py
Modified:
   short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.cc
   short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.hh
   short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/OutputSolnSubset.i
   short/3D/PyLith/branches/pylith-swig/modulesrc/topology/topology.i
   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/unittests/pytests/meshio/TestOutputSolnSubset.py
   short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py
Log:
Worked on Python output unit tests.

Modified: short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.cc	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.cc	2009-04-11 22:31:28 UTC (rev 14668)
@@ -65,5 +65,14 @@
   return *_submesh;
 } // subdomainMesh
 
+// ----------------------------------------------------------------------
+// Append finite-element vertex field to file.
+void
+pylith::meshio::OutputSolnSubset::appendVertexField(const double t,
+						    const topology::Field<topology::Mesh>& field)
+{ // appendVertexField
+  // How do we call DataWriter<SubMesh>::appendVertexField() with a Field<Mesh>?
+} // appendVertexField
 
+
 // End of file 

Modified: short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.hh	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/meshio/OutputSolnSubset.hh	2009-04-11 22:31:28 UTC (rev 14668)
@@ -60,7 +60,15 @@
    */
   const topology::SubMesh& subdomainMesh(const topology::Mesh& mesh);
   
+  /** Append finite-element vertex field to file.
+   *
+   * @param t Time associated with field.
+   * @param field Vertex field.
+   */
+  void appendVertexField(const double t,
+			 const topology::Field<topology::Mesh>& field);
 
+
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :
 

Added: short/3D/PyLith/branches/pylith-swig/modulesrc/include/submeshfield.i
===================================================================
--- short/3D/PyLith/branches/pylith-swig/modulesrc/include/submeshfield.i	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-swig/modulesrc/include/submeshfield.i	2009-04-11 22:31:28 UTC (rev 14668)
@@ -0,0 +1,37 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// ----------------------------------------------------------------------
+// const Field<SubMesh>::Mesh (SubMesh)
+%typemap(in) (const pylith::topology::Field<pylith::topology::SubMesh>::Mesh& mesh)
+{
+  pylith::topology::Field<pylith::topology::SubMesh>::Mesh* submesh = 0;
+  int err = SWIG_ConvertPtr($input, (void**) &submesh, 
+			    $descriptor(pylith::topology::Field<pylith::topology::SubMesh>::Mesh*),
+				0);
+  if (SWIG_IsOK(err))
+    $1 = (pylith::topology::Field<pylith::topology::SubMesh>::Mesh*) submesh;
+  else {
+    err = SWIG_ConvertPtr($input, (void**) &submesh, 
+			  $descriptor(pylith::topology::SubMesh*),
+			  0);
+    if (SWIG_IsOK(err))
+      $1 = (pylith::topology::Field<pylith::topology::SubMesh>::Mesh*) submesh;
+    else {
+      PyErr_SetString(PyExc_TypeError, "Argument must be a submesh.");
+      return NULL;
+    } // if
+  } // if/else
+} // typemap(in)
+
+
+// End of file

Modified: short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/OutputSolnSubset.i
===================================================================
--- short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/OutputSolnSubset.i	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/OutputSolnSubset.i	2009-04-11 22:31:28 UTC (rev 14668)
@@ -16,6 +16,8 @@
  * @brief Python interface to C++ OutputSolnSubset object.
  */
 
+%template(_SubMeshOutputManager) pylith::meshio::OutputManager<pylith::topology::SubMesh>;
+
 namespace pylith {
   namespace meshio {
 
@@ -49,7 +51,16 @@
        */
       const pylith::topology::SubMesh& subdomainMesh(const pylith::topology::Mesh& mesh);
   
+      /** Append finite-element vertex field to file.
+       *
+       * @param t Time associated with field.
+       * @param field Vertex field.
+       */
+      void appendVertexField(const double t,
+			     const pylith::topology::Field<pylith::topology::Mesh>& field);
 
+
+
     }; // OutputSolnSubset
 
   } // meshio

Modified: short/3D/PyLith/branches/pylith-swig/modulesrc/topology/topology.i
===================================================================
--- short/3D/PyLith/branches/pylith-swig/modulesrc/topology/topology.i	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/modulesrc/topology/topology.i	2009-04-11 22:31:28 UTC (rev 14668)
@@ -36,6 +36,7 @@
 
 %include "typemaps.i"
 %include "../include/chararray.i"
+%include "../include/submeshfield.i"
 
 // Numpy interface stuff
 %{

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py	2009-04-11 22:31:28 UTC (rev 14668)
@@ -231,7 +231,7 @@
         field = self.dataProvider.getCellField(name, fields)
         self._appendCellField(t, field, label, labelId)
 
-      self._closeTimeStep(self)
+      self._closeTimeStep()
 
     self._logger.eventEnd(logEvent)
     return
@@ -402,7 +402,6 @@
     Constructor.
     """
     OutputManager.__init__(self, name)
-    self._createModuleObj()
     return
 
 
@@ -514,7 +513,6 @@
     Constructor.
     """
     OutputManager.__init__(self, name)
-    self._createModuleObj()
     return
 
 

Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py	2009-04-11 22:31:28 UTC (rev 14668)
@@ -15,13 +15,13 @@
 ## @brief Python object for managing output of finite-element solution
 ## information over a subdomain.
 ##
-## Factory: output_manager
+## Factory: submesh_output_manager
 
 from OutputManager import OutputManager
 from meshio import OutputSolnSubset as ModuleOutputSolnSubset
 
 # OutputSolnSubset class
-class OutputSolnSubset(OutputManager):
+class OutputSolnSubset(OutputManager, ModuleOutputSolnSubset):
   """
   Python object for managing output of finite-element solution
   information over a subdomain.
@@ -34,9 +34,9 @@
   @li \b label Name identifier for subdomain.
   
   \b Facilities
-  @li None
+  @li \b writer Writer for data.
 
-  Factory: output_manager
+  Factory: submesh_output_manager
   """
 
   # INVENTORY //////////////////////////////////////////////////////////
@@ -44,13 +44,18 @@
   import pyre.inventory
 
   vertexDataFields = pyre.inventory.list("vertex_data_fields", 
-                                         default=["displacements"])
+                                         default=["displacement"])
   vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
   
   label = pyre.inventory.str("label", default="")
   label.meta['tip'] = "Label identifier for subdomain."
 
+  from DataWriterVTK import SubMeshDataWriterVTK
+  writer = pyre.inventory.facility("writer", factory=SubMeshDataWriterVTK,
+                                 family="mesh_data_writer")
+  writer.meta['tip'] = "Writer for data."
 
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="outputsolnsubset"):
@@ -58,11 +63,10 @@
     Constructor.
     """
     OutputManager.__init__(self, name)
-    self.cppHandle = None
     self.availableFields = \
         {'vertex': \
            {'info': [],
-            'data': ["displacements"]},
+            'data': ["displacement"]},
          'cell': \
            {'info': [],
             'data': []}}
@@ -82,7 +86,7 @@
     Verify compatibility of configuration.
     """
     OutputManager.verifyConfiguration(self, mesh)
-    ModuleOutputSolnSubset(self, mesh)
+    ModuleOutputSolnSubset.verifyConfiguration(self, mesh)
     return
 
 
@@ -93,7 +97,7 @@
     logEvent = "%sinit" % self._loggingPrefix
     self._logger.eventBegin(logEvent)    
 
-    self.submesh = seld.subdomainMesh(mesh)
+    self.submesh = self.subdomainMesh(mesh)
     OutputManager.initialize(self, normalizer)
 
     self._logger.eventEnd(logEvent)
@@ -104,7 +108,7 @@
     """
     Get mesh associated with data fields.
     """
-    return (self.mesh, None, None)
+    return (self.submesh, None, None)
 
 
   def getVertexField(self, name, fields):
@@ -113,7 +117,7 @@
     """
     field = None
     fieldType = None
-    if name == "displacements":
+    if name == "displacement":
       field = fields.solution()
     else:
       raise ValueError, "Vertex field '%s' not available." % name
@@ -128,6 +132,12 @@
     """
     OutputManager._configure(self)
     ModuleOutputSolnSubset.label(self, self.label)
+    ModuleOutputSolnSubset.coordsys(self, self.inventory.coordsys)
+    ModuleOutputSolnSubset.writer(self, self.inventory.writer)
+    if None != self.vertexFilter.filter:
+      ModuleOutputSolnSubset.vertexFilter(self, self.inventory.vertexFilter)
+    if None != self.cellFilter.filter:
+      ModuleOutputSolnSubset.cellFilter(self, self.inventory.cellFilter)
     return
 
 
@@ -135,13 +145,66 @@
     """
     Create handle to C++ object.
     """
-    ModuleOutputSolnSubset.___init__(self)
+    ModuleOutputSolnSubset.__init__(self)
     return
 
 
+  def _open(self, mesh, nsteps, label, labelId):
+    """
+    Call C++ open();
+    """
+    if label != None and labelId != None:
+      ModuleOutputSolnSubset.open(self, mesh, nsteps, label, labelId)
+    else:
+      ModuleOutputSolnSubset.open(self, mesh, nsteps)
+    return
+
+
+  def _openTimeStep(self, t, mesh, label, labelId):
+    """
+    Call C++ openTimeStep();
+    """
+    if label != None and labelId != None:
+      ModuleOutputSolnSubset.openTimeStep(self, t, mesh, label, labelId)
+    else:
+      ModuleOutputSolnSubset.openTimeStep(self, t, mesh)
+    return
+
+
+  def _appendVertexField(self, t, field):
+    """
+    Call C++ appendVertexField();
+    """
+    ModuleOutputSolnSubset.appendVertexField(self, t, field)
+    return
+
+  def _appendCellField(self, t, field):
+    """
+    Call C++ appendCellField();
+    """
+    ModuleOutputSolnSubset.appendCellField(self, t, field)
+    return
+
+
+  def _closeTimeStep(self):
+    """
+    Call C++ closeTimeStep().
+    """
+    ModuleOutputSolnSubset.closeTimeStep(self)
+    return
+
+
+  def _close(self):
+    """
+    Call C++ close().
+    """
+    ModuleOutputSolnSubset.close(self)
+    return
+
+
 # FACTORIES ////////////////////////////////////////////////////////////
 
-def output_manager():
+def submesh_output_manager():
   """
   Factory associated with OutputSolnSubset.
   """

Deleted: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManager.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManager.py	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManager.py	2009-04-11 22:31:28 UTC (rev 14668)
@@ -1,322 +0,0 @@
-#!/usr/bin/env python
-#
-# ======================================================================
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-#
-
-## @file unittests/pytests/meshio/TestOutputManager.py
-
-## @brief Unit testing of Python OutputManager object.
-
-import unittest
-
-from pylith.meshio.OutputManager import MeshOutputManager
-
-# ----------------------------------------------------------------------
-class TestProvider(object):
-
-  def __init__(self):
-    """
-    Constructor.
-    """
-    self.availableFields = \
-        {'vertex': \
-           {'info': ["vertex info"],
-            'data': ["vertex data 1",
-                     "vertex data 2"]},
-         'cell': \
-           {'info': ["cell info"],
-            'data': ["cell data"]}}
-
-    filename = "data/twohex8.txt"
-    
-    from pylith.meshio.MeshIOAscii import MeshIOAscii
-    iohandler = MeshIOAscii()
-    iohandler.inventory.filename = filename
-    from spatialdata.geocoords.CSCart import CSCart
-    iohandler.inventory.coordsys = CSCart()
-    iohandler._configure()
-
-    from spatialdata.units.Nondimensional import Nondimensional
-    normalizer = Nondimensional()
-    normalizer._configure()
-    mesh = iohandler.read(normalizer, debug=False, interpolate=False)
-
-    from pylith.topology.Fields import MeshFields
-    fields = MeshFields(mesh)
-    
-    self.mesh = mesh
-    self.fields = fields
-    return
-
-
-  def getDataMesh(self):
-    """
-    Get mesh.
-    """
-    return (self.mesh, None, None)
-
-
-  def getVertexField(self, name, fields=None):
-    """
-    Get vertex field.
-    """
-    from pylith.field.field.FieldBase import SCALAR,VECTOR,OTHER
-    if name == "vertex info":
-      fieldType = FieldBase.SCALAR
-      fiberDim = 1
-    elif name == "vertex data 1":
-      fieldType = FieldBase.VECTOR
-      fiberDim = self.mesh.dimension()
-    elif name == "vertex data 2":
-      fieldType = FieldBase.OTHER
-      fiberDim = 5
-    else:
-      raise ValueError("Unknown field '%s'." % name)
-
-    self.fields.add(name, name)
-    field = self.fields.get(name)
-    field.newSection(field.VERTICES_FIELD, fiberDim)
-    field.allocate()
-    field.vectorFieldType(fieldType)
-    self.fields.setFiberDimension(name, fiberDim)
-    self.fields.allocate(name)
-    field = self.fields.getReal(name)
-    return field
-
-
-  def getCellField(self, name, fields=None):
-    """
-    Get cell field.
-    """
-    if name == "cell info":
-      fieldType = FieldBase.SCALAR
-      fiberDim = 1
-    elif name == "cell data":
-      fieldType = FieldBase.VECTOR
-      fiberDim = self.mesh.dimension()
-    else:
-      raise ValueError("Unknown field '%s'." % name)
-
-    self.fields.add(name, name)
-    field = self.fields.get(name)
-    field.newSection(field.CELLS_FIELD, fiberDim)
-    field.allocate()
-    field.vectorFieldType(fieldType)
-    return field
-
-
-# ----------------------------------------------------------------------
-class TestMeshOutputManager(unittest.TestCase):
-  """
-  Unit testing of Python MeshOutputManager object.
-  """
-
-  def setUp(self):
-    from spatialdata.units.Nondimensional import Nondimensional
-    self.normalizer = Nondimensional()
-    self.normalizer._configure()
-    return
-  
-
-  def test_constructor(self):
-    """
-    Test constructor.
-    """
-    output = MeshOutputManager()
-    output.inventory.writer._configure()
-    output._configure()
-    return
-
-
-  def test_preinitialize(self):
-    """
-    Test preinitialize().
-    """
-    dataProvider = TestProvider()
-    output = MeshOutputManager()
-    output.preinitialize(dataProvider)
-    
-    self.assertEqual(dataProvider, output.dataProvider)
-    return
-
-
-  def test_verifyConfiguration(self):
-    """
-    Test verifyConfiguration().
-    """
-    dataProvider = TestProvider()
-    output = MeshOutputManager()
-    output.preinitialize(dataProvider)
-
-    output.vertexInfoFields = ["vertex info"]
-    output.vertexDataFields = ["vertex data 2"]
-    output.cellInfoFields = []
-    output.cellDataFields = ["cell data"]
-    output.verifyConfiguration(dataProvider.getDataMesh())
-    return
-  
-  
-  def test_initialize(self):
-    """
-    Test initialize().
-    """
-    # No quadrature
-    output = MeshOutputManager()
-    output.inventory.writer.inventory.filename = "test.vtk"
-    output.inventory.writer._configure()
-    output._configure()
-    dataProvider = TestProvider()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer)
-
-    # With quadrature
-    from pylith.feassemble.FIATSimplex import FIATSimplex
-    from pylith.feassemble.Quadrature import MeshQuadrature
-    cell = FIATSimplex()
-    cell.inventory.shape = "line"
-    cell.inventory.degree = 2
-    cell.inventory.order = 2
-    cell._configure()
-
-    quadrature = MeshQuadrature()
-    quadrature.inventory.cell = cell
-    quadrature._configure()
-    
-    output = MeshOutputManager()
-    output.inventory.writer.inventory.filename = "test.vtk"
-    output.inventory.writer._configure()
-    output._configure()
-    dataProvider = TestProvider()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer, quadrature)
-    return
-
-
-  def test_openclose(self):
-    """
-    Test open() and close().
-    """
-    output = MeshOutputManager()
-    output.inventory.writer.inventory.filename = "output.vtk"
-    output.inventory.writer._configure()
-    output._configure()
-    dataProvider = TestProvider()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer)
-
-    output.open(totalTime=5.0, numTimeSteps=2)
-    output.close()
-    return
-
-
-  def test_writeInfo(self):
-    """
-    Test writeInfo().
-    """
-    output = MeshOutputManager()
-    output.inventory.writer.inventory.filename = "output.vtk"
-    output.inventory.writer._configure()
-    output.inventory.vertexInfoFields = ["vertex info"]
-    output.inventory.cellInfoFields = ["cell info"]
-    output._configure()
-    
-    dataProvider = TestProvider()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer)
-    
-    output.open(totalTime=5.0, numTimeSteps=2)
-    output.writeInfo()
-    output.close()
-    return
-
-
-  def test_writeData(self):
-    """
-    Test writeData().
-    """
-    output = MeshOutputManager()
-    output.inventory.writer.inventory.filename = "output.vtk"
-    output.inventory.writer.inventory.timeFormat = "%3.1f"
-    output.inventory.writer._configure()
-    output.inventory.vertexDataFields = ["vertex data 2",
-                                         "vertex data 1"]
-    output.inventory.cellDataFields = ["cell data"]
-    output._configure()
-    
-    dataProvider = TestProvider()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer)
-
-    output.open(totalTime=5.0, numTimeSteps=2)
-    output.writeData(2.0, dataProvider.fields)
-    output.close()
-    return
-
-
-  def test_checkWrite(self):
-    """
-    Test _checkWrite().
-    """
-    dataProvider = TestProvider()
-
-    # Default values should be true
-    output = MeshOutputManager()
-    output.inventory.writer._configure()
-    output._configure()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer)
-    self.assertEqual(True, output._checkWrite(0.0))
-    self.assertEqual(True, output._checkWrite(3.234e+8))
-
-    # Check writing based on time
-    output = MeshOutputManager()
-    output._configure()
-    output.writer._configure()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer)
-
-    output.outputFreq = "time_step"
-    t = 0.0
-    dt = output.dt
-    self.assertEqual(True, output._checkWrite(t))
-    self.assertEqual(False, output._checkWrite(t))
-    self.assertEqual(False, output._checkWrite(t + 0.8*dt))
-    t += dt
-    self.assertEqual(True, output._checkWrite(t))
-    t = 2*dt
-    self.assertEqual(True, output._checkWrite(t))
-    
-    # Check writing based on number of steps
-    output = MeshOutputManager()
-    output._configure()
-    output.writer._configure()
-    output.preinitialize(dataProvider)
-    output.initialize(self.normalizer)
-    output.outputFreq = "skip"
-    output.skip = 1
-    t = 0.0
-    dt = 1.0
-    self.assertEqual(True, output._checkWrite(t))
-    t += dt
-    self.assertEqual(False, output._checkWrite(t))
-    t += dt
-    self.assertEqual(True, output._checkWrite(t))
-    output.skip = 2
-    t += dt
-    self.assertEqual(False, output._checkWrite(t))
-    t += dt
-    self.assertEqual(False, output._checkWrite(t))
-    t += dt
-    self.assertEqual(True, output._checkWrite(t))
-    
-    return
-
-
-# End of file 

Copied: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerMesh.py (from rev 14667, short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManager.py)
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerMesh.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerMesh.py	2009-04-11 22:31:28 UTC (rev 14668)
@@ -0,0 +1,322 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/meshio/TestOutputManagerMesh.py
+
+## @brief Unit testing of Python MeshOutputManager object.
+
+import unittest
+
+from pylith.meshio.OutputManager import MeshOutputManager
+
+# ----------------------------------------------------------------------
+class TestProvider(object):
+
+  def __init__(self):
+    """
+    Constructor.
+    """
+    self.availableFields = \
+        {'vertex': \
+           {'info': ["vertex info"],
+            'data': ["vertex data 1",
+                     "vertex data 2"]},
+         'cell': \
+           {'info': ["cell info"],
+            'data': ["cell data"]}}
+
+    filename = "data/twohex8.txt"
+    
+    from pylith.meshio.MeshIOAscii import MeshIOAscii
+    iohandler = MeshIOAscii()
+    iohandler.inventory.filename = filename
+    from spatialdata.geocoords.CSCart import CSCart
+    iohandler.inventory.coordsys = CSCart()
+    iohandler._configure()
+
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    normalizer._configure()
+    mesh = iohandler.read(normalizer, debug=False, interpolate=False)
+
+    from pylith.topology.Fields import MeshFields
+    fields = MeshFields(mesh)
+    
+    self.mesh = mesh
+    self.fields = fields
+    return
+
+
+  def getDataMesh(self):
+    """
+    Get mesh.
+    """
+    return (self.mesh, None, None)
+
+
+  def getVertexField(self, name, fields=None):
+    """
+    Get vertex field.
+    """
+    from pylith.field.field.FieldBase import SCALAR,VECTOR,OTHER
+    if name == "vertex info":
+      fieldType = FieldBase.SCALAR
+      fiberDim = 1
+    elif name == "vertex data 1":
+      fieldType = FieldBase.VECTOR
+      fiberDim = self.mesh.dimension()
+    elif name == "vertex data 2":
+      fieldType = FieldBase.OTHER
+      fiberDim = 5
+    else:
+      raise ValueError("Unknown field '%s'." % name)
+
+    self.fields.add(name, name)
+    field = self.fields.get(name)
+    field.newSection(field.VERTICES_FIELD, fiberDim)
+    field.allocate()
+    field.vectorFieldType(fieldType)
+    self.fields.setFiberDimension(name, fiberDim)
+    self.fields.allocate(name)
+    field = self.fields.getReal(name)
+    return field
+
+
+  def getCellField(self, name, fields=None):
+    """
+    Get cell field.
+    """
+    if name == "cell info":
+      fieldType = FieldBase.SCALAR
+      fiberDim = 1
+    elif name == "cell data":
+      fieldType = FieldBase.VECTOR
+      fiberDim = self.mesh.dimension()
+    else:
+      raise ValueError("Unknown field '%s'." % name)
+
+    self.fields.add(name, name)
+    field = self.fields.get(name)
+    field.newSection(field.CELLS_FIELD, fiberDim)
+    field.allocate()
+    field.vectorFieldType(fieldType)
+    return field
+
+
+# ----------------------------------------------------------------------
+class TestOutputManager(unittest.TestCase):
+  """
+  Unit testing of Python MeshOutputManager object.
+  """
+
+  def setUp(self):
+    from spatialdata.units.Nondimensional import Nondimensional
+    self.normalizer = Nondimensional()
+    self.normalizer._configure()
+    return
+  
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    output = MeshOutputManager()
+    output.inventory.writer._configure()
+    output._configure()
+    return
+
+
+  def test_preinitialize(self):
+    """
+    Test preinitialize().
+    """
+    dataProvider = TestProvider()
+    output = MeshOutputManager()
+    output.preinitialize(dataProvider)
+    
+    self.assertEqual(dataProvider, output.dataProvider)
+    return
+
+
+  def test_verifyConfiguration(self):
+    """
+    Test verifyConfiguration().
+    """
+    dataProvider = TestProvider()
+    output = MeshOutputManager()
+    output.preinitialize(dataProvider)
+
+    output.vertexInfoFields = ["vertex info"]
+    output.vertexDataFields = ["vertex data 2"]
+    output.cellInfoFields = []
+    output.cellDataFields = ["cell data"]
+    output.verifyConfiguration(dataProvider.getDataMesh())
+    return
+  
+  
+  def test_initialize(self):
+    """
+    Test initialize().
+    """
+    # No quadrature
+    output = MeshOutputManager()
+    output.inventory.writer.inventory.filename = "test.vtk"
+    output.inventory.writer._configure()
+    output._configure()
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    # With quadrature
+    from pylith.feassemble.FIATLagrange import FIATLagrange
+    from pylith.feassemble.Quadrature import MeshQuadrature
+    cell = FIATLagrange()
+    cell.inventory.dimension = 3
+    cell.inventory.degree = 2
+    cell.inventory.order = 2
+    cell._configure()
+
+    quadrature = MeshQuadrature()
+    quadrature.inventory.cell = cell
+    quadrature._configure()
+    
+    output = MeshOutputManager()
+    output.inventory.writer.inventory.filename = "test.vtk"
+    output.inventory.writer._configure()
+    output._configure()
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer, quadrature)
+    return
+
+
+  def test_openclose(self):
+    """
+    Test open() and close().
+    """
+    output = MeshOutputManager()
+    output.inventory.writer.inventory.filename = "output.vtk"
+    output.inventory.writer._configure()
+    output._configure()
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    output.open(totalTime=5.0, numTimeSteps=2)
+    output.close()
+    return
+
+
+  def test_writeInfo(self):
+    """
+    Test writeInfo().
+    """
+    output = MeshOutputManager()
+    output.inventory.writer.inventory.filename = "output.vtk"
+    output.inventory.writer._configure()
+    output.inventory.vertexInfoFields = ["vertex info"]
+    output.inventory.cellInfoFields = ["cell info"]
+    output._configure()
+    
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+    
+    output.open(totalTime=5.0, numTimeSteps=2)
+    output.writeInfo()
+    output.close()
+    return
+
+
+  def test_writeData(self):
+    """
+    Test writeData().
+    """
+    output = MeshOutputManager()
+    output.inventory.writer.inventory.filename = "output.vtk"
+    output.inventory.writer.inventory.timeFormat = "%3.1f"
+    output.inventory.writer._configure()
+    output.inventory.vertexDataFields = ["vertex data 2",
+                                         "vertex data 1"]
+    output.inventory.cellDataFields = ["cell data"]
+    output._configure()
+    
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    output.open(totalTime=5.0, numTimeSteps=2)
+    output.writeData(2.0, dataProvider.fields)
+    output.close()
+    return
+
+
+  def test_checkWrite(self):
+    """
+    Test _checkWrite().
+    """
+    dataProvider = TestProvider()
+
+    # Default values should be true
+    output = MeshOutputManager()
+    output.inventory.writer._configure()
+    output._configure()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+    self.assertEqual(True, output._checkWrite(0.0))
+    self.assertEqual(True, output._checkWrite(3.234e+8))
+
+    # Check writing based on time
+    output = MeshOutputManager()
+    output._configure()
+    output.writer._configure()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    output.outputFreq = "time_step"
+    t = 0.0
+    dt = output.dt
+    self.assertEqual(True, output._checkWrite(t))
+    self.assertEqual(False, output._checkWrite(t))
+    self.assertEqual(False, output._checkWrite(t + 0.8*dt))
+    t += dt
+    self.assertEqual(True, output._checkWrite(t))
+    t = 2*dt
+    self.assertEqual(True, output._checkWrite(t))
+    
+    # Check writing based on number of steps
+    output = MeshOutputManager()
+    output._configure()
+    output.writer._configure()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+    output.outputFreq = "skip"
+    output.skip = 1
+    t = 0.0
+    dt = 1.0
+    self.assertEqual(True, output._checkWrite(t))
+    t += dt
+    self.assertEqual(False, output._checkWrite(t))
+    t += dt
+    self.assertEqual(True, output._checkWrite(t))
+    output.skip = 2
+    t += dt
+    self.assertEqual(False, output._checkWrite(t))
+    t += dt
+    self.assertEqual(False, output._checkWrite(t))
+    t += dt
+    self.assertEqual(True, output._checkWrite(t))
+    
+    return
+
+
+# End of file 

Added: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerSubMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerSubMesh.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputManagerSubMesh.py	2009-04-11 22:31:28 UTC (rev 14668)
@@ -0,0 +1,326 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/meshio/TestOutputManagerSubMesh.py
+
+## @brief Unit testing of Python SubMeshOutputManager object.
+
+import unittest
+
+from pylith.meshio.OutputManager import SubMeshOutputManager
+
+# ----------------------------------------------------------------------
+class TestProvider(object):
+
+  def __init__(self):
+    """
+    Constructor.
+    """
+    self.availableFields = \
+        {'vertex': \
+           {'info': ["vertex info"],
+            'data': ["vertex data 1",
+                     "vertex data 2"]},
+         'cell': \
+           {'info': ["cell info"],
+            'data': ["cell data"]}}
+
+    filename = "data/twohex8.txt"
+    
+    from pylith.meshio.MeshIOAscii import MeshIOAscii
+    iohandler = MeshIOAscii()
+    iohandler.inventory.filename = filename
+    from spatialdata.geocoords.CSCart import CSCart
+    iohandler.inventory.coordsys = CSCart()
+    iohandler._configure()
+
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    normalizer._configure()
+    mesh = iohandler.read(normalizer, debug=False, interpolate=False)
+
+    from pylith.topology.SubMesh import SubMesh
+    submesh = SubMesh(mesh, "4")
+
+    from pylith.topology.Fields import SubMeshFields
+    fields = SubMeshFields(submesh)
+    
+    self.mesh = mesh
+    self.submesh = submesh
+    self.fields = fields
+    return
+
+
+  def getDataMesh(self):
+    """
+    Get mesh.
+    """
+    return (self.submesh, None, None)
+
+
+  def getVertexField(self, name, fields=None):
+    """
+    Get vertex field.
+    """
+    from pylith.field.field.FieldBase import SCALAR,VECTOR,OTHER
+    if name == "vertex info":
+      fieldType = FieldBase.SCALAR
+      fiberDim = 1
+    elif name == "vertex data 1":
+      fieldType = FieldBase.VECTOR
+      fiberDim = self.mesh.dimension()
+    elif name == "vertex data 2":
+      fieldType = FieldBase.OTHER
+      fiberDim = 5
+    else:
+      raise ValueError("Unknown field '%s'." % name)
+
+    self.fields.add(name, name)
+    field = self.fields.get(name)
+    field.newSection(field.VERTICES_FIELD, fiberDim)
+    field.allocate()
+    field.vectorFieldType(fieldType)
+    self.fields.setFiberDimension(name, fiberDim)
+    self.fields.allocate(name)
+    field = self.fields.getReal(name)
+    return field
+
+
+  def getCellField(self, name, fields=None):
+    """
+    Get cell field.
+    """
+    if name == "cell info":
+      fieldType = FieldBase.SCALAR
+      fiberDim = 1
+    elif name == "cell data":
+      fieldType = FieldBase.VECTOR
+      fiberDim = self.mesh.dimension()
+    else:
+      raise ValueError("Unknown field '%s'." % name)
+
+    self.fields.add(name, name)
+    field = self.fields.get(name)
+    field.newSection(field.CELLS_FIELD, fiberDim)
+    field.allocate()
+    field.vectorFieldType(fieldType)
+    return field
+
+
+# ----------------------------------------------------------------------
+class TestOutputManager(unittest.TestCase):
+  """
+  Unit testing of Python MeshOutputManager object.
+  """
+
+  def setUp(self):
+    from spatialdata.units.Nondimensional import Nondimensional
+    self.normalizer = Nondimensional()
+    self.normalizer._configure()
+    return
+  
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    output = SubMeshOutputManager()
+    output.inventory.writer._configure()
+    output._configure()
+    return
+
+
+  def test_preinitialize(self):
+    """
+    Test preinitialize().
+    """
+    dataProvider = TestProvider()
+    output = SubMeshOutputManager()
+    output.preinitialize(dataProvider)
+    
+    self.assertEqual(dataProvider, output.dataProvider)
+    return
+
+
+  def test_verifyConfiguration(self):
+    """
+    Test verifyConfiguration().
+    """
+    dataProvider = TestProvider()
+    output = SubMeshOutputManager()
+    output.preinitialize(dataProvider)
+
+    output.vertexInfoFields = ["vertex info"]
+    output.vertexDataFields = ["vertex data 2"]
+    output.cellInfoFields = []
+    output.cellDataFields = ["cell data"]
+    output.verifyConfiguration(dataProvider.getDataMesh())
+    return
+  
+  
+  def test_initialize(self):
+    """
+    Test initialize().
+    """
+    # No quadrature
+    output = SubMeshOutputManager()
+    output.inventory.writer.inventory.filename = "test.vtk"
+    output.inventory.writer._configure()
+    output._configure()
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    # With quadrature
+    from pylith.feassemble.FIATLagrange import FIATLagrange
+    from pylith.feassemble.Quadrature import SubMeshQuadrature
+    cell = FIATLagrange()
+    cell.inventory.dimension = 2
+    cell.inventory.degree = 2
+    cell.inventory.order = 2
+    cell._configure()
+
+    quadrature = SubMeshQuadrature()
+    quadrature.inventory.cell = cell
+    quadrature._configure()
+    
+    output = SubMeshOutputManager()
+    output.inventory.writer.inventory.filename = "test.vtk"
+    output.inventory.writer._configure()
+    output._configure()
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer, quadrature)
+    return
+
+
+  def test_openclose(self):
+    """
+    Test open() and close().
+    """
+    output = SubMeshOutputManager()
+    output.inventory.writer.inventory.filename = "output.vtk"
+    output.inventory.writer._configure()
+    output._configure()
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    output.open(totalTime=5.0, numTimeSteps=2)
+    output.close()
+    return
+
+
+  def test_writeInfo(self):
+    """
+    Test writeInfo().
+    """
+    output = SubMeshOutputManager()
+    output.inventory.writer.inventory.filename = "output.vtk"
+    output.inventory.writer._configure()
+    output.inventory.vertexInfoFields = ["vertex info"]
+    output.inventory.cellInfoFields = ["cell info"]
+    output._configure()
+    
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+    
+    output.open(totalTime=5.0, numTimeSteps=2)
+    output.writeInfo()
+    output.close()
+    return
+
+
+  def test_writeData(self):
+    """
+    Test writeData().
+    """
+    output = SubMeshOutputManager()
+    output.inventory.writer.inventory.filename = "output.vtk"
+    output.inventory.writer.inventory.timeFormat = "%3.1f"
+    output.inventory.writer._configure()
+    output.inventory.vertexDataFields = ["vertex data 2",
+                                         "vertex data 1"]
+    output.inventory.cellDataFields = ["cell data"]
+    output._configure()
+    
+    dataProvider = TestProvider()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    output.open(totalTime=5.0, numTimeSteps=2)
+    output.writeData(2.0, dataProvider.fields)
+    output.close()
+    return
+
+
+  def test_checkWrite(self):
+    """
+    Test _checkWrite().
+    """
+    dataProvider = TestProvider()
+
+    # Default values should be true
+    output = SubMeshOutputManager()
+    output.inventory.writer._configure()
+    output._configure()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+    self.assertEqual(True, output._checkWrite(0.0))
+    self.assertEqual(True, output._checkWrite(3.234e+8))
+
+    # Check writing based on time
+    output = SubMeshOutputManager()
+    output._configure()
+    output.writer._configure()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+
+    output.outputFreq = "time_step"
+    t = 0.0
+    dt = output.dt
+    self.assertEqual(True, output._checkWrite(t))
+    self.assertEqual(False, output._checkWrite(t))
+    self.assertEqual(False, output._checkWrite(t + 0.8*dt))
+    t += dt
+    self.assertEqual(True, output._checkWrite(t))
+    t = 2*dt
+    self.assertEqual(True, output._checkWrite(t))
+    
+    # Check writing based on number of steps
+    output = SubMeshOutputManager()
+    output._configure()
+    output.writer._configure()
+    output.preinitialize(dataProvider)
+    output.initialize(self.normalizer)
+    output.outputFreq = "skip"
+    output.skip = 1
+    t = 0.0
+    dt = 1.0
+    self.assertEqual(True, output._checkWrite(t))
+    t += dt
+    self.assertEqual(False, output._checkWrite(t))
+    t += dt
+    self.assertEqual(True, output._checkWrite(t))
+    output.skip = 2
+    t += dt
+    self.assertEqual(False, output._checkWrite(t))
+    t += dt
+    self.assertEqual(False, output._checkWrite(t))
+    t += dt
+    self.assertEqual(True, output._checkWrite(t))
+    
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputSolnSubset.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputSolnSubset.py	2009-04-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestOutputSolnSubset.py	2009-04-11 22:31:28 UTC (rev 14668)
@@ -31,21 +31,23 @@
     
     from spatialdata.units.Nondimensional import Nondimensional
     normalizer = Nondimensional()
-    normalizer.initialize()
+    normalizer._configure()
 
     from spatialdata.geocoords.CSCart import CSCart
-    iohandler.filename = filename
-    iohandler.coordsys = CSCart()
+    iohandler.inventory.filename = filename
+    iohandler.inventory.coordsys = CSCart()
+    iohandler._configure()
     mesh = iohandler.read(normalizer, debug=False, interpolate=False)
 
-    from pylith.topology.FieldsManager import FieldsManager
-    fields = FieldsManager(mesh)
+    from pylith.topology.SolutionFields import SolutionFields
+    fields = SolutionFields(mesh)
 
-    name = "solution"
-    fields.addReal(name)
-    fields.setFiberDimension(name, mesh.dimension())
-    fields.allocate(name)
-    fields.solutionField(name)
+    name = "disp(t)"
+    fields.add(name, "displacement")
+    fields.solutionName(name)
+    field = fields.get(name)
+    field.newSection(field.VERTICES_FIELD, mesh.dimension())
+    field.allocate()
 
     self.mesh = mesh
     self.fields = fields
@@ -58,8 +60,8 @@
     Test constructor.
     """
     output = OutputSolnSubset()
+    output.inventory.writer._configure()
     output._configure()
-    output.writer._configure()
     return
 
 
@@ -68,8 +70,8 @@
     Test preinitialize().
     """
     output = OutputSolnSubset()
+    output.inventory.label = "label"
     output._configure()
-    output.label = "label"
     output.preinitialize()
     
     self.assertEqual(output, output.dataProvider)
@@ -81,11 +83,11 @@
     Test verifyConfiguration().
     """
     output = OutputSolnSubset()
+    output.inventory.label = "2"
     output._configure()
-    output.label = "2"
     output.preinitialize()
 
-    output.vertexDataFields = ["displacements"]
+    output.vertexDataFields = ["displacement"]
     output.verifyConfiguration(self.mesh)
     return
   
@@ -95,14 +97,13 @@
     Test initialize().
     """
     output = OutputSolnSubset()
+    output.inventory.label = "2"
+    output.inventory.writer.inventory.filename = "test.vtk"
+    output.inventory.writer._configure()
     output._configure()
-    output.label = "2"
-    output.writer._configure()
-    output.writer.filename = "test.vtk"
 
     output.preinitialize()
     output.initialize(self.mesh, self.normalizer)
-    self.assertNotEqual(None, output.cppHandle)
     return
 
 
@@ -111,10 +112,10 @@
     Test open() and close().
     """
     output = OutputSolnSubset()
+    output.inventory.label = "2"
+    output.inventory.writer.inventory.filename = "test.vtk"
+    output.inventory.writer._configure()
     output._configure()
-    output.label = "2"
-    output.writer._configure()
-    output.writer.filename = "test.vtk"
 
     output.preinitialize()
     output.initialize(self.mesh, self.normalizer)
@@ -130,10 +131,10 @@
     Test writeInfo().
     """
     output = OutputSolnSubset()
+    output.inventory.label = "2"
+    output.inventory.writer.inventory.filename = "output_sub.vtk"
+    output.inventory.writer._configure()
     output._configure()
-    output.label = "2"
-    output.writer._configure()
-    output.writer.filename = "output_sub.vtk"
 
     output.preinitialize()
     output.initialize(self.mesh, self.normalizer)
@@ -149,12 +150,12 @@
     Test writeData().
     """
     output = OutputSolnSubset()
+    output.inventory.label = "2"
+    output.inventory.writer.inventory.filename = "outputsub.vtk"
+    output.inventory.writer.inventory.timeFormat = "%3.1f"
+    output.inventory.writer._configure()
+    output.inventory.vertexDataFields = ["displacement"]
     output._configure()
-    output.label = "2"
-    output.writer._configure()
-    output.writer.filename = "outputsub.vtk"
-    output.writer.timeFormat = "%3.1f"
-    output.vertexDataFields = ["displacements"]
 
     output.preinitialize()
     output.initialize(self.mesh, self.normalizer)

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-11 04:34:01 UTC (rev 14667)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py	2009-04-11 22:31:28 UTC (rev 14668)
@@ -80,14 +80,14 @@
     from TestDataWriterVTK import TestSubMeshDataWriterVTK
     suite.addTest(unittest.makeSuite(TestSubMeshDataWriterVTK))
 
-    from TestOutputManager import TestMeshOutputManager
-    suite.addTest(unittest.makeSuite(TestMeshOutputManager))
+    from TestOutputManagerMesh import TestOutputManager
+    suite.addTest(unittest.makeSuite(TestOutputManager))
 
-    #from TestOutputManager import TestSubMeshOutputManager
-    #suite.addTest(unittest.makeSuite(TestSubMeshOutputManager))
+    from TestOutputManagerSubMesh import TestOutputManager
+    suite.addTest(unittest.makeSuite(TestOutputManager))
 
-    #from TestOutputSolnSubset import TestOutputSolnSubset
-    #suite.addTest(unittest.makeSuite(TestOutputSolnSubset))
+    from TestOutputSolnSubset import TestOutputSolnSubset
+    suite.addTest(unittest.makeSuite(TestOutputSolnSubset))
 
     return suite
 



More information about the CIG-COMMITS mailing list