[cig-commits] r14618 - in short/3D/PyLith/branches/pylith-swig: libsrc/meshio unittests/libtests/meshio
brad at geodynamics.org
brad at geodynamics.org
Tue Apr 7 16:07:21 PDT 2009
Author: brad
Date: 2009-04-07 16:07:21 -0700 (Tue, 07 Apr 2009)
New Revision: 14618
Modified:
short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.cc
short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.hh
short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.icc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/Makefile.am
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.cc
short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.hh
Log:
Worked on DataWriterVTK and corresponding unit tests.
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.cc 2009-04-07 22:50:02 UTC (rev 14617)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.cc 2009-04-07 23:07:21 UTC (rev 14618)
@@ -44,8 +44,8 @@
// ----------------------------------------------------------------------
// Copy constructor.
template<typename mesh_type>
-pylith::meshio::DataWriterVTK<mesh_type>::DataWriterVTK(const DataWriterVTK& w) :
- DataWriter(w),
+pylith::meshio::DataWriterVTK<mesh_type>::DataWriterVTK(const DataWriterVTK<mesh_type>& w) :
+ DataWriter<mesh_type>(w),
_timeConstant(w._timeConstant),
_filename(w._filename),
_timeFormat(w._timeFormat),
@@ -85,28 +85,31 @@
const std::string& filename = _vtkFilename(t);
- err = PetscViewerCreate(mesh->comm(), &_viewer);
+ err = PetscViewerCreate(mesh.comm(), &_viewer);
CHECK_PETSC_ERROR(err);
err = PetscViewerSetType(_viewer, PETSC_VIEWER_ASCII);
CHECK_PETSC_ERROR(err);
err = PetscViewerSetFormat(_viewer, PETSC_VIEWER_ASCII_VTK);
CHECK_PETSC_ERROR(err);
err = PetscViewerFileSetName(_viewer, filename.c_str());
- CHECK_PETSC_ERROR_MSF(err);
+ CHECK_PETSC_ERROR(err);
+
+ const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh = mesh.sieveMesh();
err = VTKViewer::writeHeader(_viewer);
CHECK_PETSC_ERROR(err);
//std::cout << "Wrote header for " << filename << std::endl;
- err = VTKViewer::writeVertices(mesh, _viewer);
+ err = VTKViewer::writeVertices(sieveMesh, _viewer);
CHECK_PETSC_ERROR(err);
//std::cout << "Wrote vertices for " << filename << std::endl;
if (0 == label) {
- err = VTKViewer::writeElements(mesh, _viewer);
+ err = VTKViewer::writeElements(sieveMesh, _viewer);
CHECK_PETSC_ERROR(err);
} else {
const std::string labelName =
- (mesh->hasLabel("censored depth")) ? "censored depth" : "depth";
- err = VTKViewer::writeElements(mesh, label, labelId, labelName, 0, _viewer);
+ (sieveMesh->hasLabel("censored depth")) ? "censored depth" : "depth";
+ err = VTKViewer::writeElements(sieveMesh, label, labelId, labelName,
+ 0, _viewer);
CHECK_PETSC_ERROR(err);
} // if
//std::cout << "Wrote elements for " << filename << std::endl;
@@ -150,17 +153,21 @@
const double t,
const topology::Field<mesh_type>& field)
{ // writeVertexField
+ typedef typename mesh_type::SieveMesh SieveMesh;
+ typedef typename mesh_type::RealSection RealSection;
+
try {
- const ALE::Obj<SieveMesh>& sievemesh = field.mesh().sieveMesh();
+ const ALE::Obj<SieveMesh>& sieveMesh = field.mesh().sieveMesh();
assert(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& vertices = sievMesh->depthStratum(0);
+ const ALE::Obj<typename SieveMesh::label_sequence>& vertices =
+ sieveMesh->depthStratum(0);
assert(!vertices.isNull());
int rank = 0;
- MPI_Comm_rank(field.mesh.comm(), &rank);
+ MPI_Comm_rank(field.mesh().comm(), &rank);
const std::string labelName =
(sieveMesh->hasLabel("censored depth")) ? "censored depth" : "depth";
- const ALE::Obj<SieveMesh::numbering_type>& numbering =
+ const ALE::Obj<typename SieveMesh::numbering_type>& numbering =
sieveMesh->getFactory()->getNumbering(sieveMesh, labelName, 0);
assert(!numbering.isNull());
@@ -170,16 +177,16 @@
const int localFiberDim =
section->getFiberDimension(*sieveMesh->getLabelStratum(labelName, 0)->begin());
int fiberDim = 0;
- MPI_Allreduce((void *) &localFiberDim, (void *) &fiberDim, 1, MPI_INT, MPI_MAX,
- field.mesh.comm());
+ MPI_Allreduce((void *) &localFiberDim, (void *) &fiberDim, 1,
+ MPI_INT, MPI_MAX, field.mesh().comm());
assert(fiberDim > 0);
const int enforceDim =
- (field.vectorFieldType() != FieldBase::VECTOR) ? fiberDim : 3;
+ (field.vectorFieldType() != topology::FieldBase::VECTOR) ? fiberDim : 3;
PetscErrorCode err = 0;
if (!_wroteVertexHeader) {
err = PetscViewerASCIIPrintf(_viewer, "POINT_DATA %d\n",
- numbering->getGlobalSize());
+ numbering->getGlobalSize());
CHECK_PETSC_ERROR(err);
_wroteVertexHeader = true;
} // if
@@ -210,10 +217,13 @@
const char* label,
const int labelId)
{ // writeCellField
+ typedef typename mesh_type::SieveMesh SieveMesh;
+ typedef typename mesh_type::RealSection RealSection;
+
try {
- const ALE::Obj<SieveMesh>& sievemesh = field.mesh().sieveMesh();
+ const ALE::Obj<SieveMesh>& sieveMesh = field.mesh().sieveMesh();
assert(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& cells = (0 == label) ?
+ const ALE::Obj<typename SieveMesh::label_sequence>& cells = (0 == label) ?
sieveMesh->heightStratum(0) :
sieveMesh->getLabelStratum(label, labelId);
assert(!cells.isNull());
@@ -227,9 +237,9 @@
const std::string labelName = (0 == label) ?
((sieveMesh->hasLabel("censored depth")) ?
"censored depth" : "depth") : label;
- assert(!sieveMesh->getFactor().isNull());
- const ALE::Obj<SieveMesh::numbering_type>& numbering =
- sieveMesh->getFactory()->getNumbering(mesh, labelName, depth);
+ assert(!sieveMesh->getFactory().isNull());
+ const ALE::Obj<typename SieveMesh::numbering_type>& numbering =
+ sieveMesh->getFactory()->getNumbering(sieveMesh, labelName, depth);
assert(!numbering.isNull());
assert(!sieveMesh->getLabelStratum(labelName, depth).isNull());
const ALE::Obj<RealSection>& section = field.section();
@@ -237,17 +247,17 @@
const int localFiberDim =
section->getFiberDimension(*sieveMesh->getLabelStratum(labelName, depth)->begin());
int fiberDim = 0;
- MPI_Allreduce((void *) &localFiberDim, (void *) &fiberDim, 1, MPI_INT, MPI_MAX,
- field.mesh()->comm());
+ MPI_Allreduce((void *) &localFiberDim, (void *) &fiberDim, 1,
+ MPI_INT, MPI_MAX, field.mesh().comm());
assert(fiberDim > 0);
const int enforceDim =
- (field.vectorFieldType() != FieldBase::VECTOR) ? fiberDim : 3;
+ (field.vectorFieldType() != topology::FieldBase::VECTOR) ? fiberDim : 3;
PetscErrorCode err = 0;
if (!_wroteCellHeader) {
err = PetscViewerASCIIPrintf(_viewer, "CELL_DATA %d\n",
numbering->getGlobalSize());
- CHECK_PETSC_ERROR(err)l
+ CHECK_PETSC_ERROR(err);
_wroteCellHeader = true;
} // if
@@ -274,7 +284,7 @@
{ // _vtkFilename
std::ostringstream filename;
const int indexExt = _filename.find(".vtk");
- if (_numTimeSteps > 0) {
+ if (DataWriter<mesh_type>::_numTimeSteps > 0) {
// If data with multiple time steps, then add time stamp to filename
char sbuffer[256];
sprintf(sbuffer, _timeFormat.c_str(), t/_timeConstant);
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.hh 2009-04-07 22:50:02 UTC (rev 14617)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.hh 2009-04-07 23:07:21 UTC (rev 14618)
@@ -20,11 +20,11 @@
#define pylith_meshio_datawritervtk_hh
// Include directives ---------------------------------------------------
-#include "meshiofwd.hh" // forward declarations
+#include "DataWriter.hh" // ISA DataWriter
// DataWriterVTK --------------------------------------------------------
template<typename mesh_type>
-class pylith::meshio::DataWriterVTK : public DataWriter
+class pylith::meshio::DataWriterVTK : public DataWriter<mesh_type>
{ // DataWriterVTK
friend class TestDataWriterVTK; // unit testing
@@ -41,7 +41,7 @@
*
* @returns Copy of this.
*/
- DataWriter* clone(void) const;
+ DataWriter<mesh_type>* clone(void) const;
/** Set filename for VTK file.
*
Modified: short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.icc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.icc 2009-04-07 22:50:02 UTC (rev 14617)
+++ short/3D/PyLith/branches/pylith-swig/libsrc/meshio/DataWriterVTK.icc 2009-04-07 23:07:21 UTC (rev 14618)
@@ -23,6 +23,7 @@
}
// Set filename for VTK file.
+template<typename mesh_type>
inline
void
pylith::meshio::DataWriterVTK<mesh_type>::filename(const char* filename) {
@@ -30,6 +31,7 @@
}
// Set time format for time stamp in name of VTK file.
+template<typename mesh_type>
inline
void
pylith::meshio::DataWriterVTK<mesh_type>::timeFormat(const char* format) {
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-07 22:50:02 UTC (rev 14617)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/Makefile.am 2009-04-07 23:07:21 UTC (rev 14618)
@@ -26,31 +26,31 @@
TestMeshIOLagrit.cc \
TestCellFilterAvg.cc \
TestVertexFilterVecNorm.cc \
+ TestDataWriterVTK.cc \
test_meshio.cc
-# TestDataWriterVTK.cc \
-# TestDataWriterVTKMesh.cc \
-# TestDataWriterVTKMeshLine2.cc \
-# TestDataWriterVTKMeshTri3.cc \
-# TestDataWriterVTKMeshQuad4.cc \
-# TestDataWriterVTKMeshTet4.cc \
-# TestDataWriterVTKMeshHex8.cc \
-# TestDataWriterVTKSubMeshLine2.cc \
-# TestDataWriterVTKSubMeshTri3.cc \
-# TestDataWriterVTKSubMeshQuad4.cc \
-# TestDataWriterVTKSubMeshTet4.cc \
-# TestDataWriterVTKSubMeshHex8.cc \
-# TestDataWriterVTKFaultMesh.cc \
-# TestDataWriterVTKFaultMeshTri3.cc \
-# TestDataWriterVTKFaultMeshQuad4.cc \
-# TestDataWriterVTKFaultMeshTet4.cc \
-# TestDataWriterVTKFaultMeshHex8.cc \
-# TestDataWriterVTKBCMesh.cc \
-# TestDataWriterVTKBCMeshTri3.cc \
-# TestDataWriterVTKBCMeshQuad4.cc \
-# TestDataWriterVTKBCMeshTet4.cc \
-# TestDataWriterVTKBCMeshHex8.cc
+# TestDataWriterVTKMesh.cc \
+# TestDataWriterVTKMeshLine2.cc \
+# TestDataWriterVTKMeshTri3.cc \
+# TestDataWriterVTKMeshQuad4.cc \
+# TestDataWriterVTKMeshTet4.cc \
+# TestDataWriterVTKMeshHex8.cc \
+# TestDataWriterVTKSubMeshLine2.cc \
+# TestDataWriterVTKSubMeshTri3.cc \
+# TestDataWriterVTKSubMeshQuad4.cc \
+# TestDataWriterVTKSubMeshTet4.cc \
+# TestDataWriterVTKSubMeshHex8.cc \
+# TestDataWriterVTKFaultMesh.cc \
+# TestDataWriterVTKFaultMeshTri3.cc \
+# TestDataWriterVTKFaultMeshQuad4.cc \
+# TestDataWriterVTKFaultMeshTet4.cc \
+# TestDataWriterVTKFaultMeshHex8.cc \
+# TestDataWriterVTKBCMesh.cc \
+# TestDataWriterVTKBCMeshTri3.cc \
+# TestDataWriterVTKBCMeshQuad4.cc \
+# TestDataWriterVTKBCMeshTet4.cc \
+# TestDataWriterVTKBCMeshHex8.cc
# TestOutputManager.cc \
# TestOutputSolnSubset.cc
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.cc 2009-04-07 22:50:02 UTC (rev 14617)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.cc 2009-04-07 23:07:21 UTC (rev 14618)
@@ -16,6 +16,9 @@
#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/DataWriterVTK.hh" // USES DataWriterVTK
#include <string.h> // USES strcmp()
@@ -140,7 +143,7 @@
DataWriterVTK<topology::Mesh> writer;
- topology::Fields<topology::Mesh> vertexFields(*_mesh);
+ topology::Fields<topology::Field<topology::Mesh> > vertexFields(*_mesh);
_createVertexFields(&vertexFields);
writer.filename(_data->vertexFilename);
@@ -160,10 +163,9 @@
writer.openTimeStep(t, *_mesh, label, id);
} // else
for (int i=0; i < nfields; ++i) {
- writer.writeVertexField(t, _data->vertexFieldsInfo[i].name,
- vertexFields[i],
- _data->vertexFieldsInfo[i].field_type,
- _mesh);
+ const topology::Field<topology::Mesh>& field =
+ vertexFields.get(_data->vertexFieldsInfo[i].name);
+ writer.writeVertexField(t, field);
CPPUNIT_ASSERT(writer._wroteVertexHeader);
CPPUNIT_ASSERT(false == writer._wroteCellHeader);
} // for
@@ -185,7 +187,7 @@
DataWriterVTK<topology::Mesh> writer;
- std::vector<topology::Field<topology::Mesh> > cellFields;
+ topology::Fields<topology::Field<topology::Mesh> > cellFields(*_mesh);
_createCellFields(&cellFields);
writer.filename(_data->cellFilename);
@@ -199,10 +201,9 @@
writer.open(*_mesh, numTimeSteps);
writer.openTimeStep(t, *_mesh);
for (int i=0; i < nfields; ++i) {
- writer.writeCellField(t, _data->cellFieldsInfo[i].name,
- cellFields[i],
- _data->cellFieldsInfo[i].field_type,
- _mesh);
+ const topology::Field<topology::Mesh>& field =
+ cellFields.get(_data->cellFieldsInfo[i].name);
+ writer.writeCellField(t, field);
CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
CPPUNIT_ASSERT(writer._wroteCellHeader);
} // for
@@ -210,12 +211,11 @@
const char* label = _data->cellsLabel;
const int id = _data->labelId;
writer.open(*_mesh, numTimeSteps, label, id);
- writer.openTimeStep(t, _mesh, &cs, label, id);
+ writer.openTimeStep(t, *_mesh, label, id);
for (int i=0; i < nfields; ++i) {
- writer.writeCellField(t, _data->cellFieldsInfo[i].name,
- cellFields[i],
- _data->cellFieldsInfo[i].field_type,
- _mesh, label, id);
+ const topology::Field<topology::Mesh>& field =
+ cellFields.get(_data->cellFieldsInfo[i].name);
+ writer.writeCellField(t, field, label, id);
CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
CPPUNIT_ASSERT(writer._wroteCellHeader);
} // for
@@ -259,7 +259,7 @@
// Create vertex fields.
void
pylith::meshio::TestDataWriterVTK::_createVertexFields(
- topology::Fields<topology::Mesh> >* fields) const
+ topology::Fields<topology::Field<topology::Mesh> >* fields) const
{ // _createVertexFields
CPPUNIT_ASSERT(0 != fields);
CPPUNIT_ASSERT(0 != _mesh);
@@ -268,25 +268,27 @@
try {
const int nfields = _data->numVertexFields;
- const ALE::Obj<SieveMesh>& sieveMesh = _mesh->sieveMesh();
+ const ALE::Obj<topology::Mesh::SieveMesh>& sieveMesh = _mesh->sieveMesh();
CPPUNIT_ASSERT(!sieveMesh.isNull());
- const ALE::Obj<label_sequence>& vertices = sieveMesh->depthStratum(0);
+ const ALE::Obj<topology::Mesh::SieveMesh::label_sequence>& vertices =
+ sieveMesh->depthStratum(0);
CPPUNIT_ASSERT(!vertices.isNull());
- const label_sequence::iterator verticesEnd = vertices->end();
+ const topology::Mesh::SieveMesh::label_sequence::iterator verticesEnd =
+ vertices->end();
// Set vertex fields
for (int i=0; i < nfields; ++i) {
- const char* name = _data->VertexFieldsInfo[i].label;
+ const char* name = _data->vertexFieldsInfo[i].name;
const int fiberDim = _data->vertexFieldsInfo[i].fiber_dim;
- fields->add(name);
+ fields->add(name, name);
topology::Field<topology::Mesh>& field = fields->get(name);
field.newSection(topology::FieldBase::VERTICES_FIELD, fiberDim);
field.allocate();
- const ALE::Obj<RealSection>& section = field.section();
+ const ALE::Obj<topology::Mesh::RealSection>& section = field.section();
CPPUNIT_ASSERT(!section.isNull());
int ipt = 0;
- for (label_sequence::iterator v_iter=vertices->begin();
+ for (topology::Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
v_iter != verticesEnd;
++v_iter, ++ipt) {
const double* values = &_data->vertexFields[i][ipt*fiberDim];
@@ -303,7 +305,7 @@
// Create cell fields.
void
pylith::meshio::TestDataWriterVTK::_createCellFields(
- topology::Fields<topology::Mesh> >* fields) const
+ topology::Fields<topology::Field<topology::Mesh> >* fields) const
{ // _createCellFields
CPPUNIT_ASSERT(0 != fields);
CPPUNIT_ASSERT(0 != _mesh);
@@ -312,27 +314,32 @@
try {
const int nfields = _data->numCellFields;
- const ALE::Obj<Mesh::label_sequence>& cells =
+ const ALE::Obj<topology::Mesh::SieveMesh>& sieveMesh = _mesh->sieveMesh();
+ CPPUNIT_ASSERT(!sieveMesh.isNull());
+ const ALE::Obj<topology::Mesh::SieveMesh::label_sequence>& cells =
(0 == _data->cellsLabel) ?
- _mesh->depthStratum(1) :
- _mesh->getLabelStratum(_data->cellsLabel, _data->labelId);
- const Mesh::label_sequence::iterator cellsEnd = cells->end();
+ sieveMesh->depthStratum(1) :
+ sieveMesh->getLabelStratum(_data->cellsLabel, _data->labelId);
+ const topology::Mesh::SieveMesh::label_sequence::iterator cellsEnd =
+ cells->end();
// Set cell fields
- fields->resize(nfields);
for (int i=0; i < nfields; ++i) {
- (*fields)[i] = new real_section_type(_mesh->comm(), _mesh->debug());
- (*fields)[i]->setChart(_mesh->getSieve()->getChart());
+ const char* name = _data->cellFieldsInfo[i].name;
const int fiberDim = _data->cellFieldsInfo[i].fiber_dim;
- (*fields)[i]->setFiberDimension(cells, fiberDim);
- _mesh->allocate((*fields)[i]);
+ fields->add(name, name);
+ topology::Field<topology::Mesh>& field = fields->get(name);
+ field.newSection(topology::FieldBase::CELLS_FIELD, fiberDim);
+ field.allocate();
+ const ALE::Obj<topology::Mesh::RealSection>& section = field.section();
+ CPPUNIT_ASSERT(!section.isNull());
int icell = 0;
- for (Mesh::label_sequence::iterator c_iter=cells->begin();
+ for (topology::Mesh::SieveMesh::label_sequence::iterator c_iter=cells->begin();
c_iter != cellsEnd;
++c_iter, ++icell) {
const double* values = &_data->cellFields[i][icell*fiberDim];
- (*fields)[i]->updatePoint(*c_iter, values);
+ section->updatePoint(*c_iter, values);
} // for
CPPUNIT_ASSERT_EQUAL(_data->numCells, icell);
} // for
Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.hh 2009-04-07 22:50:02 UTC (rev 14617)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/meshio/TestDataWriterVTK.hh 2009-04-07 23:07:21 UTC (rev 14618)
@@ -21,10 +21,8 @@
#if !defined(pylith_meshio_testdatawritervtk_hh)
#define pylith_meshio_testdatawritervtk_hh
-#include "pylith/utils/sievetypes.hh" // USES PETSc Mesh
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, Field
-#include <vector> // USES std::vector
-
#include <cppunit/extensions/HelperMacros.h>
/// Namespace for pylith package
@@ -113,14 +111,14 @@
* @param fields Vertex fields.
*/
void
- _createVertexFields(topology::Fields<topology::Mesh>* fields) const;
+ _createVertexFields(topology::Fields<topology::Field<topology::Mesh> >* fields) const;
/** Create cell fields.
*
* @param fields Cell fields.
*/
void
- _createCellFields(topology::Fields<topology::Mesh>* fields) const;
+ _createCellFields(topology::Fields<topology::Field<topology::Mesh> >* fields) const;
}; // class TestDataWriterVTK
More information about the CIG-COMMITS
mailing list