[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