[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