[cig-commits] r21448 - in short/3D/PyLith/trunk: libsrc/pylith/faults unittests/libtests/faults

knepley at geodynamics.org knepley at geodynamics.org
Tue Mar 5 08:00:49 PST 2013


Author: knepley
Date: 2013-03-05 08:00:49 -0800 (Tue, 05 Mar 2013)
New Revision: 21448

Modified:
   short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
   short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.hh
   short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesive.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestConstRateSlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestStepSlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestTractPerturbation.cc
Log:
Changing fault creation interface to use DMLabel

Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -47,11 +47,11 @@
 pylith::faults::CohesiveTopology::createFault(topology::SubMesh* faultMesh,
                                               ALE::Obj<SieveFlexMesh>& faultBoundary,
                                               const topology::Mesh& mesh,
-                                              const ALE::Obj<topology::Mesh::IntSection>& groupField,
+                                              DMLabel groupField,
                                               const bool flipFault)
 { // createFault
   assert(0 != faultMesh);
-  assert(!groupField.isNull());
+  assert(groupField);
 
   // Memory logging
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
@@ -81,16 +81,24 @@
   const int debug = mesh.debug();
 
   // Create set with vertices on fault
-  const IntSection::chart_type& chart = groupField->getChart();
+  IS              pointIS;
+  const PetscInt *points;
+  PetscInt        numPoints, vStart, vEnd;
   TopologyOps::PointSet faultVertices; // Vertices on fault
 
-  const IntSection::chart_type::const_iterator chartEnd = chart.end();
-  for(IntSection::chart_type::const_iterator c_iter = chart.begin();
-      c_iter != chartEnd;
-      ++c_iter) {
-    assert(!sieveMesh->depth(*c_iter));
-    if (groupField->getFiberDimension(*c_iter))
-      faultVertices.insert(*c_iter);
+  err = DMLabelGetStratumIS(groupField, 1, &pointIS);CHECK_PETSC_ERROR(err);
+  err = ISGetLocalSize(pointIS, &numPoints);CHECK_PETSC_ERROR(err);
+  err = ISGetIndices(pointIS, &points);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  // Figure out offset between numberings
+  PetscInt numNormalCells, numCohesiveCells, numNormalVertices, numShadowVertices, numLagrangeVertices;
+  mesh.getPointTypeSizes(&numNormalCells, &numCohesiveCells, &numNormalVertices, &numShadowVertices, &numLagrangeVertices);
+  for (PetscInt p = 0; p < numPoints; ++p) {
+    const PetscInt point    = points[p];
+    const PetscInt oldPoint = point-numCohesiveCells; // Convert to Sieve numbering
+
+    assert(point >= vStart);assert(point < vEnd);
+    faultVertices.insert(oldPoint);
   } // for
 
   // Create a sieve which captures the fault
@@ -127,22 +135,24 @@
 
   // Convert fault to a DM
   if (depth == dim) {
-    DM             subdm;
-    DMLabel        label;
-    const char    *labelName = groupField->getName().c_str();
+    DM                 subdm;
+    DMLabel            label;
+    const char        *groupName, *labelName;
+    std::ostringstream tmp;
 
+    err = DMLabelGetName(groupField, &groupName);CHECK_PETSC_ERROR(err);
+#if 0
+    tmp << groupName << "_label";
+    labelName = tmp.str().c_str();
     // Put fault vertices in a label
     err = DMPlexCreateLabel(dmMesh, labelName);CHECK_PETSC_ERROR(err);
     err = DMPlexGetLabel(dmMesh, labelName, &label);CHECK_PETSC_ERROR(err);
-    const IntSection::chart_type& chart = groupField->getChart();
-    const IntSection::chart_type::const_iterator chartEnd = chart.end();
-    for(IntSection::chart_type::const_iterator c_iter = chart.begin(); c_iter != chartEnd; ++c_iter) {
-      if (groupField->getFiberDimension(*c_iter)) {
-        err = DMLabelSetValue(label, *c_iter, 0);CHECK_PETSC_ERROR(err);
-      }
+    for(PetscInt p = 0; p < numPoints; ++p) {
+      err = DMLabelSetValue(label, points[p], 0);CHECK_PETSC_ERROR(err);
     }
+#endif
 
-    err = DMPlexCreateSubmesh(dmMesh, labelName, &subdm);CHECK_PETSC_ERROR(err);
+    err = DMPlexCreateSubmesh(dmMesh, groupName, &subdm);CHECK_PETSC_ERROR(err);
     faultMesh->setDMMesh(subdm);
   } else {
     // TODO: This leg will be unnecessary
@@ -181,6 +191,8 @@
     renumbering.clear();
     faultMesh->setDMMesh(dm);
   }
+  err = ISRestoreIndices(pointIS, &points);CHECK_PETSC_ERROR(err);
+  err = ISDestroy(&pointIS);CHECK_PETSC_ERROR(err);
 
   logger.stagePop();
 } // createFault
@@ -442,7 +454,7 @@
       PetscInt value;
       //assert(extraCells == faultVertexOffsetDM);
       err = DMPlexGetLabelValue(complexMesh, (*name).c_str(), vertexDM, &value);CHECK_PETSC_ERROR(err);
-      if (value) {
+      if (value != -1) {
         err = DMPlexSetLabelValue(newMesh, (*name).c_str(), vertexRenumberDM[vertexDM], value);CHECK_PETSC_ERROR(err);
       }
     } // for

Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.hh	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.hh	2013-03-05 16:00:49 UTC (rev 21448)
@@ -55,7 +55,7 @@
   void createFault(topology::SubMesh* faultMesh,
 		   ALE::Obj<SieveFlexMesh>& faultBoundary,
 		   const topology::Mesh& mesh,
-		   const ALE::Obj<topology::Mesh::IntSection>& groupField,
+		   DMLabel groupField,
 		   const bool flipFault =false);
 
   /** Create cohesive cells.

Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesive.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesive.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -116,24 +116,30 @@
     ALE::Obj<SieveFlexMesh> faultBoundary;
   
     // Get group of vertices associated with fault
-    const ALE::Obj<topology::Mesh::SieveMesh>& sieveMesh = mesh->sieveMesh();
-    assert(!sieveMesh.isNull());
+    DM dmMesh = mesh->dmMesh();
+    assert(dmMesh);
     
     if (!_useFaultMesh) {
-      if (!sieveMesh->hasIntSection(label())) {
-	std::ostringstream msg;
-	msg << "Mesh missing group of vertices '" << label()
-	    << "' for fault interface condition.";
-	throw std::runtime_error(msg.str());
+      DMLabel        groupField;
+      PetscBool      has;
+      PetscErrorCode err;
+
+      err = DMPlexHasLabel(dmMesh, label(), &has);CHECK_PETSC_ERROR(err);
+      if (!has) {
+        std::ostringstream msg;
+        msg << "Mesh missing group of vertices '" << label()
+            << "' for fault interface condition.";
+        throw std::runtime_error(msg.str());
       } // if  
-      const ALE::Obj<topology::Mesh::IntSection>& groupField = 
-	sieveMesh->getIntSection(label());
-      assert(!groupField.isNull());
+      err = DMPlexGetLabel(dmMesh, label(), &groupField);CHECK_PETSC_ERROR(err);
       CohesiveTopology::createFault(&faultMesh, faultBoundary, *mesh, groupField, 
-				    flipFault);
+                                    flipFault);
       
-      CohesiveTopology::create(mesh, faultMesh, faultBoundary, groupField, id(), 
-			       *firstFaultVertex, *firstLagrangeVertex, *firstFaultCell, useLagrangeConstraints());
+      const ALE::Obj<topology::Mesh::IntSection>& oldGroupField = 
+        mesh->sieveMesh()->getIntSection(label());
+      assert(!oldGroupField.isNull());
+      CohesiveTopology::create(mesh, faultMesh, faultBoundary, oldGroupField, id(), 
+                               *firstFaultVertex, *firstLagrangeVertex, *firstFaultCell, useLagrangeConstraints());
       
     } else {
       const int faultDim = 2;

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestBruneSlipFn.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -320,6 +320,7 @@
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != faultMesh);
   CPPUNIT_ASSERT(0 != slipfn);
+  PetscErrorCode err;
 
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -342,18 +343,24 @@
   mesh->coordsys(&cs);
 
   // Create fault mesh
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(faultLabel)->size();
-  int firstFaultCell      = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  DM       dmMesh = mesh->dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(faultMesh, faultBoundary,
-                                *mesh, sieveMesh->getIntSection(faultLabel));
+                                *mesh, groupField);
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
                            faultId,
@@ -365,17 +372,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh->dmMesh();
+  DM              faultDMMesh = faultMesh->dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -403,7 +409,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbFinalSlip("final slip");
@@ -436,6 +442,7 @@
 void
 pylith::faults::TestBruneSlipFn::_testInitialize(const _TestBruneSlipFn::DataStruct& data)
 { // _testInitialize
+  PetscErrorCode err;
   // Setup mesh
   topology::Mesh mesh;
   meshio::MeshIOAscii meshIO;
@@ -453,18 +460,24 @@
 
   // Create fault mesh
   topology::SubMesh faultMesh;
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
-  int firstFaultCell      = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+  DM       dmMesh = mesh.dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, data.faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, data.faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(&faultMesh, faultBoundary,
-                                mesh, sieveMesh->getIntSection(data.faultLabel));
+                                mesh, groupField);
   CohesiveTopology::create(&mesh, faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(data.faultLabel),
                            data.faultId,
@@ -476,17 +489,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh.dmMesh();
+  DM              faultDMMesh = faultMesh.dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -514,7 +526,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbFinalSlip("final slip");

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestConstRateSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestConstRateSlipFn.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestConstRateSlipFn.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -252,6 +252,7 @@
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != faultMesh);
   CPPUNIT_ASSERT(0 != slipfn);
+  PetscErrorCode err;
 
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -273,18 +274,24 @@
   mesh->coordsys(&cs);
 
   // Create fault mesh
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(faultLabel)->size();
-  int firstFaultCell      = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  DM       dmMesh = mesh->dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(faultMesh, faultBoundary,
-                                *mesh, sieveMesh->getIntSection(faultLabel));
+                                *mesh, groupField);
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
                            faultId,
@@ -296,17 +303,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh->dmMesh();
+  DM              faultDMMesh = faultMesh->dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(faultDMMesh);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -334,7 +340,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbSlipRate("slip rate");
@@ -361,6 +367,7 @@
 void
 pylith::faults::TestConstRateSlipFn::_testInitialize(const _TestConstRateSlipFn::DataStruct& data)
 { // _testInitialize
+  PetscErrorCode err;
   // Setup mesh
   topology::Mesh mesh;
   meshio::MeshIOAscii meshIO;
@@ -378,18 +385,24 @@
 
   // Create fault mesh
   topology::SubMesh faultMesh;
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
-  int firstFaultCell      = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+  DM       dmMesh = mesh.dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, data.faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, data.faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(&faultMesh, faultBoundary,
-                                mesh, sieveMesh->getIntSection(data.faultLabel));
+                                mesh, groupField);
   CohesiveTopology::create(&mesh, faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(data.faultLabel),
                            data.faultId,
@@ -401,17 +414,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh.dmMesh();
+  DM              faultDMMesh = faultMesh.dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(faultDMMesh);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -439,7 +451,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbSlipRate("slip rate");

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestEqKinSrc.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -157,6 +157,7 @@
   CPPUNIT_ASSERT(0 != faultMesh);
   CPPUNIT_ASSERT(0 != eqsrc);
   CPPUNIT_ASSERT(0 != slipfn);
+  PetscErrorCode err;
 
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -179,18 +180,24 @@
   mesh->coordsys(&cs);
 
   // Create fault mesh
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(faultLabel)->size();
-  int firstFaultCell      = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  DM       dmMesh = mesh->dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(faultMesh, faultBoundary,
-                                *mesh, sieveMesh->getIntSection(faultLabel));
+                                *mesh, groupField);
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
                            faultId,
@@ -202,17 +209,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh->dmMesh();
+  DM              faultDMMesh = faultMesh->dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -240,7 +246,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbFinalSlip("final slip");

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -315,6 +315,7 @@
 					      const PylithScalar originTime)
 { // _initialize
   assert(0 != slipfn);
+  PetscErrorCode  err;
 
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -337,18 +338,24 @@
   mesh->coordsys(&cs);
 
   // Create fault mesh
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(faultLabel)->size();
-  int firstFaultCell      = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  DM       dmMesh = mesh->dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(faultMesh, faultBoundary,
-                                *mesh, sieveMesh->getIntSection(faultLabel));
+                                *mesh, groupField);
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
                            faultId, firstFaultVertex, firstLagrangeVertex,
@@ -359,17 +366,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh->dmMesh();
+  DM              faultDMMesh = faultMesh->dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -397,7 +403,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbFinalSlip("final slip");
@@ -430,6 +436,7 @@
 void
 pylith::faults::TestLiuCosSlipFn::_testInitialize(const _TestLiuCosSlipFn::DataStruct& data)
 { // _testInitialize
+  PetscErrorCode err;
   // Setup mesh
   topology::Mesh mesh;
   meshio::MeshIOAscii meshIO;
@@ -447,18 +454,24 @@
 
   // Create fault mesh
   topology::SubMesh faultMesh;
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
-  int firstFaultCell      = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+  DM       dmMesh = mesh.dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, data.faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, data.faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(&faultMesh, faultBoundary,
-                                mesh, sieveMesh->getIntSection(data.faultLabel));
+                                mesh, groupField);
   CohesiveTopology::create(&mesh, faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(data.faultLabel),
                            data.faultId, firstFaultVertex, firstLagrangeVertex,
@@ -469,17 +482,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh.dmMesh();
+  DM              faultDMMesh = faultMesh.dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -507,7 +519,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbFinalSlip("final slip");

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestStepSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestStepSlipFn.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestStepSlipFn.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -248,6 +248,7 @@
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != faultMesh);
   CPPUNIT_ASSERT(0 != slipfn);
+  PetscErrorCode err;
 
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -269,18 +270,24 @@
   mesh->coordsys(&cs);
 
   // Create fault mesh
-  int firstFaultVertex    = 0;
-  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(faultLabel)->size();
-  int firstFaultCell      = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  DM       dmMesh = mesh->dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
-  CPPUNIT_ASSERT(!sieveMesh.isNull());
+  CPPUNIT_ASSERT(!sieveMesh.isNull());CPPUNIT_ASSERT(dmMesh);
   CohesiveTopology::createFault(faultMesh, faultBoundary,
-                                *mesh, sieveMesh->getIntSection(faultLabel));
+                                *mesh, groupField);
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
                            faultId,
@@ -292,17 +299,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh->dmMesh();
+  DM              faultDMMesh = faultMesh->dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -330,7 +336,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbFinalSlip("final slip");
@@ -357,6 +363,7 @@
 void
 pylith::faults::TestStepSlipFn::_testInitialize(const _TestStepSlipFn::DataStruct& data)
 { // _testInitialize
+  PetscErrorCode err;
   // Setup mesh
   topology::Mesh mesh;
   meshio::MeshIOAscii meshIO;
@@ -383,9 +390,14 @@
   }
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
-  CPPUNIT_ASSERT(!sieveMesh.isNull());
+  DM      dmMesh = mesh.dmMesh();
+  DMLabel groupField;
+
+  CPPUNIT_ASSERT(!sieveMesh.isNull());CPPUNIT_ASSERT(dmMesh);
+  err = DMPlexGetLabel(dmMesh, data.faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   CohesiveTopology::createFault(&faultMesh, faultBoundary,
-                                mesh, sieveMesh->getIntSection(data.faultLabel));
+                                mesh, groupField);
   CohesiveTopology::create(&mesh, faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(data.faultLabel),
                            data.faultId,
@@ -397,17 +409,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh.dmMesh();
+  DM              faultDMMesh = faultMesh.dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -435,7 +446,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbFinalSlip("final slip");

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -277,6 +277,7 @@
 					      const PylithScalar originTime)
 { // _initialize
   assert(0 != slipfn);
+  PetscErrorCode err;
 
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -299,18 +300,24 @@
   mesh->coordsys(&cs);
 
   // Create fault mesh
-  int firstFaultVertex = 0;
-  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(faultLabel)->size();
-  int firstFaultCell   = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  DM       dmMesh = mesh->dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(faultMesh, faultBoundary,
-                                *mesh, sieveMesh->getIntSection(faultLabel));
+                                *mesh, groupField);
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
                            faultId, firstFaultVertex, firstLagrangeVertex, 
@@ -321,17 +328,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh->dmMesh();
+  DM              faultDMMesh = faultMesh->dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -359,7 +365,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbAmplitude("slip amplitude");
@@ -390,6 +396,7 @@
 void
 pylith::faults::TestTimeHistorySlipFn::_testInitialize(const _TestTimeHistorySlipFn::DataStruct& data)
 { // _testInitialize
+  PetscErrorCode err;
   // Setup mesh
   topology::Mesh mesh;
   meshio::MeshIOAscii meshIO;
@@ -407,18 +414,24 @@
 
   // Create fault mesh
   topology::SubMesh faultMesh;
-  int firstFaultVertex = 0;
-  int firstLagrangeVertex = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
-  int firstFaultCell   = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+  DM       dmMesh = mesh.dmMesh();
+  PetscInt firstFaultVertex = 0;
+  PetscInt firstLagrangeVertex, firstFaultCell;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetStratumSize(dmMesh, data.faultLabel, 1, &firstLagrangeVertex);CHECK_PETSC_ERROR(err);
+  firstFaultCell = firstLagrangeVertex;
   if (useLagrangeConstraints) {
-    firstFaultCell += mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+    firstFaultCell += firstLagrangeVertex;
   }
+  err = DMPlexGetLabel(dmMesh, data.faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   ALE::Obj<SieveFlexMesh> faultBoundary = 0;
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(&faultMesh, faultBoundary,
-                                mesh, sieveMesh->getIntSection(data.faultLabel));
+                                mesh, groupField);
   CohesiveTopology::create(&mesh, faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(data.faultLabel),
                            data.faultId, firstFaultVertex, firstLagrangeVertex,
@@ -429,17 +442,16 @@
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<RealSection>& oldCoordSection = sieveMesh->getRealSection("coordinates");
   faultSieveMesh->setRealSection("coordinates", oldCoordSection);
-  DM              dmMesh = faultMesh.dmMesh();
+  DM              faultDMMesh = faultMesh.dmMesh();
   IS              subpointIS;
   const PetscInt *points;
   PetscSection    coordSection;
   PetscInt        vStart, vEnd;
-  PetscErrorCode  err;
-  CPPUNIT_ASSERT(dmMesh);
+  CPPUNIT_ASSERT(faultDMMesh);
 
-  err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-  err = DMPlexCreateSubpointIS(dmMesh, &subpointIS);CHECK_PETSC_ERROR(err);
-  err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+  err = DMPlexCreateSubpointIS(faultDMMesh, &subpointIS);CHECK_PETSC_ERROR(err);
+  err = DMPlexGetCoordinateSection(faultDMMesh, &coordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionSetChart(coordSection, vStart, vEnd);CHECK_PETSC_ERROR(err);
   for(PetscInt v = vStart; v < vEnd; ++v) {
     err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
@@ -467,7 +479,7 @@
   err = ISRestoreIndices(subpointIS, &points);CHECK_PETSC_ERROR(err);
   err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
   err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
-  err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
+  err = DMSetCoordinatesLocal(faultDMMesh, coordVec);CHECK_PETSC_ERROR(err);
 
   // Setup databases
   spatialdata::spatialdb::SimpleDB dbAmplitude("slip amplitude");

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestTractPerturbation.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestTractPerturbation.cc	2013-03-05 10:54:16 UTC (rev 21447)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestTractPerturbation.cc	2013-03-05 16:00:49 UTC (rev 21448)
@@ -324,6 +324,7 @@
   CPPUNIT_ASSERT(mesh);
   CPPUNIT_ASSERT(faultMesh);
   CPPUNIT_ASSERT(tract);
+  PetscErrorCode err;
 
   const char* meshFilename = "data/tri3.mesh";
   const char* faultLabel = "fault";
@@ -347,15 +348,19 @@
   mesh->coordsys(&cs);
   const int spaceDim = cs.spaceDim();
 
-  PetscInt       labelSize;
-  PetscErrorCode err;
-  err = DMPlexGetStratumSize(mesh->dmMesh(), faultLabel, 1, &labelSize);CHECK_PETSC_ERROR(err);
+  DM       dmMesh = mesh->dmMesh();
+  PetscInt labelSize;
+  err = DMPlexGetStratumSize(dmMesh, faultLabel, 1, &labelSize);CHECK_PETSC_ERROR(err);
 
   // Create fault mesh
   PetscInt firstFaultVertex    = 0;
   PetscInt firstLagrangeVertex = labelSize;
   PetscInt firstFaultCell      = labelSize;
+  DMLabel  groupField;
   const bool useLagrangeConstraints = true;
+
+  err = DMPlexGetLabel(dmMesh, faultLabel, &groupField);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT(groupField);
   if (useLagrangeConstraints) {
     firstFaultCell += labelSize;
   } // if
@@ -363,7 +368,7 @@
   const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CohesiveTopology::createFault(faultMesh, faultBoundary,
-                                *mesh, sieveMesh->getIntSection(faultLabel));
+                                *mesh, groupField);
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
                            faultId,



More information about the CIG-COMMITS mailing list