[cig-commits] r14690 - in short/3D/PyLith/branches/pylith-swig: . unittests/libtests/meshio
brad at geodynamics.org
brad at geodynamics.org
Mon Apr 13 21:49:25 PDT 2009
Author: brad
Date: 2009-04-13 21:49:25 -0700 (Mon, 13 Apr 2009)
New Revision: 14690
Modified:
short/3D/PyLith/branches/pylith-swig/TODO
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/Makefile.am
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.hh
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMeshTri3.cc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.cc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.hh
Log:
More work on output unit tests.
Modified: short/3D/PyLith/branches/pylith-swig/TODO
===================================================================
--- short/3D/PyLith/branches/pylith-swig/TODO 2009-04-14 00:34:17 UTC (rev 14689)
+++ short/3D/PyLith/branches/pylith-swig/TODO 2009-04-14 04:49:25 UTC (rev 14690)
@@ -7,14 +7,13 @@
0. SWIG conversion [Brad]
(1) Output
- TestDataWriterVTK (bc, fault)
+ TestDataWriterVTKBCMesh (test suite commented out)
+ TestDataWriterVTKFaultMesh
(2) Full-scale tests (few 1-D, 2-D, and 3-D)
Analytical solutions, time stepping, multiple faults
- (3) SolverNonlinear (get it to run then turn it over to Matt)
-
(4) Faults
Use visitors in FaultCohesiveKin
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/Makefile.am 2009-04-14 00:34:17 UTC (rev 14689)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/Makefile.am 2009-04-14 04:49:25 UTC (rev 14690)
@@ -33,6 +33,11 @@
TestDataWriterVTKMeshQuad4.cc \
TestDataWriterVTKMeshTet4.cc \
TestDataWriterVTKMeshHex8.cc \
+ TestDataWriterVTKBCMesh.cc \
+ TestDataWriterVTKBCMeshTri3.cc \
+ TestDataWriterVTKBCMeshQuad4.cc \
+ TestDataWriterVTKBCMeshTet4.cc \
+ TestDataWriterVTKBCMeshHex8.cc \
TestOutputManager.cc \
TestOutputSolnSubset.cc \
test_meshio.cc
@@ -47,12 +52,7 @@
# TestDataWriterVTKFaultMeshTri3.cc \
# TestDataWriterVTKFaultMeshQuad4.cc \
# TestDataWriterVTKFaultMeshTet4.cc \
-# TestDataWriterVTKFaultMeshHex8.cc \
-# TestDataWriterVTKBCMesh.cc \
-# TestDataWriterVTKBCMeshTri3.cc \
-# TestDataWriterVTKBCMeshQuad4.cc \
-# TestDataWriterVTKBCMeshTet4.cc \
-# TestDataWriterVTKBCMeshHex8.cc
+# TestDataWriterVTKFaultMeshHex8.cc
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc 2009-04-14 00:34:17 UTC (rev 14689)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc 2009-04-14 04:49:25 UTC (rev 14690)
@@ -16,42 +16,311 @@
#include "data/DataWriterVTKData.hh" // USES DataWriterVTKData
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/Fields.hh" // USES Fields
#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
+#include "pylith/meshio/DataWriterVTK.hh" // USES DataWriterVTK
#include "pylith/faults/FaultCohesiveKin.hh" // USES FaultCohesiveKin
-#include "pylith/faults/CohesiveTopology.hh" // USES CohesiveTopology
-#include <Selection.hh> // USES submesh algorithms
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::meshio::TestDataWriterVTKBCMesh );
-#include <map> // USES std::map
+// ----------------------------------------------------------------------
+typedef pylith::topology::Field<pylith::topology::SubMesh> SubMeshField;
// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::meshio::TestDataWriterVTKBCMesh::setUp(void)
+{ // setUp
+ TestDataWriterVTK::setUp();
+ _mesh = 0;
+ _submesh = 0;
+ _flipFault = false;
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down testing data.
+void
+pylith::meshio::TestDataWriterVTKBCMesh::tearDown(void)
+{ // tearDown
+ TestDataWriterVTK::tearDown();
+ delete _mesh; _mesh = 0;
+ delete _submesh; _submesh = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::meshio::TestDataWriterVTKBCMesh::testConstructor(void)
+{ // testConstructor
+ DataWriterVTK<topology::SubMesh, SubMeshField> writer;
+
+ CPPUNIT_ASSERT(0 == writer._viewer);
+ CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test openTimeStep() and closeTimeStep()
+void
+pylith::meshio::TestDataWriterVTKBCMesh::testTimeStep(void)
+{ // testTimeStep
+ CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(0 != _data);
+
+ DataWriterVTK<topology::SubMesh, SubMeshField> writer;
+
+ writer.filename(_data->timestepFilename);
+ writer.timeFormat(_data->timeFormat);
+
+ CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+
+ const double t = _data->time;
+ const int numTimeSteps = 1;
+ if (0 == _data->cellsLabel) {
+ writer.open(*_submesh, numTimeSteps);
+ writer.openTimeStep(t, *_submesh);
+ } else {
+ const char* label = _data->cellsLabel;
+ const int id = _data->labelId;
+ writer.open(*_submesh, numTimeSteps, label, id);
+ writer.openTimeStep(t, *_submesh, label, id);
+ } // else
+
+ CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+
+ writer.closeTimeStep();
+ writer.close();
+
+ CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+
+ checkFile(_data->timestepFilename, t, _data->timeFormat);
+} // testTimeStep
+
+// ----------------------------------------------------------------------
+// Test writeVertexField.
+void
+pylith::meshio::TestDataWriterVTKBCMesh::testWriteVertexField(void)
+{ // testWriteVertexField
+ CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(0 != _data);
+
+ DataWriterVTK<topology::SubMesh, SubMeshField> writer;
+
+ topology::Fields<SubMeshField> vertexFields(*_submesh);
+ _createVertexFields(&vertexFields);
+
+ writer.filename(_data->vertexFilename);
+ writer.timeFormat(_data->timeFormat);
+
+ const int nfields = _data->numVertexFields;
+
+ const double t = _data->time;
+ const int numTimeSteps = 1;
+ if (0 == _data->cellsLabel) {
+ writer.open(*_submesh, numTimeSteps);
+ writer.openTimeStep(t, *_submesh);
+ } else {
+ const char* label = _data->cellsLabel;
+ const int id = _data->labelId;
+ writer.open(*_submesh, numTimeSteps, label, id);
+ writer.openTimeStep(t, *_submesh, label, id);
+ } // else
+ for (int i=0; i < nfields; ++i) {
+ const SubMeshField& field = vertexFields.get(_data->vertexFieldsInfo[i].name);
+ writer.writeVertexField(t, field);
+ CPPUNIT_ASSERT(writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+ } // for
+ writer.closeTimeStep();
+ writer.close();
+ CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+
+ checkFile(_data->vertexFilename, t, _data->timeFormat);
+} // testWriteVertexField
+
+// ----------------------------------------------------------------------
+// Test writeCellField.
+void
+pylith::meshio::TestDataWriterVTKBCMesh::testWriteCellField(void)
+{ // testWriteCellField
+ CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(0 != _data);
+
+ DataWriterVTK<topology::SubMesh, SubMeshField> writer;
+
+ topology::Fields<SubMeshField> cellFields(*_submesh);
+ _createCellFields(&cellFields);
+
+ writer.filename(_data->cellFilename);
+ writer.timeFormat(_data->timeFormat);
+
+ const int nfields = _data->numCellFields;
+
+ const double t = _data->time;
+ const int numTimeSteps = 1;
+ if (0 == _data->cellsLabel) {
+ writer.open(*_submesh, numTimeSteps);
+ writer.openTimeStep(t, *_submesh);
+ for (int i=0; i < nfields; ++i) {
+ const SubMeshField& field = cellFields.get(_data->cellFieldsInfo[i].name);
+ writer.writeCellField(t, field);
+ CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(writer._wroteCellHeader);
+ } // for
+ } else {
+ const char* label = _data->cellsLabel;
+ const int id = _data->labelId;
+ writer.open(*_submesh, numTimeSteps, label, id);
+ writer.openTimeStep(t, *_submesh, label, id);
+ for (int i=0; i < nfields; ++i) {
+ const SubMeshField& field = cellFields.get(_data->cellFieldsInfo[i].name);
+ writer.writeCellField(t, field, label, id);
+ CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+ CPPUNIT_ASSERT(writer._wroteCellHeader);
+ } // for
+ } // else
+ writer.closeTimeStep();
+ writer.close();
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+ CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+
+ checkFile(_data->cellFilename, t, _data->timeFormat);
+} // testWriteCellField
+
+// ----------------------------------------------------------------------
// Initialize mesh.
void
pylith::meshio::TestDataWriterVTKBCMesh::_initialize(void)
{ // _initialize
CPPUNIT_ASSERT(0 != _data);
+ delete _mesh; _mesh = new topology::Mesh;
MeshIOAscii iohandler;
iohandler.filename(_data->meshFilename);
- iohandler.read(&_meshDomain);
- CPPUNIT_ASSERT(!_meshDomain.isNull());
+ iohandler.read(_mesh);
if (0 != _data->faultLabel) {
faults::FaultCohesiveKin fault;
fault.label(_data->faultLabel);
fault.id(_data->faultId);
- fault.adjustTopology(_meshDomain, _flipFault);
+ fault.adjustTopology(_mesh, _flipFault);
} // if
- const char* label = _data->bcLabel;
- _mesh =
- ALE::Selection<Mesh>::submeshV<SubMesh>(_meshDomain,
- _meshDomain->getIntSection(label));
- CPPUNIT_ASSERT(!_mesh.isNull());
- _mesh->setRealSection("coordinates",
- _meshDomain->getRealSection("coordinates"));
+ delete _submesh; _submesh = new topology::SubMesh(*_mesh, _data->bcLabel);
+ const ALE::Obj<topology::Mesh::SieveMesh>& sieveMesh = _mesh->sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<topology::SubMesh::SieveMesh>& sieveSubMesh =
+ _submesh->sieveMesh();
+ assert(!sieveSubMesh.isNull());
+ sieveSubMesh->setRealSection("coordinates",
+ sieveMesh->getRealSection("coordinates"));
//_mesh->view("BC mesh");
} // _initialize
+// ----------------------------------------------------------------------
+// Create vertex fields.
+void
+pylith::meshio::TestDataWriterVTKBCMesh::_createVertexFields(
+ topology::Fields<SubMeshField>* fields) const
+{ // _createVertexFields
+ CPPUNIT_ASSERT(0 != fields);
+ CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(0 != _data);
+ try {
+ const int nfields = _data->numVertexFields;
+
+ const ALE::Obj<topology::SubMesh::SieveMesh>& sieveSubMesh =
+ _submesh->sieveMesh();
+ CPPUNIT_ASSERT(!sieveSubMesh.isNull());
+ const ALE::Obj<topology::SubMesh::SieveMesh::label_sequence>& vertices =
+ sieveSubMesh->depthStratum(0);
+ CPPUNIT_ASSERT(!vertices.isNull());
+ const topology::SubMesh::SieveMesh::label_sequence::iterator verticesEnd =
+ vertices->end();
+
+ // Set vertex fields
+ for (int i=0; i < nfields; ++i) {
+ const char* name = _data->vertexFieldsInfo[i].name;
+ const int fiberDim = _data->vertexFieldsInfo[i].fiber_dim;
+ fields->add(name, name);
+ SubMeshField& field = fields->get(name);
+ field.newSection(topology::FieldBase::VERTICES_FIELD, fiberDim);
+ field.allocate();
+ field.vectorFieldType(_data->vertexFieldsInfo[i].field_type);
+
+ const ALE::Obj<topology::SubMesh::RealSection>& section = field.section();
+ CPPUNIT_ASSERT(!section.isNull());
+ int ipt = 0;
+ for (topology::SubMesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+ v_iter != verticesEnd;
+ ++v_iter, ++ipt) {
+ const double* values = &_data->vertexFields[i][ipt*fiberDim];
+ section->updatePoint(*v_iter, values);
+ } // for
+ CPPUNIT_ASSERT_EQUAL(_data->numVertices, ipt);
+ } // for
+ } catch (const ALE::Exception& err) {
+ throw std::runtime_error(err.msg());
+ } // catch
+} // _createVertexFields
+
+// ----------------------------------------------------------------------
+// Create cell fields.
+void
+pylith::meshio::TestDataWriterVTKBCMesh::_createCellFields(
+ topology::Fields<SubMeshField>* fields) const
+{ // _createCellFields
+ CPPUNIT_ASSERT(0 != fields);
+ CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(0 != _data);
+
+ try {
+ const int nfields = _data->numCellFields;
+
+ const ALE::Obj<topology::SubMesh::SieveMesh>& sieveSubMesh =
+ _submesh->sieveMesh();
+ CPPUNIT_ASSERT(!sieveSubMesh.isNull());
+ const ALE::Obj<topology::SubMesh::SieveMesh::label_sequence>& cells =
+ sieveSubMesh->heightStratum(1);
+ assert(!cells.isNull());
+ const topology::SubMesh::SieveMesh::label_sequence::iterator cellsEnd =
+ cells->end();
+
+ // Set cell fields
+ for (int i=0; i < nfields; ++i) {
+ const char* name = _data->cellFieldsInfo[i].name;
+ const int fiberDim = _data->cellFieldsInfo[i].fiber_dim;
+ fields->add(name, name);
+ SubMeshField& field = fields->get(name);
+ field.newSection(topology::FieldBase::CELLS_FIELD, fiberDim);
+ field.allocate();
+ field.vectorFieldType(_data->cellFieldsInfo[i].field_type);
+ field.view(name);
+
+ const ALE::Obj<topology::SubMesh::RealSection>& section = field.section();
+ CPPUNIT_ASSERT(!section.isNull());
+ int icell = 0;
+ for (topology::SubMesh::SieveMesh::label_sequence::iterator c_iter=cells->begin();
+ c_iter != cellsEnd;
+ ++c_iter, ++icell) {
+ const double* values = &_data->cellFields[i][icell*fiberDim];
+ section->updatePoint(*c_iter, values);
+ std::cout << "c_iter: " << *c_iter << std::endl;
+ } // for
+ CPPUNIT_ASSERT_EQUAL(_data->numCells, icell);
+ } // for
+ } catch (const ALE::Exception& err) {
+ throw std::runtime_error(err.msg());
+ } // catch
+} // _createCellFields
+
+
// End of file
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.hh 2009-04-14 00:34:17 UTC (rev 14689)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMesh.hh 2009-04-14 04:49:25 UTC (rev 14690)
@@ -23,6 +23,8 @@
#include "TestDataWriterVTK.hh"
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SubMesh, Field
+
/// Namespace for pylith package
namespace pylith {
namespace meshio {
@@ -34,6 +36,34 @@
class pylith::meshio::TestDataWriterVTKBCMesh : public TestDataWriterVTK
{ // class TestDataWriterVTKBCMesh
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestDataWriterVTKBCMesh );
+
+ CPPUNIT_TEST( testConstructor );
+
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Setup testing data.
+ void setUp(void);
+
+ /// Tear down testing data.
+ void tearDown(void);
+
+ /// Test constructor
+ void testConstructor(void);
+
+ /// Test openTimeStep() and closeTimeStep()
+ void testTimeStep(void);
+
+ /// Test writeVertexField.
+ void testWriteVertexField(void);
+
+ /// Test writeCellField.
+ void testWriteCellField(void);
+
// PROTECTED MEMBERS //////////////////////////////////////////////////
protected :
@@ -43,8 +73,27 @@
// PROTECTED MEMBERS //////////////////////////////////////////////////
protected :
- ALE::Obj<Mesh> _meshDomain; ///< Mesh for domain.
+ topology::Mesh* _mesh; ///< Mesh for domain
+ topology::SubMesh* _submesh; ///< Mesh for subdomain.
+ bool _flipFault; ///< If true, flip fault orientation.
+ // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+ /** Create vertex fields.
+ *
+ * @param fields Vertex fields.
+ */
+ void
+ _createVertexFields(topology::Fields<topology::Field<topology::SubMesh> >* fields) const;
+
+ /** Create cell fields.
+ *
+ * @param fields Cell fields.
+ */
+ void
+ _createCellFields(topology::Fields<topology::Field<topology::SubMesh> >* fields) const;
+
}; // class TestDataWriterVTKBCMesh
#endif // pylith_meshio_testdatawritervtkbcmesh_hh
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMeshTri3.cc 2009-04-14 00:34:17 UTC (rev 14689)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKBCMeshTri3.cc 2009-04-14 04:49:25 UTC (rev 14690)
@@ -26,6 +26,7 @@
{ // setUp
TestDataWriterVTKBCMesh::setUp();
_data = new DataWriterVTKDataBCMeshTri3;
+ _flipFault = true;
_initialize();
} // setUp
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.cc 2009-04-14 00:34:17 UTC (rev 14689)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.cc 2009-04-14 04:49:25 UTC (rev 14690)
@@ -262,7 +262,7 @@
{ // _initialize
CPPUNIT_ASSERT(0 != _data);
- _mesh = new topology::Mesh;
+ delete _mesh; _mesh = new topology::Mesh;
MeshIOAscii iohandler;
iohandler.filename(_data->meshFilename);
iohandler.read(_mesh);
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.hh 2009-04-14 00:34:17 UTC (rev 14689)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTKMesh.hh 2009-04-14 04:49:25 UTC (rev 14690)
@@ -25,7 +25,6 @@
#include "pylith/topology/topologyfwd.hh" // USES Mesh, Field
-
/// Namespace for pylith package
namespace pylith {
namespace meshio {
More information about the CIG-COMMITS
mailing list