[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