[cig-commits] r21807 - short/3D/PyLith/trunk/unittests/libtests/meshio

brad at geodynamics.org brad at geodynamics.org
Wed Apr 10 17:57:27 PDT 2013


Author: brad
Date: 2013-04-10 17:57:27 -0700 (Wed, 10 Apr 2013)
New Revision: 21807

Modified:
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterBCMesh.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterSubMesh.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMeshCases.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMeshCases.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMeshCases.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestOutputManager.cc
Log:
Code cleanup.

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterBCMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterBCMesh.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterBCMesh.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -27,6 +27,8 @@
 #include "pylith/topology/Mesh.hh" // USES Mesh
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/Stratum.hh" // USES Stratum
+#include "pylith/topology/VisitorMesh.hh" // USES VecVisitorMesh
 #include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
 #include "pylith/meshio/DataWriter.hh" // USES DataWriter
 #include "pylith/faults/FaultCohesiveKin.hh" // USES FaultCohesiveKin
@@ -41,10 +43,14 @@
 void
 pylith::meshio::TestDataWriterBCMesh::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   _data = 0;
   _mesh = 0;
   _submesh = 0;
   _flipFault = false;
+
+  PYLITH_METHOD_END;
 } // setUp
 
 // ----------------------------------------------------------------------
@@ -52,9 +58,13 @@
 void
 pylith::meshio::TestDataWriterBCMesh::tearDown(void)
 { // tearDown
+  PYLITH_METHOD_BEGIN;
+
   delete _data; _data = 0;
   delete _mesh; _mesh = 0;
   delete _submesh; _submesh = 0;
+
+  PYLITH_METHOD_END;
 } // tearDown
 
 // ----------------------------------------------------------------------
@@ -62,9 +72,11 @@
 void
 pylith::meshio::TestDataWriterBCMesh::_initialize(void)
 { // _initialize
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
-  delete _mesh; _mesh = new topology::Mesh;
+  CPPUNIT_ASSERT(_data);
+
+  delete _mesh; _mesh = new topology::Mesh;CPPUNIT_ASSERT(_mesh);
   MeshIOAscii iohandler;
   iohandler.filename(_data->meshFilename);
   iohandler.read(_mesh);
@@ -73,133 +85,116 @@
   cs.setSpaceDim(_mesh->dimension());
   _mesh->coordsys(&cs);
 
-  if (0 != _data->faultLabel) {
+  if (_data->faultLabel) {
     faults::FaultCohesiveKin fault;
-    int firstFaultVertex    = 0;
-    int firstLagrangeVertex = _mesh->sieveMesh()->getIntSection(_data->faultLabel)->size();
-    int firstFaultCell      = _mesh->sieveMesh()->getIntSection(_data->faultLabel)->size();
-    if (fault.useLagrangeConstraints()) {
-      firstFaultCell += _mesh->sieveMesh()->getIntSection(_data->faultLabel)->size();
-    }
+    const bool useLagrangeConstraints = true;
+    PetscInt firstFaultVertex = 0;
+    PetscInt firstLagrangeVertex = 0, firstFaultCell = 0;
+    PetscErrorCode err = DMPlexGetStratumSize(_mesh->dmMesh(), _data->faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+    firstFaultCell = firstLagrangeVertex;
+    if (useLagrangeConstraints) {
+      firstFaultCell += firstLagrangeVertex;
+    } // if
     fault.label(_data->faultLabel);
     fault.id(_data->faultId);
     fault.adjustTopology(_mesh, &firstFaultVertex, &firstLagrangeVertex, &firstFaultCell, _flipFault);
   } // if
 
-  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");
+  delete _submesh; _submesh = new topology::SubMesh(*_mesh, _data->bcLabel);CPPUNIT_ASSERT(_submesh);
+
+  PYLITH_METHOD_END;
 } // _initialize
 
 // ----------------------------------------------------------------------
 // Create vertex fields.
 void
-pylith::meshio::TestDataWriterBCMesh::_createVertexFields(
-	    topology::Fields<SubMeshField>* fields) const
+pylith::meshio::TestDataWriterBCMesh::_createVertexFields(topology::Fields<SubMeshField>* fields) const
 { // _createVertexFields
-  CPPUNIT_ASSERT(0 != fields);
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
-  try {
-    const int nfields = _data->numVertexFields;
+  CPPUNIT_ASSERT(fields);
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
 
-    DM dmMesh = _submesh->dmMesh();
-    PetscInt       vStart, vEnd;
-    PetscErrorCode err;
+  const int nfields = _data->numVertexFields;
 
-    CPPUNIT_ASSERT(dmMesh);
-    err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  PetscDM dmMesh = _submesh->dmMesh();CPPUNIT_ASSERT(dmMesh);  
+  topology::Stratum verticesStratum(dmMesh, topology::Stratum::DEPTH, 0);
+  const PetscInt vStart = verticesStratum.begin();
+  const PetscInt vEnd = verticesStratum.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);
 
-    // 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);
-
-      PetscSection section = field.petscSection();
-      Vec          vec     = field.localVector();
-      PetscScalar *a;
-      CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-      err = VecGetArray(vec, &a);CHECK_PETSC_ERROR(err);
-      for(PetscInt v = vStart; v < vEnd; ++v) {
-        PetscInt dof, off;
-
-        err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
-        err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
-        for(PetscInt d = 0; d < dof; ++d) {
-          a[off+d] = _data->vertexFields[i][(v-vStart)*dof+d];
-        }
+    topology::VecVisitorMesh fieldVisitor(field);
+    PetscScalar* fieldArray = fieldVisitor.localArray();CPPUNIT_ASSERT(fieldArray);
+    
+    for(PetscInt v = vStart, index=0; v < vEnd; ++v) {
+      const PetscInt off = fieldVisitor.sectionOffset(v);
+      CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+      for(PetscInt d = 0; d < fiberDim; ++d, ++index) {
+	fieldArray[off+d] = _data->vertexFields[i][index];
       } // for
-      err = VecRestoreArray(vec, &a);CHECK_PETSC_ERROR(err);
-      CPPUNIT_ASSERT_EQUAL(_data->numVertices, vEnd-vStart);
     } // for
-  } catch (const ALE::Exception& err) {
-    throw std::runtime_error(err.msg());
-  } // catch
+    CPPUNIT_ASSERT_EQUAL(_data->numVertices, vEnd-vStart);
+  } // for
+
+  PYLITH_METHOD_END;
 } // _createVertexFields
 
 // ----------------------------------------------------------------------
 // Create cell fields.
 void
-pylith::meshio::TestDataWriterBCMesh::_createCellFields(
-	     topology::Fields<SubMeshField>* fields) const
+pylith::meshio::TestDataWriterBCMesh::_createCellFields(topology::Fields<SubMeshField>* fields) const
 { // _createCellFields
-  CPPUNIT_ASSERT(0 != fields);
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
-  try {
-    const int nfields = _data->numCellFields;
+  CPPUNIT_ASSERT(fields);
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
 
-    DM dmMesh = _submesh->dmMesh();
-    PetscInt       cStart, cEnd;
-    const PetscInt height = 1;
-    PetscErrorCode err;
+  const int nfields = _data->numCellFields;
 
-    CPPUNIT_ASSERT(dmMesh);
-    err = DMPlexGetHeightStratum(dmMesh, height, &cStart, &cEnd);CHECK_PETSC_ERROR(err);
+  const int height = 1;
+  PetscDM dmMesh = _submesh->dmMesh();CPPUNIT_ASSERT(dmMesh);  
+  topology::Stratum cellsStratum(dmMesh, topology::Stratum::HEIGHT, height);
+  const PetscInt cStart = cellsStratum.begin();
+  const PetscInt cEnd = cellsStratum.end();
+  PetscInt numCells = cellsStratum.size();
 
-    // 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, height);
-      field.allocate();
-      field.vectorFieldType(_data->cellFieldsInfo[i].field_type);
-
-      PetscSection section = field.petscSection();
-      Vec          vec     = field.localVector();
-      PetscScalar *a;
-      CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-      err = VecGetArray(vec, &a);CHECK_PETSC_ERROR(err);
-      for(PetscInt c = cStart; c < cEnd; ++c) {
-        PetscInt dof, off;
-
-        err = PetscSectionGetDof(section, c, &dof);CHECK_PETSC_ERROR(err);
-        err = PetscSectionGetOffset(section, c, &off);CHECK_PETSC_ERROR(err);
-        for(PetscInt d = 0; d < dof; ++d) {
-          a[off+d] = _data->cellFields[i][(c-cStart)*dof+d];
-        }
+  // 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, height);
+    field.allocate();
+    field.vectorFieldType(_data->cellFieldsInfo[i].field_type);
+    
+    topology::VecVisitorMesh fieldVisitor(field);
+    PetscScalar* fieldArray = fieldVisitor.localArray();CPPUNIT_ASSERT(fieldArray);
+    
+    for(PetscInt c = 0, index = 0; c < numCells; ++c) {
+      const PetscInt cell = c+cStart;
+      
+      const PetscInt off = fieldVisitor.sectionOffset(cell);
+      CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(cell));
+      for(PetscInt d = 0; d < fiberDim; ++d, ++index) {
+	fieldArray[off+d] = _data->cellFields[i][index];
       } // for
-      err = VecRestoreArray(vec, &a);CHECK_PETSC_ERROR(err);
-      CPPUNIT_ASSERT_EQUAL(_data->numCells, cEnd-cStart);
     } // for
-  } catch (const ALE::Exception& err) {
-    throw std::runtime_error(err.msg());
-  } // catch
+    CPPUNIT_ASSERT_EQUAL(_data->numCells, numCells);
+  } // for    
+
+  PYLITH_METHOD_END;
 } // _createCellFields
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterSubMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterSubMesh.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterSubMesh.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -27,6 +27,8 @@
 #include "pylith/topology/Mesh.hh" // USES Mesh
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/Stratum.hh" // USES Stratum
+#include "pylith/topology/VisitorMesh.hh" // USES VecVisitorMesh
 #include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
 #include "pylith/meshio/DataWriter.hh" // USES DataWriter
 #include "pylith/faults/FaultCohesiveKin.hh" // USES FaultCohesiveKin
@@ -42,10 +44,14 @@
 void
 pylith::meshio::TestDataWriterSubMesh::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   _data = 0;
   _mesh = 0;
   _submesh = 0;
   _flipFault = false;
+
+  PYLITH_METHOD_END;
 } // setUp
 
 // ----------------------------------------------------------------------
@@ -53,9 +59,13 @@
 void
 pylith::meshio::TestDataWriterSubMesh::tearDown(void)
 { // tearDown
+  PYLITH_METHOD_BEGIN;
+
   delete _data; _data = 0;
   delete _mesh; _mesh = 0;
   delete _submesh; _submesh = 0;
+
+  PYLITH_METHOD_END;
 } // tearDown
 
 // ----------------------------------------------------------------------
@@ -63,9 +73,11 @@
 void
 pylith::meshio::TestDataWriterSubMesh::_initialize(void)
 { // _initialize
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
-  delete _mesh; _mesh = new topology::Mesh;
+  CPPUNIT_ASSERT(_data);
+
+  delete _mesh; _mesh = new topology::Mesh;CPPUNIT_ASSERT(_mesh);
   MeshIOAscii iohandler;
   iohandler.filename(_data->meshFilename);
   iohandler.read(_mesh);
@@ -74,149 +86,116 @@
   cs.setSpaceDim(_mesh->dimension());
   _mesh->coordsys(&cs);
 
-  if (0 != _data->faultLabel) {
+  if (_data->faultLabel) {
     faults::FaultCohesiveKin fault;
-    int firstFaultVertex    = 0;
-    int firstLagrangeVertex = _mesh->sieveMesh()->getIntSection(_data->faultLabel)->size();
-    int firstFaultCell      = _mesh->sieveMesh()->getIntSection(_data->faultLabel)->size();
-    if (fault.useLagrangeConstraints()) {
-      firstFaultCell += _mesh->sieveMesh()->getIntSection(_data->faultLabel)->size();
-    }
+    const bool useLagrangeConstraints = true;
+    PetscInt firstFaultVertex = 0;
+    PetscInt firstLagrangeVertex = 0, firstFaultCell = 0;
+    PetscErrorCode err = DMPlexGetStratumSize(_mesh->dmMesh(), _data->faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+    firstFaultCell = firstLagrangeVertex;
+    if (useLagrangeConstraints) {
+      firstFaultCell += firstLagrangeVertex;
+    } // if
     fault.label(_data->faultLabel);
     fault.id(_data->faultId);
     fault.adjustTopology(_mesh, &firstFaultVertex, &firstLagrangeVertex, &firstFaultCell, _flipFault);
   } // if
 
-  CPPUNIT_ASSERT(0 != _data->bcLabel);
-  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");
+  CPPUNIT_ASSERT(_data->bcLabel);
+  delete _submesh; _submesh = new topology::SubMesh(*_mesh, _data->bcLabel);CPPUNIT_ASSERT(_submesh);
+
+  PYLITH_METHOD_END;
 } // _initialize
 
 // ----------------------------------------------------------------------
 // Create vertex fields.
 void
-pylith::meshio::TestDataWriterSubMesh::_createVertexFields(
-	    topology::Fields<MeshField>* fields) const
+pylith::meshio::TestDataWriterSubMesh::_createVertexFields(topology::Fields<MeshField>* fields) const
 { // _createVertexFields
-  CPPUNIT_ASSERT(0 != fields);
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
-  try {
-    const int nfields = _data->numVertexFields;
+  CPPUNIT_ASSERT(fields);
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
 
-    DM dmMesh    = _mesh->dmMesh();
-    PetscInt       vStart, vEnd;
-    PetscErrorCode err;
+  const int nfields = _data->numVertexFields;
 
-    CPPUNIT_ASSERT(dmMesh);
-    err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-#if 0
-    DM dmSubmesh = _submesh->dmMesh();
-    IS subpointIS;
-    err = DMPlexCreateSubpointIS(dmSubmesh, &subpointIS);CHECK_PETSC_ERROR(err);
-    err = ISGetIndices(subpointIS, &ind);CHECK_PETSC_ERROR(err);
-    err = ISRestoreIndices(subpointIS, &ind);CHECK_PETSC_ERROR(err);
-    err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
-#endif
+  PetscDM dmMesh = _mesh->dmMesh();CPPUNIT_ASSERT(dmMesh);  
+  topology::Stratum verticesStratum(dmMesh, topology::Stratum::DEPTH, 0);
+  const PetscInt vStart = verticesStratum.begin();
+  const PetscInt vEnd = verticesStratum.end();
 
-    // Set vertex fields
-    for (int i=0; i < nfields; ++i) {
-      const PetscInt *ind;
-      const char* name = _data->vertexFieldsInfo[i].name;
-      const int fiberDim = _data->vertexFieldsInfo[i].fiber_dim;
-      fields->add(name, name);
-      MeshField& field = fields->get(name);
-      field.newSection(topology::FieldBase::VERTICES_FIELD, fiberDim);
-      field.allocate();
-      field.vectorFieldType(_data->vertexFieldsInfo[i].field_type);
-
-      PetscSection section = field.petscSection();
-      Vec          vec     = field.localVector();
-      PetscScalar *a;
-      CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-      err = VecGetArray(vec, &a);CHECK_PETSC_ERROR(err);
-      for(PetscInt v = vStart; v < vEnd; ++v) {
-        PetscInt dof, off;
-
-        err = 
-        err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
-        err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
-        for(PetscInt d = 0; d < dof; ++d) {
-          a[off+d] = _data->vertexFields[i][(v-vStart)*dof+d];
-        }
+  // Set vertex fields over entire mesh.
+  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);
+    MeshField& field = fields->get(name);
+    field.newSection(topology::FieldBase::VERTICES_FIELD, fiberDim);
+    field.allocate();
+    field.vectorFieldType(_data->vertexFieldsInfo[i].field_type);
+    
+    topology::VecVisitorMesh fieldVisitor(field);
+    PetscScalar* fieldArray = fieldVisitor.localArray();CPPUNIT_ASSERT(fieldArray);
+    
+    for(PetscInt v = vStart, index=0; v < vEnd; ++v) {
+      const PetscInt off = fieldVisitor.sectionOffset(v);
+      CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+      for(PetscInt d = 0; d < fiberDim; ++d, ++index) {
+	fieldArray[off+d] = _data->vertexFields[i][index];
       } // for
-      err = VecRestoreArray(vec, &a);CHECK_PETSC_ERROR(err);
-      CPPUNIT_ASSERT_EQUAL(_data->numVertices, vEnd-vStart);
     } // for
-  } catch (const ALE::Exception& err) {
-    throw std::runtime_error(err.msg());
-  } catch (...) {
-    throw;
-  } // catch
+    CPPUNIT_ASSERT_EQUAL(_data->numVertices, vEnd-vStart);
+  } // for
+
+  PYLITH_METHOD_END;
 } // _createVertexFields
 
 // ----------------------------------------------------------------------
 // Create cell fields.
 void
-pylith::meshio::TestDataWriterSubMesh::_createCellFields(
-	     topology::Fields<SubMeshField>* fields) const
+pylith::meshio::TestDataWriterSubMesh::_createCellFields(topology::Fields<SubMeshField>* fields) const
 { // _createCellFields
-  CPPUNIT_ASSERT(0 != fields);
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
-  try {
-    const int nfields = _data->numCellFields;
+  CPPUNIT_ASSERT(fields);
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
 
-    DM              dmMesh = _submesh->dmMesh();
-    PetscInt        cStart, cEnd, numCells;
-    PetscErrorCode  err;
+  const int nfields = _data->numCellFields;
 
-    CPPUNIT_ASSERT(dmMesh);
-    err = DMPlexGetHeightStratum(dmMesh, 1, &cStart, &cEnd);CHECK_PETSC_ERROR(err);
-    numCells = cEnd - cStart;
+  PetscDM dmMesh = _submesh->dmMesh();CPPUNIT_ASSERT(dmMesh);
+  topology::Stratum cellsStratum(dmMesh, topology::Stratum::HEIGHT, 1);
+  const PetscInt cStart = cellsStratum.begin();
+  const PetscInt cEnd = cellsStratum.end();
+  PetscInt numCells = cellsStratum.size();
 
-    // 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, 1);
-      field.allocate();
-      field.vectorFieldType(_data->cellFieldsInfo[i].field_type);
+  // 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, 1);
+    field.allocate();
+    field.vectorFieldType(_data->cellFieldsInfo[i].field_type);
 
-      PetscSection section = field.petscSection();
-      Vec          vec     = field.localVector();
-      PetscScalar *a;
-      CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-      err = VecGetArray(vec, &a);CHECK_PETSC_ERROR(err);
-      for(PetscInt c = 0; c < numCells; ++c) {
-        const PetscInt cell = c+cStart;
-        PetscInt       dof, off;
+    topology::VecVisitorMesh fieldVisitor(field);
+    PetscScalar* fieldArray = fieldVisitor.localArray();CPPUNIT_ASSERT(fieldArray);
+    
+    for(PetscInt c = 0, index = 0; c < numCells; ++c) {
+      const PetscInt cell = c+cStart;
 
-        err = PetscSectionGetDof(section, cell, &dof);CHECK_PETSC_ERROR(err);
-        err = PetscSectionGetOffset(section, cell, &off);CHECK_PETSC_ERROR(err);
-        for(PetscInt d = 0; d < dof; ++d) {
-          a[off+d] = _data->cellFields[i][c*dof+d];
-        }
+      const PetscInt off = fieldVisitor.sectionOffset(cell);
+      CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(cell));
+      for(PetscInt d = 0; d < fiberDim; ++d, ++index) {
+	fieldArray[off+d] = _data->cellFields[i][index];
       } // for
-      err = VecRestoreArray(vec, &a);CHECK_PETSC_ERROR(err);
-      CPPUNIT_ASSERT_EQUAL(_data->numCells, numCells);
     } // for
-  } catch (const ALE::Exception& err) {
-    throw std::runtime_error(err.msg());
-  } catch (...) {
-    throw;
-  } // catch
+    CPPUNIT_ASSERT_EQUAL(_data->numCells, numCells);
+  } // for
+
+  PYLITH_METHOD_END;
 } // _createCellFields
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -40,7 +40,11 @@
 void
 pylith::meshio::TestDataWriterVTKBCMesh::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterBCMesh::setUp();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 // ----------------------------------------------------------------------
@@ -48,7 +52,11 @@
 void
 pylith::meshio::TestDataWriterVTKBCMesh::tearDown(void)
 { // tearDown
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterBCMesh::tearDown();
+
+  PYLITH_METHOD_END;
 } // tearDown
 
 // ----------------------------------------------------------------------
@@ -56,11 +64,15 @@
 void
 pylith::meshio::TestDataWriterVTKBCMesh::testConstructor(void)
 { // testConstructor
+  PYLITH_METHOD_BEGIN;
+
   DataWriterVTK<topology::SubMesh, SubMeshField> writer;
 
-  CPPUNIT_ASSERT(0 == writer._viewer);
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT(!writer._viewer);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
+
+  PYLITH_METHOD_END;
 } // testConstructor
 
 // ----------------------------------------------------------------------
@@ -68,20 +80,22 @@
 void
 pylith::meshio::TestDataWriterVTKBCMesh::testTimeStep(void)
 { // testTimeStep
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
+
   DataWriterVTK<topology::SubMesh, SubMeshField> writer;
 
   writer.filename(_data->timestepFilename);
   writer.timeFormat(_data->timeFormat);
 
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
 
   const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
-  if (0 == _data->cellsLabel) {
+  if (!_data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
     writer.openTimeStep(t, *_submesh);
   } else {
@@ -91,17 +105,18 @@
     writer.openTimeStep(t, *_submesh, label, id);
   } // else
 
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
 
   writer.closeTimeStep();
   writer.close();
 
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
 
-  // We do not create empty VTK files anymore
-  //checkFile(_data->timestepFilename, t, _data->timeFormat);
+  // Nothing to check. We do not create VTK files without fields anymore.
+
+  PYLITH_METHOD_END;
 } // testTimeStep
 
 // ----------------------------------------------------------------------
@@ -109,9 +124,11 @@
 void
 pylith::meshio::TestDataWriterVTKBCMesh::testWriteVertexField(void)
 { // testWriteVertexField
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
+
   DataWriterVTK<topology::SubMesh, SubMeshField> writer;
 
   topology::Fields<SubMeshField> vertexFields(*_submesh);
@@ -124,7 +141,7 @@
 
   const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
-  if (0 == _data->cellsLabel) {
+  if (!_data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
     writer.openTimeStep(t, *_submesh);
   } else {
@@ -137,14 +154,16 @@
     SubMeshField& field = vertexFields.get(_data->vertexFieldsInfo[i].name);
     writer.writeVertexField(t, field, *_submesh);
     CPPUNIT_ASSERT(writer._wroteVertexHeader);
-    CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+    CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
   } // for
   writer.closeTimeStep();
   writer.close();
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
   
   checkFile(_data->vertexFilename, t, _data->timeFormat);
+
+  PYLITH_METHOD_END;
 } // testWriteVertexField
 
 // ----------------------------------------------------------------------
@@ -152,9 +171,11 @@
 void
 pylith::meshio::TestDataWriterVTKBCMesh::testWriteCellField(void)
 { // testWriteCellField
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
+
   DataWriterVTK<topology::SubMesh, SubMeshField> writer;
 
   topology::Fields<SubMeshField> cellFields(*_submesh);
@@ -167,13 +188,13 @@
 
   const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
-  if (0 == _data->cellsLabel) {
+  if (!_data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
     writer.openTimeStep(t, *_submesh);
     for (int i=0; i < nfields; ++i) {
       SubMeshField& field = cellFields.get(_data->cellFieldsInfo[i].name);
       writer.writeCellField(t, field);
-      CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+      CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
       CPPUNIT_ASSERT(writer._wroteCellHeader);
     } // for
   } else {
@@ -184,16 +205,18 @@
     for (int i=0; i < nfields; ++i) {
       SubMeshField& field = cellFields.get(_data->cellFieldsInfo[i].name);
       writer.writeCellField(t, field, label, id);
-      CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+      CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
       CPPUNIT_ASSERT(writer._wroteCellHeader);
     } // for
   } // else
   writer.closeTimeStep();
   writer.close();
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
   
   checkFile(_data->cellFilename, t, _data->timeFormat);
+
+  PYLITH_METHOD_END;
 } // testWriteCellField
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMeshCases.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMeshCases.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKBCMeshCases.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -20,6 +20,8 @@
 
 #include "TestDataWriterVTKBCMeshCases.hh" // Implementation of class methods
 
+#include "pylith/utils/petscerror.h" // USES PYLITH_METHOD_BEGIN/END
+
 #include "data/DataWriterVTKDataBCMeshTri3.hh"
 #include "data/DataWriterVTKDataBCMeshQuad4.hh"
 #include "data/DataWriterVTKDataBCMeshTet4.hh"
@@ -38,10 +40,14 @@
 void
 pylith::meshio::TestDataWriterVTKBCMeshTri3::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKBCMesh::setUp();
   _data = new DataWriterVTKDataBCMeshTri3;
   _flipFault = true;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -50,10 +56,14 @@
 void
 pylith::meshio::TestDataWriterVTKBCMeshQuad4::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKBCMesh::setUp();
   _data = new DataWriterVTKDataBCMeshQuad4;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -62,10 +72,14 @@
 void
 pylith::meshio::TestDataWriterVTKBCMeshTet4::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKBCMesh::setUp();
   _data = new DataWriterVTKDataBCMeshTet4;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -74,10 +88,14 @@
 void
 pylith::meshio::TestDataWriterVTKBCMeshHex8::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKBCMesh::setUp();
   _data = new DataWriterVTKDataBCMeshHex8;
   _flipFault = true;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMeshCases.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMeshCases.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMeshCases.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -20,6 +20,8 @@
 
 #include "TestDataWriterVTKMeshCases.hh" // Implementation of class methods
 
+#include "pylith/utils/petscerror.h" // USES PYLITH_METHOD_BEGIN/END
+
 #include "data/DataWriterVTKDataMeshLine2.hh" // USES DataWriterVTKDataMeshLine2
 #include "data/DataWriterVTKDataMeshTri3.hh" // USES DataWriterVTKDataMeshTri3
 #include "data/DataWriterVTKDataMeshQuad4.hh" // USES DataWriterVTKDataMeshQuad4
@@ -40,10 +42,14 @@
 void
 pylith::meshio::TestDataWriterVTKMeshLine2::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKMesh::setUp();
   _data = new DataWriterVTKDataMeshLine2;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -52,10 +58,14 @@
 void
 pylith::meshio::TestDataWriterVTKMeshTri3::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKMesh::setUp();
   _data = new DataWriterVTKDataMeshTri3;
   _flipFault = true;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -64,10 +74,14 @@
 void
 pylith::meshio::TestDataWriterVTKMeshQuad4::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKMesh::setUp();
   _data = new DataWriterVTKDataMeshQuad4;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -76,10 +90,14 @@
 void
 pylith::meshio::TestDataWriterVTKMeshTet4::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKMesh::setUp();
   _data = new DataWriterVTKDataMeshTet4;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -88,10 +106,14 @@
 void
 pylith::meshio::TestDataWriterVTKMeshHex8::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKMesh::setUp();
   _data = new DataWriterVTKDataMeshHex8;
   _flipFault = true;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -41,7 +41,11 @@
 void
 pylith::meshio::TestDataWriterVTKSubMesh::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterSubMesh::setUp();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 // ----------------------------------------------------------------------
@@ -49,7 +53,11 @@
 void
 pylith::meshio::TestDataWriterVTKSubMesh::tearDown(void)
 { // tearDown
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterSubMesh::tearDown();
+
+  PYLITH_METHOD_END;
 } // tearDown
 
 // ----------------------------------------------------------------------
@@ -57,11 +65,15 @@
 void
 pylith::meshio::TestDataWriterVTKSubMesh::testConstructor(void)
 { // testConstructor
+  PYLITH_METHOD_BEGIN;
+
   DataWriterVTK<topology::SubMesh, MeshField> writer;
 
-  CPPUNIT_ASSERT(0 == writer._viewer);
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT(!writer._viewer);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
+
+  PYLITH_METHOD_END;
 } // testConstructor
 
 // ----------------------------------------------------------------------
@@ -69,20 +81,22 @@
 void
 pylith::meshio::TestDataWriterVTKSubMesh::testTimeStep(void)
 { // testTimeStep
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
+
   DataWriterVTK<topology::SubMesh, MeshField> writer;
 
   writer.filename(_data->timestepFilename);
   writer.timeFormat(_data->timeFormat);
 
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
 
   const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
-  if (0 == _data->cellsLabel) {
+  if (!_data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
     writer.openTimeStep(t, *_submesh);
   } else {
@@ -92,17 +106,18 @@
     writer.openTimeStep(t, *_submesh, label, id);
   } // else
 
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
 
   writer.closeTimeStep();
   writer.close();
 
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
 
-  // We do not create empty VTK files anymore
-  //checkFile(_data->timestepFilename, t, _data->timeFormat);
+  // Nothing to check. We do not create VTK files without fields anymore.
+
+  PYLITH_METHOD_END;
 } // testTimeStep
 
 // ----------------------------------------------------------------------
@@ -110,9 +125,11 @@
 void
 pylith::meshio::TestDataWriterVTKSubMesh::testWriteVertexField(void)
 { // testWriteVertexField
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
+
   DataWriterVTK<topology::SubMesh, MeshField> writer;
 
   topology::Fields<MeshField> vertexFields(*_mesh);
@@ -125,7 +142,7 @@
 
   const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
-  if (0 == _data->cellsLabel) {
+  if (!_data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
     writer.openTimeStep(t, *_submesh);
   } else {
@@ -138,14 +155,16 @@
     MeshField& field = vertexFields.get(_data->vertexFieldsInfo[i].name);
     writer.writeVertexField(t, field, *_submesh);
     CPPUNIT_ASSERT(writer._wroteVertexHeader);
-    CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+    CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
   } // for
   writer.closeTimeStep();
   writer.close();
-  CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
   
   checkFile(_data->vertexFilename, t, _data->timeFormat);
+
+  PYLITH_METHOD_END;
 } // testWriteVertexField
 
 // ----------------------------------------------------------------------
@@ -153,9 +172,11 @@
 void
 pylith::meshio::TestDataWriterVTKSubMesh::testWriteCellField(void)
 { // testWriteCellField
-  CPPUNIT_ASSERT(0 != _mesh);
-  CPPUNIT_ASSERT(0 != _data);
+  PYLITH_METHOD_BEGIN;
 
+  CPPUNIT_ASSERT(_mesh);
+  CPPUNIT_ASSERT(_data);
+
   DataWriterVTK<topology::SubMesh, SubMeshField> writer;
 
   topology::Fields<SubMeshField> cellFields(*_submesh);
@@ -168,13 +189,13 @@
 
   const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
-  if (0 == _data->cellsLabel) {
+  if (!_data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
     writer.openTimeStep(t, *_submesh);
     for (int i=0; i < nfields; ++i) {
       SubMeshField& field = cellFields.get(_data->cellFieldsInfo[i].name);
       writer.writeCellField(t, field);
-      CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+      CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
       CPPUNIT_ASSERT(writer._wroteCellHeader);
     } // for
   } else {
@@ -185,16 +206,18 @@
     for (int i=0; i < nfields; ++i) {
       SubMeshField& field = cellFields.get(_data->cellFieldsInfo[i].name);
       writer.writeCellField(t, field, label, id);
-      CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
+      CPPUNIT_ASSERT_EQUAL(false, writer._wroteVertexHeader);
       CPPUNIT_ASSERT(writer._wroteCellHeader);
     } // for
   } // else
   writer.closeTimeStep();
   writer.close();
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
-  CPPUNIT_ASSERT(false == writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
+  CPPUNIT_ASSERT_EQUAL(false, writer._wroteCellHeader);
   
   checkFile(_data->cellFilename, t, _data->timeFormat);
+
+  PYLITH_METHOD_END;
 } // testWriteCellField
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMeshCases.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMeshCases.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKSubMeshCases.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -20,6 +20,8 @@
 
 #include "TestDataWriterVTKSubMeshCases.hh" // Implementation of class methods
 
+#include "pylith/utils/petscerror.h" // USES PYLITH_METHOD_BEGIN/END
+
 #include "data/DataWriterVTKDataSubMeshLine2.hh"
 #include "data/DataWriterVTKDataSubMeshTri3.hh"
 #include "data/DataWriterVTKDataSubMeshQuad4.hh"
@@ -40,10 +42,14 @@
 void
 pylith::meshio::TestDataWriterVTKSubMeshLine2::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKSubMesh::setUp();
   _data = new DataWriterVTKDataSubMeshLine2;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -52,10 +58,14 @@
 void
 pylith::meshio::TestDataWriterVTKSubMeshTri3::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKSubMesh::setUp();
   _data = new DataWriterVTKDataSubMeshTri3;
   _flipFault = true;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -64,10 +74,14 @@
 void
 pylith::meshio::TestDataWriterVTKSubMeshQuad4::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKSubMesh::setUp();
   _data = new DataWriterVTKDataSubMeshQuad4;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -76,10 +90,14 @@
 void
 pylith::meshio::TestDataWriterVTKSubMeshTet4::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKSubMesh::setUp();
   _data = new DataWriterVTKDataSubMeshTet4;
   _flipFault = false;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 
@@ -88,10 +106,14 @@
 void
 pylith::meshio::TestDataWriterVTKSubMeshHex8::setUp(void)
 { // setUp
+  PYLITH_METHOD_BEGIN;
+
   TestDataWriterVTKSubMesh::setUp();
   _data = new DataWriterVTKDataSubMeshHex8;
   _flipFault = true;
   _initialize();
+
+  PYLITH_METHOD_END;
 } // setUp
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestOutputManager.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestOutputManager.cc	2013-04-11 00:02:17 UTC (rev 21806)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestOutputManager.cc	2013-04-11 00:57:27 UTC (rev 21807)
@@ -40,9 +40,7 @@
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::meshio::TestOutputManager );
 
-// ----------------------------------------------------------------------
-typedef pylith::topology::Mesh::SieveMesh SieveMesh;
-typedef pylith::topology::Mesh::RealSection RealSection;
+ // ----------------------------------------------------------------------
 typedef pylith::topology::Field<pylith::topology::Mesh> MeshField;
 
 // ----------------------------------------------------------------------
@@ -50,7 +48,11 @@
 void
 pylith::meshio::TestOutputManager::testConstructor(void)
 { // testConstructor
+  PYLITH_METHOD_BEGIN;
+
   OutputManager<topology::Mesh, MeshField> manager;
+
+  PYLITH_METHOD_END;
 } // testConstructor
 
 // ----------------------------------------------------------------------
@@ -58,13 +60,17 @@
 void
 pylith::meshio::TestOutputManager::testCoordsys(void)
 { // testCoordsys
+  PYLITH_METHOD_BEGIN;
+
   OutputManager<topology::Mesh, MeshField> manager;
 
-  CPPUNIT_ASSERT(0 == manager._coordsys);
+  CPPUNIT_ASSERT(!manager._coordsys);
 
   spatialdata::geocoords::CSCart cs;
   manager.coordsys(&cs);
   CPPUNIT_ASSERT(0 != manager._coordsys);
+
+  PYLITH_METHOD_END;
 } // testCoordsys
 
 // ----------------------------------------------------------------------
@@ -72,13 +78,17 @@
 void
 pylith::meshio::TestOutputManager::testWriter(void)
 { // testWriter
+  PYLITH_METHOD_BEGIN;
+
   OutputManager<topology::Mesh, MeshField> manager;
 
-  CPPUNIT_ASSERT(0 == manager._writer);
+  CPPUNIT_ASSERT(!manager._writer);
 
   DataWriterVTK<topology::Mesh, MeshField> writer;
   manager.writer(&writer);
-  CPPUNIT_ASSERT(0 != manager._writer);
+  CPPUNIT_ASSERT(manager._writer);
+
+  PYLITH_METHOD_END;
 } // testWriter
 
 // ----------------------------------------------------------------------
@@ -86,15 +96,19 @@
 void
 pylith::meshio::TestOutputManager::testVertexFilter(void)
 { // testVertexFilter
+  PYLITH_METHOD_BEGIN;
+
   OutputManager<topology::Mesh, MeshField> manager;
 
-  CPPUNIT_ASSERT(0 == manager._vertexFilter);
-  CPPUNIT_ASSERT(0 == manager._cellFilter);
+  CPPUNIT_ASSERT(!manager._vertexFilter);
+  CPPUNIT_ASSERT(!manager._cellFilter);
 
   VertexFilterVecNorm<MeshField> filter;
   manager.vertexFilter(&filter);
-  CPPUNIT_ASSERT(0 != manager._vertexFilter);
-  CPPUNIT_ASSERT(0 == manager._cellFilter);
+  CPPUNIT_ASSERT(manager._vertexFilter);
+  CPPUNIT_ASSERT(!manager._cellFilter);
+
+  PYLITH_METHOD_END;
 } // testVertexFilter
 
 // ----------------------------------------------------------------------
@@ -102,15 +116,19 @@
 void
 pylith::meshio::TestOutputManager::testCellFilter(void)
 { // testCellFilter
+  PYLITH_METHOD_BEGIN;
+
   OutputManager<topology::Mesh, MeshField> manager;
 
-  CPPUNIT_ASSERT(0 == manager._vertexFilter);
-  CPPUNIT_ASSERT(0 == manager._cellFilter);
+  CPPUNIT_ASSERT(!manager._vertexFilter);
+  CPPUNIT_ASSERT(!manager._cellFilter);
 
   CellFilterAvg<topology::Mesh, MeshField> filter;
   manager.cellFilter(&filter);
-  CPPUNIT_ASSERT(0 != manager._cellFilter);
-  CPPUNIT_ASSERT(0 == manager._vertexFilter);
+  CPPUNIT_ASSERT(manager._cellFilter);
+  CPPUNIT_ASSERT(!manager._vertexFilter);
+
+  PYLITH_METHOD_END;
 } // testCellFilter
 
 // ----------------------------------------------------------------------
@@ -118,6 +136,8 @@
 void
 pylith::meshio::TestOutputManager::testOpenClose(void)
 { // testOpenClose
+  PYLITH_METHOD_BEGIN;
+
   OutputManager<topology::Mesh, MeshField> manager;
 
   topology::Mesh mesh;
@@ -135,6 +155,8 @@
 
   manager.open(mesh, numTimeSteps);
   manager.close();
+
+  PYLITH_METHOD_END;
 } // testOpenClose
 
 // ----------------------------------------------------------------------
@@ -142,6 +164,8 @@
 void
 pylith::meshio::TestOutputManager::testOpenCloseTimeStep(void)
 { // testOpenCloseTimeStep
+  PYLITH_METHOD_BEGIN;
+
   OutputManager<topology::Mesh, MeshField> manager;
 
   topology::Mesh mesh;
@@ -165,8 +189,9 @@
   manager.closeTimeStep();
   manager.close();
 
-  // We do not create empty VTK files anymore
-  //TestDataWriterVTK::checkFile(filenameRoot, t, timeFormat);
+  // Nothing to check. We do not create VTK files without fields anymore.
+
+  PYLITH_METHOD_END;
 } // testOpenCloseTimeStep
 
 // ----------------------------------------------------------------------
@@ -174,6 +199,8 @@
 void
 pylith::meshio::TestOutputManager::testAppendVertexField(void)
 { // testAppendVertexField
+  PYLITH_METHOD_BEGIN;
+
   const char* meshFilename = "data/tri3.mesh";
   const int fiberDim = 2;
   const int nvertices = 4;
@@ -194,34 +221,28 @@
   iohandler.read(&mesh);
 
   // Set vertex field
-  DM dmMesh = mesh.dmMesh();
-  PetscInt       vStart, vEnd;
-  PetscErrorCode err;
+  PetscDM dmMesh = mesh.dmMesh();CPPUNIT_ASSERT(dmMesh);  
+  topology::Stratum verticesStratum(dmMesh, topology::Stratum::DEPTH, 0);
+  const PetscInt vStart = verticesStratum.begin();
+  const PetscInt vEnd = verticesStratum.end();
 
-  CPPUNIT_ASSERT(dmMesh);
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
   MeshField field(mesh);
   field.newSection(topology::FieldBase::VERTICES_FIELD, fiberDim);
   field.allocate();
   field.label(label);
   field.vectorFieldType(fieldType);
   field.scale(scale);
-  PetscSection section = field.petscSection();
-  Vec          vec     = field.localVector();
-  PetscScalar *a;
-  CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-  err = VecGetArray(vec, &a);CHECK_PETSC_ERROR(err);
-  for(PetscInt v = vStart; v < vEnd; ++v) {
-    PetscInt dof, off;
 
-    err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
-    err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
-    for(PetscInt d = 0; d < dof; ++d) {
-      a[off+d] = fieldValues[(v-vStart)*dof+d]/scale;
-    }
+  topology::VecVisitorMesh fieldVisitor(field);
+  PetscScalar* fieldArray = fieldVisitor.localArray();CPPUNIT_ASSERT(fieldArray);
+    
+  for(PetscInt v = vStart, index=0; v < vEnd; ++v) {
+    const PetscInt off = fieldVisitor.sectionOffset(v);
+    CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+    for(PetscInt d = 0; d < fiberDim; ++d, ++index) {
+      fieldArray[off+d] = fieldValues[index]/scale;
+    } // for
   } // for
-  err = VecRestoreArray(vec, &a);CHECK_PETSC_ERROR(err);
   CPPUNIT_ASSERT_EQUAL(nvertices, vEnd-vStart);
 
   spatialdata::geocoords::CSCart cs;
@@ -257,6 +278,8 @@
   manager.close();
 
   TestDataWriterVTK::checkFile(filenameRootF, t, timeFormat);
+
+  PYLITH_METHOD_END;
 } // testAppendVertexField
 
 // ----------------------------------------------------------------------
@@ -264,6 +287,7 @@
 void
 pylith::meshio::TestOutputManager::testAppendCellField(void)
 { // testAppendCellField
+  PYLITH_METHOD_BEGIN;
 
   const char* meshFilename = "data/tri3.mesh";
   const int fiberDim = 2;
@@ -283,36 +307,31 @@
   iohandler.read(&mesh);
 
   // Set cell field
-  DM              dmMesh = mesh.dmMesh();
-  PetscInt        cStart, cEnd, numCells;
-  PetscErrorCode  err;
+  PetscDM dmMesh = mesh.dmMesh();CPPUNIT_ASSERT(dmMesh);  
+  topology::Stratum cellsStratum(dmMesh, topology::Stratum::HEIGHT, 0);
+  const PetscInt cStart = cellsStratum.begin();
+  const PetscInt cEnd = cellsStratum.end();
+  PetscInt numCells = cellsStratum.size();
 
-  CPPUNIT_ASSERT(dmMesh);
-  err = DMPlexGetHeightStratum(dmMesh, 0, &cStart, &cEnd);CHECK_PETSC_ERROR(err);
-  numCells = cEnd - cStart;
-
   MeshField field(mesh);
   field.newSection(topology::FieldBase::CELLS_FIELD, fiberDim);
   field.allocate();
   field.label(label);
   field.vectorFieldType(fieldType);
   field.scale(scale);
-  PetscSection section = field.petscSection();
-  Vec          vec     = field.localVector();
-  PetscScalar *a;
-  CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-  err = VecGetArray(vec, &a);CHECK_PETSC_ERROR(err);
-  for(PetscInt c = 0; c < numCells; ++c) {
+
+  topology::VecVisitorMesh fieldVisitor(field);
+  PetscScalar* fieldArray = fieldVisitor.localArray();CPPUNIT_ASSERT(fieldArray);
+    
+  for(PetscInt c = 0, index = 0; c < numCells; ++c) {
     const PetscInt cell = c+cStart;
-    PetscInt       dof, off;
-
-    err = PetscSectionGetDof(section, cell, &dof);CHECK_PETSC_ERROR(err);
-    err = PetscSectionGetOffset(section, cell, &off);CHECK_PETSC_ERROR(err);
-    for(PetscInt d = 0; d < dof; ++d) {
-      a[off+d] = fieldValues[c*dof+d]/scale;
-    }
+      
+    const PetscInt off = fieldVisitor.sectionOffset(cell);
+    CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(cell));
+    for(PetscInt d = 0; d < fiberDim; ++d, ++index) {
+      fieldArray[off+d] = fieldValues[index]/scale;
+    } // for
   } // for
-  err = VecRestoreArray(vec, &a);CHECK_PETSC_ERROR(err);
   CPPUNIT_ASSERT_EQUAL(ncells, cEnd-cStart);
 
   spatialdata::geocoords::CSCart cs;
@@ -378,6 +397,8 @@
   manager.close();
 
   TestDataWriterVTK::checkFile(filenameRootF, t, timeFormat);
+
+  PYLITH_METHOD_END;
 } // testAppendCellField
 
 



More information about the CIG-COMMITS mailing list