[cig-commits] r20818 - in short/3D/PyLith/trunk: libsrc/pylith/bc libsrc/pylith/topology unittests/libtests/topology

knepley at geodynamics.org knepley at geodynamics.org
Wed Oct 10 08:42:39 PDT 2012


Author: knepley
Date: 2012-10-10 08:42:38 -0700 (Wed, 10 Oct 2012)
New Revision: 20818

Modified:
   short/3D/PyLith/trunk/libsrc/pylith/bc/DirichletBC.cc
   short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc
   short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldMesh.cc
Log:
All topology tests pass

Modified: short/3D/PyLith/trunk/libsrc/pylith/bc/DirichletBC.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/bc/DirichletBC.cc	2012-10-10 12:03:44 UTC (rev 20817)
+++ short/3D/PyLith/trunk/libsrc/pylith/bc/DirichletBC.cc	2012-10-10 15:42:38 UTC (rev 20818)
@@ -133,7 +133,8 @@
     const SieveMesh::point_type point = _points[iPoint];
 
     // Get list of currently constrained DOF
-    PetscInt cdof, *cInd;
+    PetscInt cdof;
+    const PetscInt *cInd;
 
     err = PetscSectionGetConstraintDof(sectionP, point, &cdof);CHECK_PETSC_ERROR(err);
     err = PetscSectionGetConstraintIndices(sectionP, point, &cInd);CHECK_PETSC_ERROR(err);

Modified: short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc	2012-10-10 12:03:44 UTC (rev 20817)
+++ short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc	2012-10-10 15:42:38 UTC (rev 20818)
@@ -705,7 +705,8 @@
     }
     err = PetscSectionSetUp(*s);CHECK_PETSC_ERROR(err);
     for(PetscInt p = pStart; p < pStart+numNormalCells; ++p) {
-      PetscInt *cind, *cfind, q = p;
+      const PetscInt *cind, *cfind;
+      PetscInt        q = p;
 
       err = PetscSectionGetConstraintIndices(section, p, &cind);CHECK_PETSC_ERROR(err);
       err = PetscSectionSetConstraintIndices(*s, q, cind);CHECK_PETSC_ERROR(err);
@@ -715,7 +716,8 @@
       }
     }
     for(PetscInt p = pStart+numNormalCells; p < pStart+numNormalCells+numNormalVertices+numShadowVertices+numLagrangeVertices; ++p) {
-      PetscInt *cind, *cfind, q = p + numCohesiveCells;
+      const PetscInt *cind, *cfind;
+      PetscInt        q = p + numCohesiveCells;
 
       err = PetscSectionGetConstraintIndices(section, p, &cind);CHECK_PETSC_ERROR(err);
       err = PetscSectionSetConstraintIndices(*s, q, cind);CHECK_PETSC_ERROR(err);
@@ -725,7 +727,8 @@
       }
     }
     for(PetscInt p = pStart+numNormalCells+numNormalVertices+numShadowVertices+numLagrangeVertices; p < pEnd; ++p) {
-      PetscInt *cind, *cfind, q = p - (numNormalVertices+numShadowVertices+numLagrangeVertices);
+      const PetscInt *cind, *cfind;
+      PetscInt        q = p - (numNormalVertices+numShadowVertices+numLagrangeVertices);
 
       err = PetscSectionGetConstraintIndices(section, p, &cind);CHECK_PETSC_ERROR(err);
       err = PetscSectionSetConstraintIndices(*s, q, cind);CHECK_PETSC_ERROR(err);

Modified: short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldMesh.cc	2012-10-10 12:03:44 UTC (rev 20817)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldMesh.cc	2012-10-10 15:42:38 UTC (rev 20818)
@@ -1212,10 +1212,10 @@
 void
 pylith::topology::TestFieldMesh::testSplitDefault(void)
 { // testSplitDefault
-  const int spaceDim = _TestFieldMesh::cellDim;
-  const int numFibrations = spaceDim;
-  const int nconstraints[4] = { 1, 2, 0, 1 };
-  const int constraints[4] = {
+  const PetscInt spaceDim = _TestFieldMesh::cellDim;
+  const PetscInt numFields = spaceDim;
+  const PetscInt nconstraints[4] = { 1, 2, 0, 1 };
+  const PetscInt constraints[4] = {
     1,     // 0
     0, 1,  // 1
            // 2
@@ -1231,59 +1231,69 @@
   PetscInt       vStart, vEnd;
   err = DMComplexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
 
-  // Create field with atlas to use to create new field
+  // Create field with section to use to create new field
   Field<Mesh> fieldSrc(mesh);
-  CPPUNIT_ASSERT(0);
   { // Setup source field
+    for(PetscInt f = 0; f < numFields; ++f) {
+      std::ostringstream msg;
+      msg << "Field "<<f;
+      fieldSrc.addField(msg.str().c_str(), 1);
+    }
+    fieldSrc.setupFields();
     fieldSrc.newSection(Field<Mesh>::VERTICES_FIELD, spaceDim);
-    fieldSrc.splitDefault();
-    const ALE::Obj<Mesh::RealSection>& section = fieldSrc.section();
-    CPPUNIT_ASSERT(!section.isNull());
-    int iV=0;
-    int iC=0;
-    for(PetscInt v = vStart; v < vEnd; ++v, ++iV) {
+    for(PetscInt f = 0; f < spaceDim; ++f) {
+      std::ostringstream msg;
+      msg << "Field "<<f;
+      fieldSrc.updateDof(msg.str().c_str(), Field<Mesh>::VERTICES_FIELD, 1);
+    }
+    PetscSection section = fieldSrc.petscSection();
+    CPPUNIT_ASSERT(section);
+    PetscInt iV = 0, iC = 0;
+    for(PetscInt v = vStart; v < vEnd; ++v) {
       const int nconstraintsVertex = nconstraints[iV];
-      section->addConstraintDimension(v, nconstraintsVertex);
-      for (int iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint) {
-        const int fibration = constraints[iC++];
-        section->addConstraintDimension(v, 1, fibration);
+      err = PetscSectionAddConstraintDof(section, v, nconstraints[iV++]);CHECK_PETSC_ERROR(err);
+      for(PetscInt iConstraint = 0; iConstraint < nconstraintsVertex; ++iConstraint) {
+        const int field = constraints[iC++];
+        err = PetscSectionAddFieldConstraintDof(section, v, field, 1);CHECK_PETSC_ERROR(err);
       } // for
     } // for
     fieldSrc.allocate();
 
-    iC = 0;
-    iV = 0;
-    int zero = 0;
-    for(PetscInt v = vStart; v < vEnd; ++v, ++iV) {
-      const int nconstraintsVertex = nconstraints[iV];
-      if (nconstraintsVertex > 0)
-        section->setConstraintDof(v, &constraints[iC]);
-      for (int iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint) {
-        const int fibration = constraints[iC++];
-        section->setConstraintDof(v, &zero, fibration);
+    iV = 0; iC = 0;
+    PetscInt zero = 0;
+    for(PetscInt v = vStart; v < vEnd; ++v) {
+      const int nconstraintsVertex = nconstraints[iV++];
+      if (nconstraintsVertex > 0) {
+        err = PetscSectionSetConstraintIndices(section, v, (PetscInt *) &constraints[iC]);CHECK_PETSC_ERROR(err);
+      }
+      for(PetscInt iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint) {
+        const PetscInt field = constraints[iC++];
+        err = PetscSectionSetFieldConstraintIndices(section, v, field, &zero);CHECK_PETSC_ERROR(err);
       } // for
     } // for
   } // Setup source field
 
-  const ALE::Obj<Mesh::RealSection>& section = fieldSrc.section();
-  CPPUNIT_ASSERT(!section.isNull());
-  CPPUNIT_ASSERT_EQUAL(numFibrations, section->getNumSpaces());
+  PetscSection section = fieldSrc.petscSection();
+  CPPUNIT_ASSERT(section);
+  PetscInt     numSectionFields;
+  err = PetscSectionGetNumFields(section, &numSectionFields);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT_EQUAL(numFields, numSectionFields);
 
-  for (int fibration=0; fibration < spaceDim; ++fibration) {
-    const ALE::Obj<Mesh::RealSection>& sectionSplit = section->getFibration(fibration);
-    CPPUNIT_ASSERT(!sectionSplit.isNull());
-    int iV = 0;
-    int iC = 0;
+  for(PetscInt f = 0; f < numFields; ++f) {
+    PetscInt iV = 0, iC = 0;
+
     for(PetscInt v = vStart; v < vEnd; ++v, ++iV) {
-      CPPUNIT_ASSERT_EQUAL(1, section->getFiberDimension(v, fibration));
-      bool isConstrained = false;
-      const int nconstraintsVertex = nconstraints[iV];
-      for (int iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint)
-        if (constraints[iC++] == fibration)
-          isConstrained = true;
-      const int constraintDimE = (!isConstrained) ? 0 : 1;
-      CPPUNIT_ASSERT_EQUAL(constraintDimE,
-                           section->getConstraintDimension(v, fibration));
+      PetscInt fdof, fcdof;
+      PetscBool      isConstrained      = PETSC_FALSE;
+      const PetscInt nconstraintsVertex = nconstraints[iV];
+
+      err = PetscSectionGetFieldDof(section, v, f, &fdof);CHECK_PETSC_ERROR(err);
+      err = PetscSectionGetFieldConstraintDof(section, v, f, &fcdof);CHECK_PETSC_ERROR(err);
+      CPPUNIT_ASSERT_EQUAL(1, fdof);
+      for(PetscInt iConstraint = 0; iConstraint < nconstraintsVertex; ++iConstraint)
+        if (constraints[iC++] == f) isConstrained = PETSC_TRUE;
+      const PetscInt constraintDimE = (!isConstrained) ? 0 : 1;
+      CPPUNIT_ASSERT_EQUAL(constraintDimE, fcdof);
     } // for
   } // for
 } // testSplitDefault
@@ -1293,10 +1303,10 @@
 void
 pylith::topology::TestFieldMesh::testCloneSectionSplit(void)
 { // testCloneSectionSplit
-  const int spaceDim = _TestFieldMesh::cellDim;
-  const int numFibrations = spaceDim;
-  const int nconstraints[4] = { 1, 2, 0, 1 };
-  const int constraints[4] = {
+  const PetscInt spaceDim = _TestFieldMesh::cellDim;
+  const PetscInt numFields = spaceDim;
+  const PetscInt nconstraints[4] = { 1, 2, 0, 1 };
+  const PetscInt constraints[4] = {
     1,     // 0
     0, 1,  // 1
            // 2
@@ -1314,34 +1324,42 @@
 
   // Create field with atlas to use to create new field
   Field<Mesh> fieldSrc(mesh);
-  CPPUNIT_ASSERT(0);
   { // Setup source field
+    for(PetscInt f = 0; f < numFields; ++f) {
+      std::ostringstream msg;
+      msg << "Field "<<f;
+      fieldSrc.addField(msg.str().c_str(), 1);
+    }
+    fieldSrc.setupFields();
     fieldSrc.newSection(Field<Mesh>::VERTICES_FIELD, spaceDim);
-    fieldSrc.splitDefault();
-    const ALE::Obj<Mesh::RealSection>& section = fieldSrc.section();
-    CPPUNIT_ASSERT(!section.isNull());
-    int iV=0;
-    int iC=0;
-    for(PetscInt v = vStart; v < vEnd; ++v, ++iV) {
+    for(PetscInt f = 0; f < spaceDim; ++f) {
+      std::ostringstream msg;
+      msg << "Field "<<f;
+      fieldSrc.updateDof(msg.str().c_str(), Field<Mesh>::VERTICES_FIELD, 1);
+    }
+    PetscSection section = fieldSrc.petscSection();
+    CPPUNIT_ASSERT(section);
+    PetscInt iV = 0, iC = 0;
+    for(PetscInt v = vStart; v < vEnd; ++v) {
       const int nconstraintsVertex = nconstraints[iV];
-      section->addConstraintDimension(v, nconstraintsVertex);
-      for (int iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint) {
-        const int fibration = constraints[iC++];
-        section->addConstraintDimension(v, 1, fibration);
+      err = PetscSectionAddConstraintDof(section, v, nconstraints[iV++]);CHECK_PETSC_ERROR(err);
+      for(PetscInt iConstraint = 0; iConstraint < nconstraintsVertex; ++iConstraint) {
+        const int field = constraints[iC++];
+        err = PetscSectionAddFieldConstraintDof(section, v, field, 1);CHECK_PETSC_ERROR(err);
       } // for
     } // for
     fieldSrc.allocate();
 
-    iC = 0;
-    iV = 0;
-    int zero = 0;
-    for(PetscInt v = vStart; v < vEnd; ++v, ++iV) {
-      const int nconstraintsVertex = nconstraints[iV];
-      if (nconstraintsVertex > 0)
-        section->setConstraintDof(v, &constraints[iC]);
-      for (int iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint) {
-        const int fibration = constraints[iC++];
-        section->setConstraintDof(v, &zero, fibration);
+    iV = 0; iC = 0;
+    PetscInt zero = 0;
+    for(PetscInt v = vStart; v < vEnd; ++v) {
+      const int nconstraintsVertex = nconstraints[iV++];
+      if (nconstraintsVertex > 0) {
+        err = PetscSectionSetConstraintIndices(section, v, (PetscInt *) &constraints[iC]);CHECK_PETSC_ERROR(err);
+      }
+      for(PetscInt iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint) {
+        const PetscInt field = constraints[iC++];
+        err = PetscSectionSetFieldConstraintIndices(section, v, field, &zero);CHECK_PETSC_ERROR(err);
       } // for
     } // for
   } // Setup source field
@@ -1349,25 +1367,27 @@
   Field<Mesh> field(mesh);
   field.cloneSection(fieldSrc);
 
-  const ALE::Obj<Mesh::RealSection>& section = fieldSrc.section();
-  CPPUNIT_ASSERT(!section.isNull());
-  CPPUNIT_ASSERT_EQUAL(numFibrations, section->getNumSpaces());
+  PetscSection section = field.petscSection();
+  CPPUNIT_ASSERT(section);
+  PetscInt     numSectionFields;
+  err = PetscSectionGetNumFields(section, &numSectionFields);CHECK_PETSC_ERROR(err);
+  CPPUNIT_ASSERT_EQUAL(numFields, numSectionFields);
 
-  for (int fibration=0; fibration < spaceDim; ++fibration) {
-    const ALE::Obj<Mesh::RealSection>& sectionSplit = section->getFibration(fibration);
-    CPPUNIT_ASSERT(!sectionSplit.isNull());
-    int iV = 0;
-    int iC = 0;
+  for(PetscInt f = 0; f < numFields; ++f) {
+    PetscInt iV = 0, iC = 0;
+
     for(PetscInt v = vStart; v < vEnd; ++v, ++iV) {
-      CPPUNIT_ASSERT_EQUAL(1, section->getFiberDimension(v, fibration));
-      bool isConstrained = false;
-      const int nconstraintsVertex = nconstraints[iV];
-      for (int iConstraint=0; iConstraint < nconstraintsVertex; ++iConstraint)
-        if (constraints[iC++] == fibration)
-          isConstrained = true;
-      const int constraintDimE = (!isConstrained) ? 0 : 1;
-      CPPUNIT_ASSERT_EQUAL(constraintDimE,
-                           section->getConstraintDimension(v, fibration));
+      PetscInt fdof, fcdof;
+      PetscBool      isConstrained      = PETSC_FALSE;
+      const PetscInt nconstraintsVertex = nconstraints[iV];
+
+      err = PetscSectionGetFieldDof(section, v, f, &fdof);CHECK_PETSC_ERROR(err);
+      err = PetscSectionGetFieldConstraintDof(section, v, f, &fcdof);CHECK_PETSC_ERROR(err);
+      CPPUNIT_ASSERT_EQUAL(1, fdof);
+      for(PetscInt iConstraint = 0; iConstraint < nconstraintsVertex; ++iConstraint)
+        if (constraints[iC++] == f) isConstrained = PETSC_TRUE;
+      const PetscInt constraintDimE = (!isConstrained) ? 0 : 1;
+      CPPUNIT_ASSERT_EQUAL(constraintDimE, fcdof);
     } // for
   } // for
 } // testCloneSectionSplit



More information about the CIG-COMMITS mailing list