[cig-commits] r21590 - short/3D/PyLith/trunk/unittests/libtests/topology
brad at geodynamics.org
brad at geodynamics.org
Wed Mar 20 15:32:52 PDT 2013
Author: brad
Date: 2013-03-20 15:32:51 -0700 (Wed, 20 Mar 2013)
New Revision: 21590
Removed:
short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.cc
short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.hh
Modified:
short/3D/PyLith/trunk/unittests/libtests/topology/Makefile.am
short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldSubMesh.cc
short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsMesh.cc
short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsSubMesh.cc
short/3D/PyLith/trunk/unittests/libtests/topology/TestMesh.cc
Log:
Code cleanup. Update to use visitors where applicable.
Modified: short/3D/PyLith/trunk/unittests/libtests/topology/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/Makefile.am 2013-03-20 02:27:39 UTC (rev 21589)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/Makefile.am 2013-03-20 22:32:51 UTC (rev 21590)
@@ -50,7 +50,6 @@
TestFieldSubMesh.hh \
TestFieldsMesh.hh \
TestFieldsSubMesh.hh \
- TestFieldsNewMesh.hh \
TestSolutionFields.hh \
TestJacobian.hh \
TestRefineUniform.hh
Modified: short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldSubMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldSubMesh.cc 2013-03-20 02:27:39 UTC (rev 21589)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldSubMesh.cc 2013-03-20 22:32:51 UTC (rev 21590)
@@ -22,6 +22,8 @@
#include "pylith/topology/Field.hh" // USES Field
#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/Stratum.hh" // USES Stratum
+#include "pylith/topology/VisitorMesh.hh" // USES VecVisitorMesh
#include "pylith/utils/array.hh" // USES scalar_array
@@ -31,9 +33,6 @@
CPPUNIT_TEST_SUITE_REGISTRATION( pylith::topology::TestFieldSubMesh );
// ----------------------------------------------------------------------
-typedef pylith::topology::SubMesh::SieveMesh SieveMesh;
-
-// ----------------------------------------------------------------------
namespace pylith {
namespace topology {
namespace _TestFieldSubMesh {
@@ -140,23 +139,20 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
Field<SubMesh> field(submesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
field.newSection(topology::FieldBase::VERTICES_FIELD, fiberDim);
field.allocate();
- PetscSection section = field.petscSection();
- CPPUNIT_ASSERT(section);
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
+ VecVisitorMesh fieldVisitor(field);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(fiberDim, dof);
- }
+ CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+ } // for
} // testNewSectionPoints
// ----------------------------------------------------------------------
@@ -169,24 +165,20 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
Field<SubMesh> field(submesh);
field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
+ VecVisitorMesh fieldVisitor(field);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(fiberDim, dof);
- }
+ CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+ } // for
} // testNewSectionDomain
// ----------------------------------------------------------------------
@@ -199,9 +191,6 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
// Create field with atlas to use to create new field
Field<SubMesh> fieldSrc(submesh);
@@ -212,16 +201,16 @@
Field<SubMesh> field(submesh);
field.newSection(fieldSrc, fiberDim2);
field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
+ VecVisitorMesh fieldVisitor(field);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(fiberDim2, dof);
- }
+ CPPUNIT_ASSERT_EQUAL(fiberDim2, fieldVisitor.sectionDof(v));
+ } // for
} // testNewSectionChart
// ----------------------------------------------------------------------
@@ -241,39 +230,36 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ PetscErrorCode err = 0;
+ PetscInt vStart, vEnd;
err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
// Create field with atlas to use to create new field
Field<SubMesh> fieldSrc(submesh);
{ // Setup source field
fieldSrc.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
- PetscSection section = fieldSrc.petscSection();
- CPPUNIT_ASSERT(section);
+ PetscSection section = fieldSrc.petscSection();CPPUNIT_ASSERT(section);
int iV=0;
for(PetscInt v = vStart; v < vEnd; ++v) {
err = PetscSectionAddConstraintDof(section, v, nconstraints[iV++]);CHECK_PETSC_ERROR(err);
- }
+ } // for
fieldSrc.allocate();
int index = 0;
iV = 0;
for(PetscInt v = vStart; v < vEnd; ++v, index += nconstraints[iV++]) {
err = PetscSectionSetConstraintIndices(section, v, (PetscInt *) &constraints[index]);CHECK_PETSC_ERROR(err);
- }
+ } // for
fieldSrc.zero();
} // Setup source field
-
Field<SubMesh> field(submesh);
field.cloneSection(fieldSrc);
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
+ PetscSection section = field.petscSection();CPPUNIT_ASSERT(section);
+ PetscVec vec = field.localVector();CPPUNIT_ASSERT(vec);
+
int iV = 0;
for(PetscInt v = vStart; v < vEnd; ++v) {
PetscInt dof, cdof;
@@ -321,44 +307,35 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
Field<SubMesh> field(submesh);
field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
+
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesNondim[i++];
+ fieldArray[off+d] = valuesNondim[i++];
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
+ fieldVisitor.clear();
+ fieldVisitor.initialize(field);
+ fieldArray = fieldVisitor.localArray();
const PylithScalar tolerance = 1.0e-6;
- i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++], array[off+d], tolerance);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++], fieldArray[off+d], tolerance);
} // for
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
} // testAllocate
// ----------------------------------------------------------------------
@@ -377,46 +354,37 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
Field<SubMesh> field(submesh);
field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
+
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesNondim[i++];
+ fieldArray[off+d] = valuesNondim[i++];
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
+ fieldVisitor.clear();
field.zero();
+ fieldVisitor.initialize(field);
+ fieldArray = fieldVisitor.localArray();
const PylithScalar tolerance = 1.0e-6;
- i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, array[off+d], tolerance);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, fieldArray[off+d], tolerance);
} // for
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
} // testZero
// ----------------------------------------------------------------------
@@ -435,47 +403,37 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
Field<SubMesh> field(submesh);
- field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
- field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
+ { // setup field
+ field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
+ field.allocate();
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
+ for(PetscInt d = 0; d < fiberDim; ++d)
+ fieldArray[off+d] = valuesNondim[i++];
+ } // for
+ } // setup field
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
- for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesNondim[i++];
- } // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
-
field.complete();
- // Expect no change for this serial test
+ VecVisitorMesh fieldVisitor(field);
+ const PetscScalar* fieldArray = fieldVisitor.localArray();
const PylithScalar tolerance = 1.0e-6;
- i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++], array[off+d], tolerance);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++], fieldArray[off+d], tolerance);
} // for
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
} // testComplete
// ----------------------------------------------------------------------
@@ -494,56 +452,40 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
Field<SubMesh> fieldSrc(submesh);
- { // Setup source field
+ { // setup source field
fieldSrc.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
fieldSrc.allocate();
- PetscSection section = fieldSrc.petscSection();
- Vec vec = fieldSrc.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
+ VecVisitorMesh fieldVisitor(fieldSrc);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesNondim[i++];
+ fieldArray[off+d] = valuesNondim[i++];
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
- } // Setup source field
+ } // setup source field
Field<SubMesh> field(submesh);
field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-
field.copy(fieldSrc);
+ VecVisitorMesh fieldVisitor(field);
+ const PetscScalar* fieldArray = fieldVisitor.localArray();
const PylithScalar tolerance = 1.0e-6;
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++], array[off+d], tolerance);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++], fieldArray[off+d], tolerance);
} // for
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
} // testCopy
// ----------------------------------------------------------------------
@@ -567,71 +509,51 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
Field<SubMesh> fieldSrc(submesh);
- { // Setup source field
+ { // setup source field
fieldSrc.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
fieldSrc.allocate();
- PetscSection section = fieldSrc.petscSection();
- Vec vec = fieldSrc.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
+ VecVisitorMesh fieldVisitor(fieldSrc);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesA[i++];
+ fieldArray[off+d] = valuesA[i++];
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
- } // Setup source field
+ } // setup source field
Field<SubMesh> field(submesh);
- field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
- field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
- { // Setup destination field
+ { // setup destination field
+ field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
+ field.allocate();
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesB[i++];
+ fieldArray[off+d] = valuesB[i++];
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
- } // Setup destination field
+ } // setup destination field
field += fieldSrc;
+ VecVisitorMesh fieldVisitor(field);
+ const PetscScalar* fieldArray = fieldVisitor.localArray();
const PylithScalar tolerance = 1.0e-6;
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
- for(PetscInt d = 0; d < fiberDim; ++d) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesA[i] + valuesB[i], array[off+d], tolerance);
- ++i;
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
+ for(PetscInt d = 0; d < fiberDim; ++d, ++i) {
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesA[i] + valuesB[i], fieldArray[off+d], tolerance);
} // for
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
} // testOperateAdd
// ----------------------------------------------------------------------
@@ -650,48 +572,39 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
Field<SubMesh> field(submesh);
- field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
- field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
+ { // setup field
+ field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
+ field.allocate();
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
+ for(PetscInt d = 0; d < fiberDim; ++d)
+ fieldArray[off+d] = valuesNondim[i++];
+ } // for
+ } // setup field
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
- for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesNondim[i++];
- } // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
-
field.scale(scale);
field.addDimensionOkay(true);
field.dimensionalize();
const PylithScalar tolerance = 1.0e-6;
- i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d) {
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++]*scale, array[off+d], tolerance);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesNondim[i++]*scale, fieldArray[off+d], tolerance);
} // for
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
} // testDimensionalize
// ----------------------------------------------------------------------
@@ -710,31 +623,22 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
+ PetscDM dmMesh = submesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
Field<SubMesh> field(submesh);
field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
field.allocate();
- PetscSection section = field.petscSection();
- Vec vec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(vec);
-
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesNondim[i++];
+ fieldArray[off+d] = valuesNondim[i++];
} // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
field.view("Testing view");
} // testView
@@ -749,21 +653,19 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
Field<SubMesh> field(submesh);
field.newSection(FieldBase::VERTICES_FIELD, fiberDim);
field.allocate();
-
- const int sizeE = (vEnd-vStart) * fiberDim;
-
+
CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
field.createScatter(submesh);
+
+ DM dmMesh = submesh.dmMesh();
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
const Field<SubMesh>::ScatterInfo& sinfo = field._getScatter("");
CPPUNIT_ASSERT(sinfo.dm);
@@ -771,6 +673,7 @@
int size = 0;
VecGetSize(sinfo.vector, &size);
+ const int sizeE = (vEnd-vStart) * fiberDim;
CPPUNIT_ASSERT_EQUAL(sizeE, size);
// Make sure we can do multiple calls to createScatter().
@@ -807,28 +710,27 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
Field<SubMesh> field(submesh);
field.newSection(FieldBase::VERTICES_FIELD, fiberDim);
field.allocate();
- const int sizeE = (vEnd-vStart) * fiberDim;
-
CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
field.createScatterWithBC(submesh);
CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
+
+ DM dmMesh = submesh.dmMesh();
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
const Field<SubMesh>::ScatterInfo& sinfo = field._getScatter("");
CPPUNIT_ASSERT(sinfo.dm);
CPPUNIT_ASSERT(sinfo.vector);
int size = 0;
VecGetSize(sinfo.vector, &size);
+ const int sizeE = (vEnd-vStart) * fiberDim;
CPPUNIT_ASSERT_EQUAL(sizeE, size);
// Make sure we can do multiple calls to createScatterWithBC().
@@ -865,13 +767,7 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
- DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
Field<SubMesh> field(submesh);
field.newSection(FieldBase::VERTICES_FIELD, fiberDim);
field.allocate();
@@ -883,10 +779,14 @@
CPPUNIT_ASSERT(sinfo.dm);
CPPUNIT_ASSERT(sinfo.vector);
+ DM dmMesh = submesh.dmMesh();
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
const PetscVec vec = field.vector();
CPPUNIT_ASSERT_EQUAL(sinfo.vector, vec);
int size = 0;
- err = VecGetSize(vec, &size);CHECK_PETSC_ERROR(err);
+ PetscErrorCode err = VecGetSize(vec, &size);CHECK_PETSC_ERROR(err);
const int sizeE = (vEnd-vStart) * fiberDim;
CPPUNIT_ASSERT_EQUAL(sizeE, size);
} // testVector
@@ -907,39 +807,34 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
+
DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
Field<SubMesh> field(submesh);
- field.newSection(FieldBase::VERTICES_FIELD, fiberDim);
- field.allocate();
- PetscSection section = field.petscSection();
- Vec secvec = field.localVector();
- CPPUNIT_ASSERT(section);CPPUNIT_ASSERT(secvec);
+ { // setup field
+ field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
+ field.allocate();
+ VecVisitorMesh fieldVisitor(field);
+ PetscScalar* fieldArray = fieldVisitor.localArray();
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(secvec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ const PetscInt off = fieldVisitor.sectionOffset(v);
+ for(PetscInt d = 0; d < fiberDim; ++d)
+ fieldArray[off+d] = valuesE[i++];
+ } // for
+ } // setup field
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
- for(PetscInt d = 0; d < fiberDim; ++d)
- array[off+d] = valuesE[i++];
- } // for
- err = VecRestoreArray(secvec, &array);CHECK_PETSC_ERROR(err);
-
field.createScatter(submesh, context);
field.scatterSectionToVector(context);
- const PetscVec vec = field.vector(context);
- CPPUNIT_ASSERT(0 != vec);
- int size = 0;
+
+ PetscErrorCode err = 0;
+ const PetscVec vec = field.vector(context);CPPUNIT_ASSERT(vec);
+ PetscInt size = 0;
err = VecGetSize(vec, &size);CHECK_PETSC_ERROR(err);
- PylithScalar* valuesVec = 0;
+ PetscScalar* valuesVec = NULL;
err = VecGetArray(vec, &valuesVec);CHECK_PETSC_ERROR(err);
const PylithScalar tolerance = 1.0e-06;
@@ -966,25 +861,20 @@
Mesh mesh;
SubMesh submesh;
_buildMesh(&mesh, &submesh);
+
DM dmMesh = submesh.dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
Field<SubMesh> field(submesh);
- field.newSection(FieldBase::VERTICES_FIELD, fiberDim);
+ field.newSection(Field<SubMesh>::VERTICES_FIELD, fiberDim);
field.allocate();
- PetscSection section = field.petscSection();
- CPPUNIT_ASSERT(section);
field.createScatter(submesh, context);
-
- const PetscVec vec = field.vector(context);
- CPPUNIT_ASSERT(0 != vec);
- int size = 0;
- err = VecGetSize(vec, &size);CHECK_PETSC_ERROR(err);
- PylithScalar* valuesVec = 0;
+ const PetscVec vec = field.vector(context);CPPUNIT_ASSERT(vec);
+ PetscInt size = 0;
+ PetscErrorCode err = VecGetSize(vec, &size);CHECK_PETSC_ERROR(err);
+ PetscScalar* valuesVec = NULL;
err = VecGetArray(vec, &valuesVec);CHECK_PETSC_ERROR(err);
const PylithScalar tolerance = 1.0e-06;
@@ -993,20 +883,6 @@
for (int i=0; i < sizeE; ++i)
valuesVec[i] = valuesE[i];
err = VecRestoreArray(vec, &valuesVec);CHECK_PETSC_ERROR(err);
-
- field.scatterVectorToSection(context);
-
- PetscScalar *array;
- PetscInt i = 0;
- err = VecGetArray(vec, &array);CHECK_PETSC_ERROR(err);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt off;
-
- err = PetscSectionGetOffset(section, v, &off);CHECK_PETSC_ERROR(err);
- for(PetscInt d = 0; d < fiberDim; ++d)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesE[i++], array[off+d], tolerance);
- } // for
- err = VecRestoreArray(vec, &array);CHECK_PETSC_ERROR(err);
} // testScatterVectorToSection
// ----------------------------------------------------------------------
@@ -1014,25 +890,9 @@
pylith::topology::TestFieldSubMesh::_buildMesh(Mesh* mesh,
SubMesh* submesh)
{ // _buildMesh
- assert(0 != mesh);
- assert(0 != submesh);
+ assert(mesh);
+ assert(submesh);
- mesh->createSieveMesh(_TestFieldSubMesh::cellDim);
- const ALE::Obj<Mesh::SieveMesh>& sieveMesh = mesh->sieveMesh();
- CPPUNIT_ASSERT(!sieveMesh.isNull());
-
- ALE::Obj<Mesh::SieveMesh::sieve_type> sieve =
- new Mesh::SieveMesh::sieve_type(sieveMesh->comm());
- CPPUNIT_ASSERT(!sieve.isNull());
-
- ALE::Obj<SieveFlexMesh::sieve_type> s =
- new SieveFlexMesh::sieve_type(sieve->comm(), sieve->debug());
- CPPUNIT_ASSERT(!s.isNull());
-
- mesh->createDMMesh(_TestFieldSubMesh::cellDim);
- DM dmMesh = mesh->dmMesh();
- PetscErrorCode err;
-
const int cellDim = _TestFieldSubMesh::cellDim;
const int ncells = _TestFieldSubMesh::ncells;
const int* cells = _TestFieldSubMesh::cells;
@@ -1041,75 +901,56 @@
const int spaceDim = _TestFieldSubMesh::cellDim;
const PylithScalar* coordinates = _TestFieldSubMesh::coordinates;
const bool interpolate = false;
- ALE::SieveBuilder<SieveFlexMesh>::buildTopology(s, cellDim, ncells, (int*) cells,
- nvertices, interpolate,
- ncorners);
- std::map<Mesh::SieveMesh::point_type,Mesh::SieveMesh::point_type> renumbering;
- ALE::ISieveConverter::convertSieve(*s, *sieve, renumbering);
- sieveMesh->setSieve(sieve);
- sieveMesh->stratify();
- ALE::SieveBuilder<SieveMesh>::buildCoordinates(sieveMesh, spaceDim,
- coordinates);
-
+
+ PetscErrorCode err = 0;
+
+ mesh->createDMMesh(_TestFieldSubMesh::cellDim);
+ PetscDM dmMesh = mesh->dmMesh();CPPUNIT_ASSERT(dmMesh);
err = DMPlexSetChart(dmMesh, 0, ncells+nvertices);CHECK_PETSC_ERROR(err);
for(PetscInt c = 0; c < ncells; ++c) {
err = DMPlexSetConeSize(dmMesh, c, ncorners);CHECK_PETSC_ERROR(err);
- }
+ } // for
err = DMSetUp(dmMesh);CHECK_PETSC_ERROR(err);
PetscInt *cone = new PetscInt[ncorners];
for(PetscInt c = 0; c < ncells; ++c) {
for(PetscInt v = 0; v < ncorners; ++v) {
cone[v] = cells[c*ncorners+v]+ncells;
- }
+ } // for
err = DMPlexSetCone(dmMesh, c, cone);CHECK_PETSC_ERROR(err);
} // for
- delete [] cone; cone = 0;
+ delete[] cone; cone = 0;
err = DMPlexSymmetrize(dmMesh);CHECK_PETSC_ERROR(err);
err = DMPlexStratify(dmMesh);CHECK_PETSC_ERROR(err);
- PetscSection coordSection;
- Vec coordVec;
- PetscScalar *coords;
- PetscInt coordSize;
+ PetscSection coordSection = NULL;
+ PetscVec coordVec = NULL;
+ PetscScalar *coords = NULL;
+ PetscInt coordSize = 0;
err = DMPlexGetCoordinateSection(dmMesh, &coordSection);CHECK_PETSC_ERROR(err);
err = PetscSectionSetChart(coordSection, ncells, ncells+nvertices);CHECK_PETSC_ERROR(err);
for(PetscInt v = ncells; v < ncells+nvertices; ++v) {
err = PetscSectionSetDof(coordSection, v, spaceDim);CHECK_PETSC_ERROR(err);
- }
+ } // for
err = PetscSectionSetUp(coordSection);CHECK_PETSC_ERROR(err);
err = PetscSectionGetStorageSize(coordSection, &coordSize);CHECK_PETSC_ERROR(err);
- err = VecCreate(sieveMesh->comm(), &coordVec);CHECK_PETSC_ERROR(err);
+ err = VecCreate(mesh->comm(), &coordVec);CHECK_PETSC_ERROR(err);
err = VecSetSizes(coordVec, coordSize, PETSC_DETERMINE);CHECK_PETSC_ERROR(err);
err = VecSetFromOptions(coordVec);CHECK_PETSC_ERROR(err);
err = VecGetArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
for(PetscInt v = 0; v < nvertices; ++v) {
PetscInt off;
-
err = PetscSectionGetOffset(coordSection, v+ncells, &off);CHECK_PETSC_ERROR(err);
for(PetscInt d = 0; d < spaceDim; ++d) {
coords[off+d] = coordinates[v*spaceDim+d];
- }
- }
+ } // for
+ } // for
err = VecRestoreArray(coordVec, &coords);CHECK_PETSC_ERROR(err);
err = DMSetCoordinatesLocal(dmMesh, coordVec);CHECK_PETSC_ERROR(err);
- typedef Mesh::SieveMesh::int_section_type::chart_type chart_type;
- const ALE::Obj<SieveMesh::int_section_type>& groupField =
- sieveMesh->getIntSection(_TestFieldSubMesh::label);
- assert(!groupField.isNull());
-
const int numPoints = _TestFieldSubMesh::groupSize;
- const int numVertices = sieveMesh->depthStratum(0)->size();
- const int numCells = sieveMesh->heightStratum(0)->size();
- groupField->setChart(chart_type(numCells, numCells+numVertices));
- for(int i=0; i < numPoints; ++i)
- groupField->setFiberDimension(numCells+_TestFieldSubMesh::groupVertices[i],
- 1);
- sieveMesh->allocate(groupField);
-
for(PetscInt i = 0; i < numPoints; ++i) {
err = DMPlexSetLabelValue(dmMesh, _TestFieldSubMesh::label, ncells+_TestFieldSubMesh::groupVertices[i], 1);CHECK_PETSC_ERROR(err);
- }
+ } // for
spatialdata::geocoords::CSCart cs;
cs.setSpaceDim(spaceDim);
Modified: short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsMesh.cc 2013-03-20 02:27:39 UTC (rev 21589)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsMesh.cc 2013-03-20 22:32:51 UTC (rev 21590)
@@ -23,6 +23,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
@@ -31,8 +33,6 @@
// ----------------------------------------------------------------------
typedef pylith::topology::Fields<pylith::topology::Field<pylith::topology::Mesh> > FieldsMesh;
-typedef pylith::topology::Mesh::RealSection RealSection;
-typedef pylith::topology::Mesh::SieveMesh SieveMesh;
// ----------------------------------------------------------------------
void
@@ -56,7 +56,7 @@
void
pylith::topology::TestFieldsMesh::testConstructor(void)
{ // testConstructor
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
} // testConstructor
@@ -65,7 +65,7 @@
void
pylith::topology::TestFieldsMesh::testAdd(void)
{ // testAdd
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
const char* label = "field";
@@ -81,15 +81,9 @@
{ // testAddDomain
const int fiberDim = 3;
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
- DM dmMesh = _mesh->dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
const char* label = "field";
fields.add(label, "velocity", Field<Mesh>::VERTICES_FIELD, fiberDim);
const size_t size = 1;
@@ -97,13 +91,16 @@
Field<Mesh>& field = fields.get(label);
field.allocate();
- PetscSection section = field.petscSection();
- CPPUNIT_ASSERT(section);
+
+ PetscDM dmMesh = _mesh->dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
+ VecVisitorMesh fieldVisitor(field);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(fiberDim, dof);
- }
+ CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+ } // for
} // testAddDomain
// ----------------------------------------------------------------------
@@ -111,7 +108,7 @@
void
pylith::topology::TestFieldsMesh::testDelete(void)
{ // testDelete
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
const char* labelA = "field A";
@@ -134,7 +131,7 @@
void
pylith::topology::TestFieldsMesh::testGet(void)
{ // testGet
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
const char* label = "field";
@@ -147,14 +144,14 @@
void
pylith::topology::TestFieldsMesh::testGetConst(void)
{ // testGetConst
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
const char* label = "field";
fields.add(label, "velocity");
const FieldsMesh* fieldsPtr = &fields;
- CPPUNIT_ASSERT(0 != fieldsPtr);
+ CPPUNIT_ASSERT(fieldsPtr);
const Field<Mesh>& field = fieldsPtr->get(label);
} // testGetConst
@@ -163,7 +160,7 @@
void
pylith::topology::TestFieldsMesh::testHasField(void)
{ // testHasField
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
fields.add("field A", "velocity");
@@ -187,15 +184,9 @@
{ // testCopyLayout
const int fiberDim = 3;
- CPPUNIT_ASSERT(0 != _mesh);
+ CPPUNIT_ASSERT(_mesh);
FieldsMesh fields(*_mesh);
- DM dmMesh = _mesh->dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
const char* labelA = "field A";
fields.add(labelA, "displacement", Field<Mesh>::VERTICES_FIELD, fiberDim);
@@ -208,14 +199,17 @@
const size_t size = 2;
CPPUNIT_ASSERT_EQUAL(size, fields._fields.size());
+
+ PetscDM dmMesh = _mesh->dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
const Field<Mesh>& field = fields.get(labelB);
- PetscSection section = field.petscSection();
- CPPUNIT_ASSERT(section);
+ VecVisitorMesh fieldVisitor(field);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(fiberDim, dof);
- }
+ CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+ } // for
} // testCopyLayout
Deleted: short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.cc 2013-03-20 02:27:39 UTC (rev 21589)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.cc 2013-03-20 22:32:51 UTC (rev 21590)
@@ -1,431 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-// Brad T. Aagaard, U.S. Geological Survey
-// Charles A. Williams, GNS Science
-// Matthew G. Knepley, University of Chicago
-//
-// This code was developed as part of the Computational Infrastructure
-// for Geodynamics (http://geodynamics.org).
-//
-// Copyright (c) 2010-2012 University of California, Davis
-//
-// See COPYING for license information.
-//
-// ----------------------------------------------------------------------
-//
-
-#include <portinfo>
-
-#include "TestFieldsNewMesh.hh" // Implementation of class methods
-
-#include "pylith/topology/Mesh.hh" // USES Mesh
-#include "pylith/topology/Field.hh" // USES Field
-#include "pylith/topology/FieldsNew.hh" // USES FieldsNew
-
-#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
-
-// ----------------------------------------------------------------------
-CPPUNIT_TEST_SUITE_REGISTRATION( pylith::topology::TestFieldsNewMesh );
-
-// ----------------------------------------------------------------------
-typedef pylith::topology::FieldsNew<pylith::topology::Mesh> FieldsNewMesh;
-typedef pylith::topology::Mesh::SieveMesh SieveMesh;
-typedef pylith::topology::Mesh::RealUniformSection RealUniformSection;
-
-// ----------------------------------------------------------------------
-void
-pylith::topology::TestFieldsNewMesh::setUp(void)
-{ // setUp
- _mesh = new Mesh;
- meshio::MeshIOAscii importer;
- importer.filename("data/tri3.mesh");
- importer.read(_mesh);
-} // setUp
-
-// ----------------------------------------------------------------------
-void
-pylith::topology::TestFieldsNewMesh::tearDown(void)
-{ // tearDown
- delete _mesh; _mesh = 0;
-} // tearDown
-
-// ----------------------------------------------------------------------
-// Test constructor.
-void
-pylith::topology::TestFieldsNewMesh::testConstructor(void)
-{ // testConstructor
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-} // testConstructor
-
-// ----------------------------------------------------------------------
-// Test hasField().
-void
-pylith::topology::TestFieldsNewMesh::testHasField(void)
-{ // testHasField
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
-
- CPPUNIT_ASSERT_EQUAL(true, fields.hasField("field A"));
- CPPUNIT_ASSERT_EQUAL(false, fields.hasField("field B"));
- CPPUNIT_ASSERT_EQUAL(false, fields.hasField("field C"));
-
- fields.add("field B", "displacement", 3, FieldBase::VECTOR);
-
- CPPUNIT_ASSERT_EQUAL(true, fields.hasField("field A"));
- CPPUNIT_ASSERT_EQUAL(true, fields.hasField("field B"));
- CPPUNIT_ASSERT_EQUAL(false, fields.hasField("field C"));
-
-} // testHasField
-
-// ----------------------------------------------------------------------
-// Test add().
-void
-pylith::topology::TestFieldsNewMesh::testAdd(void)
-{ // testAdd
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
-
- const size_t size = 2;
- CPPUNIT_ASSERT_EQUAL(size, fields._fields.size());
-} // testAdd
-
-// ----------------------------------------------------------------------
-// Test allocate(sequence).
-void
-pylith::topology::TestFieldsNewMesh::testAllocateSequence(void)
-{ // testAllocateSequence
- const int fiberDim = 7;
-
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "other", 4, FieldBase::OTHER);
-
- const ALE::Obj<SieveMesh>& sieveMesh = _mesh->sieveMesh();
- CPPUNIT_ASSERT(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& vertices =
- sieveMesh->depthStratum(0);
- CPPUNIT_ASSERT(!vertices.isNull());
-
- fields.allocate(vertices);
-
- const size_t size = 2;
- CPPUNIT_ASSERT_EQUAL(size, fields._fields.size());
-
- const ALE::Obj<RealUniformSection>& section = fields.section();
- CPPUNIT_ASSERT(!section.isNull());
- for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
- v_iter != vertices->end();
- ++v_iter)
- CPPUNIT_ASSERT_EQUAL(fiberDim, section->getFiberDimension(*v_iter));
-} // testAllocateSequence
-
-// ----------------------------------------------------------------------
-// Test allocate(array).
-void
-pylith::topology::TestFieldsNewMesh::testAllocateArray(void)
-{ // testAllocateSequence
- const int fiberDim = 7;
- const int nptsIn = 3;
- const int ptsIn[nptsIn] = {
- 1, 3, 4,
- };
- const int nptsOut = 1;
- const int ptsOut[nptsOut] = {
- 2,
- };
-
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "other", 4, FieldBase::OTHER);
-
- int_array verticesIn(nptsIn);
- for (int i=0; i < nptsIn; ++i)
- verticesIn = ptsIn[i];
-
- int_array verticesOut(nptsOut);
- for (int i=0; i < nptsOut; ++i)
- verticesOut = ptsOut[i];
-
- fields.allocate(verticesIn);
-
- const size_t size = 2;
- CPPUNIT_ASSERT_EQUAL(size, fields._fields.size());
-
- const ALE::Obj<RealUniformSection>& section = fields.section();
- CPPUNIT_ASSERT(!section.isNull());
- for (int i=0; i < nptsIn; ++i)
- CPPUNIT_ASSERT_EQUAL(fiberDim, section->getFiberDimension(verticesIn[i]));
- for (int i=0; i < nptsOut; ++i)
- CPPUNIT_ASSERT_EQUAL(0, section->getFiberDimension(verticesOut[i]));
-} // testAllocateArray
-
-// ----------------------------------------------------------------------
-// Test allocate(domain).
-void
-pylith::topology::TestFieldsNewMesh::testAllocateDomain(void)
-{ // testAllocateDomain
- const int fiberDim = 7;
-
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "other", 4, FieldBase::OTHER);
- fields.allocate(Field<Mesh>::VERTICES_FIELD);
-
- const size_t size = 2;
- CPPUNIT_ASSERT_EQUAL(size, fields._fields.size());
-
- const ALE::Obj<RealUniformSection>& section = fields.section();
- CPPUNIT_ASSERT(!section.isNull());
- const ALE::Obj<SieveMesh>& sieveMesh = _mesh->sieveMesh();
- CPPUNIT_ASSERT(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& vertices =
- sieveMesh->depthStratum(0);
- CPPUNIT_ASSERT(!vertices.isNull());
- for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
- v_iter != vertices->end();
- ++v_iter)
- CPPUNIT_ASSERT_EQUAL(fiberDim, section->getFiberDimension(*v_iter));
-} // testAllocateDomain
-
-// ----------------------------------------------------------------------
-// Test get().
-void
-pylith::topology::TestFieldsNewMesh::testGet(void)
-{ // testGet
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
- DM dmMesh = _mesh->dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
-
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
- fields.allocate(FieldBase::VERTICES_FIELD);
-
- // Check field A
- Field<Mesh>& fieldA = fields.get("field A");
- CPPUNIT_ASSERT_EQUAL(std::string("velocity"), std::string(fieldA.label()));
- CPPUNIT_ASSERT_EQUAL(FieldBase::VECTOR,
- fieldA.vectorFieldType());
- CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), fieldA.scale());
- CPPUNIT_ASSERT_EQUAL(false, fieldA.addDimensionOkay());
-
- PetscSection sectionA = fieldA.petscSection();
- CPPUNIT_ASSERT(sectionA);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(sectionA, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(3, dof);
- }
-
- // Check field B
- Field<Mesh>& fieldB = fields.get("field B");
- CPPUNIT_ASSERT_EQUAL(std::string("displacement"),
- std::string(fieldB.label()));
- CPPUNIT_ASSERT_EQUAL(FieldBase::OTHER,
- fieldB.vectorFieldType());
- CPPUNIT_ASSERT_EQUAL(PylithScalar(2.0), fieldB.scale());
- CPPUNIT_ASSERT_EQUAL(true, fieldB.addDimensionOkay());
-
- PetscSection sectionB = fieldB.petscSection();
- CPPUNIT_ASSERT(sectionB);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(sectionB, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(4, dof);
- }
-
- // Make sure we can clone field B
- Field<Mesh> fieldC(*_mesh);
- fieldC.cloneSection(fieldB);
- fieldC.copy(fieldB);
-} // testGet
-
-// ----------------------------------------------------------------------
-// Test get() const.
-void
-pylith::topology::TestFieldsNewMesh::testGetConst(void)
-{ // testGetConst
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
- DM dmMesh = _mesh->dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
-
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
- fields.allocate(FieldBase::VERTICES_FIELD);
-
- // Check field A
- const Field<Mesh>& fieldA = fields.get("field A");
- CPPUNIT_ASSERT_EQUAL(std::string("velocity"), std::string(fieldA.label()));
- CPPUNIT_ASSERT_EQUAL(FieldBase::VECTOR,
- fieldA.vectorFieldType());
- CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), fieldA.scale());
- CPPUNIT_ASSERT_EQUAL(false, fieldA.addDimensionOkay());
-
- PetscSection sectionA = fieldA.petscSection();
- CPPUNIT_ASSERT(sectionA);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(sectionA, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(3, dof);
- }
-
- // Check field B
- const Field<Mesh>& fieldB = fields.get("field B");
- CPPUNIT_ASSERT_EQUAL(std::string("displacement"),
- std::string(fieldB.label()));
- CPPUNIT_ASSERT_EQUAL(FieldBase::OTHER,
- fieldB.vectorFieldType());
- CPPUNIT_ASSERT_EQUAL(PylithScalar(2.0), fieldB.scale());
- CPPUNIT_ASSERT_EQUAL(true, fieldB.addDimensionOkay());
-
- PetscSection sectionB = fieldB.petscSection();
- CPPUNIT_ASSERT(sectionB);
- for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(sectionB, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(4, dof);
- }
-} // testGetConst
-
-// ----------------------------------------------------------------------
-// Test mesh().
-void
-pylith::topology::TestFieldsNewMesh::testMesh(void)
-{ // testMesh
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- const Mesh& mesh = fields.mesh();
-} // testMesh
-
-// ----------------------------------------------------------------------
-// Test fiberDim().
-void
-pylith::topology::TestFieldsNewMesh::testFiberDim(void)
-{ // testFiberDim
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
-
- CPPUNIT_ASSERT_EQUAL(7, fields.fiberDim());
-} // testFiberDim
-
-// ----------------------------------------------------------------------
-// Test sectionIndex().
-void
-pylith::topology::TestFieldsNewMesh::testSectionIndex(void)
-{ // testSectionIndex
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
-
- CPPUNIT_ASSERT_EQUAL(0, fields.sectionIndex("field A"));
- CPPUNIT_ASSERT_EQUAL(3, fields.sectionIndex("field B"));
-} // testSectionIndex
-
-// ----------------------------------------------------------------------
-// Test sectionFiberDim().
-void
-pylith::topology::TestFieldsNewMesh::testSectionFiberDim(void)
-{ // testSectionFiberDim
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
-
- CPPUNIT_ASSERT_EQUAL(3, fields.sectionFiberDim("field A"));
- CPPUNIT_ASSERT_EQUAL(4, fields.sectionFiberDim("field B"));
-} // testSectionFiberDim
-
-// ----------------------------------------------------------------------
-// Test complete().
-void
-pylith::topology::TestFieldsNewMesh::testComplete(void)
-{ // testComplete
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
- fields.allocate(FieldBase::VERTICES_FIELD);
-
- fields.complete();
-} // testComplete
-
-// ----------------------------------------------------------------------
-// Test fieldNames() const.
-void
-pylith::topology::TestFieldsNewMesh::testFieldNames(void)
-{ // testFieldNames
- const int numFieldsE = 2;
- const char* namesE[2] = {
- "field A",
- "field B"
- };
-
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
-
- int numFields = 0;
- char** names = 0;
- fields.fieldNames(&numFields, &names);
-
- CPPUNIT_ASSERT_EQUAL(numFieldsE, numFields);
-
- for (int i=0; i < numFields; ++i)
- CPPUNIT_ASSERT_EQUAL(std::string(namesE[i]), std::string(names[i]));
-
- for (int i=0; i < numFields; ++i) {
- delete[] names[i]; names[i] = 0;
- } // for
- delete[] names; names = 0;
-} // testFieldNames
-
-// ----------------------------------------------------------------------
-// Test view().
-void
-pylith::topology::TestFieldsNewMesh::testView(void)
-{ // testView
- CPPUNIT_ASSERT(0 != _mesh);
- FieldsNewMesh fields(*_mesh);
-
- fields.add("field A", "velocity", 3, FieldBase::VECTOR);
- fields.add("field B", "displacement", 4, FieldBase::OTHER, 2.0, true);
- fields.allocate(FieldBase::VERTICES_FIELD);
-
- fields.view("TEST VIEW");
-} // testView
-
-
-// End of file
Deleted: short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.hh 2013-03-20 02:27:39 UTC (rev 21589)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsNewMesh.hh 2013-03-20 22:32:51 UTC (rev 21590)
@@ -1,131 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-// Brad T. Aagaard, U.S. Geological Survey
-// Charles A. Williams, GNS Science
-// Matthew G. Knepley, University of Chicago
-//
-// This code was developed as part of the Computational Infrastructure
-// for Geodynamics (http://geodynamics.org).
-//
-// Copyright (c) 2010-2012 University of California, Davis
-//
-// See COPYING for license information.
-//
-// ----------------------------------------------------------------------
-//
-
-/**
- * @file unittests/libtests/topology/TestFieldsNewMesh.hh
- *
- * @brief C++ unit testing for FieldsNew<Mesh>.
- */
-
-#if !defined(pylith_topology_testfieldsnewmesh_hh)
-#define pylith_topology_testfieldsnewmesh_hh
-
-// Include directives ---------------------------------------------------
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "pylith/topology/topologyfwd.hh" // forward declarations
-
-// Forward declarations -------------------------------------------------
-/// Namespace for pylith package
-namespace pylith {
- namespace topology {
- class TestFieldsNewMesh;
- } // topology
-} // pylith
-
-// TestField -------------------------------------------------------------
-/// C++ unit testing for Field.
-class pylith::topology::TestFieldsNewMesh : public CppUnit::TestFixture
-{ // class TestField
-
- // CPPUNIT TEST SUITE /////////////////////////////////////////////////
- CPPUNIT_TEST_SUITE( TestFieldsNewMesh );
-
- CPPUNIT_TEST( testConstructor );
- CPPUNIT_TEST( testHasField );
- CPPUNIT_TEST( testAdd );
- CPPUNIT_TEST( testAllocateSequence );
- CPPUNIT_TEST( testAllocateArray );
- CPPUNIT_TEST( testAllocateDomain );
- CPPUNIT_TEST( testGet );
- CPPUNIT_TEST( testGetConst );
- CPPUNIT_TEST( testMesh );
- CPPUNIT_TEST( testFiberDim );
- CPPUNIT_TEST( testSectionIndex );
- CPPUNIT_TEST( testSectionFiberDim );
- CPPUNIT_TEST( testComplete );
- CPPUNIT_TEST( testFieldNames );
- CPPUNIT_TEST( testView );
-
- CPPUNIT_TEST_SUITE_END();
-
- // PUBLIC METHODS /////////////////////////////////////////////////////
-public :
-
- /// Setup test case.
- void setUp(void);
-
- /// Tear down test case.
- void tearDown(void);
-
- /// Test constructor.
- void testConstructor(void);
-
- /// Test hasField().
- void testHasField(void);
-
- /// Test add().
- void testAdd(void);
-
- /// Test allocate(label_sequence).
- void testAllocateSequence(void);
-
- /// Test allocate(int_array).
- void testAllocateArray(void);
-
- /// Test allocate(domain).
- void testAllocateDomain(void);
-
- /// Test getField().
- void testGet(void);
-
- /// Test getField() for const FieldsNew.
- void testGetConst(void);
-
- /// Test mesh().
- void testMesh(void);
-
- /// Test fiberDim().
- void testFiberDim(void);
-
- /// Test sectionIndex().
- void testSectionIndex(void);
-
- /// Test sectionFiberDim().
- void testSectionFiberDim(void);
-
- /// Test complete().
- void testComplete(void);
-
- /// Test fieldNames().
- void testFieldNames(void);
-
- /// Test view().
- void testView(void);
-
-// PRIVATE MEMBERS /////////////////////////////////////////////////////
-private :
-
- Mesh* _mesh;
-
-}; // class TestFieldsNewMesh
-
-#endif // pylith_topology_testfieldsnewmesh_hh
-
-
-// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsSubMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsSubMesh.cc 2013-03-20 02:27:39 UTC (rev 21589)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/TestFieldsSubMesh.cc 2013-03-20 22:32:51 UTC (rev 21590)
@@ -23,6 +23,8 @@
#include "pylith/topology/SubMesh.hh" // USES SubMesh
#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
@@ -31,8 +33,6 @@
// ----------------------------------------------------------------------
typedef pylith::topology::Fields<pylith::topology::Field<pylith::topology::SubMesh> > FieldsSubMesh;
-typedef pylith::topology::SubMesh::RealSection RealSection;
-typedef pylith::topology::SubMesh::SieveMesh SieveMesh;
// ----------------------------------------------------------------------
void
@@ -59,7 +59,7 @@
void
pylith::topology::TestFieldsSubMesh::testConstructor(void)
{ // testConstructor
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
} // testConstructor
@@ -68,7 +68,7 @@
void
pylith::topology::TestFieldsSubMesh::testAdd(void)
{ // testAdd
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
const char* label = "field";
@@ -84,15 +84,9 @@
{ // testAddDomain
const int fiberDim = 3;
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
- DM dmMesh = _submesh->dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
-
const char* label = "field";
fields.add(label, "velocity", Field<SubMesh>::VERTICES_FIELD, fiberDim);
const size_t size = 1;
@@ -100,13 +94,16 @@
Field<SubMesh>& field = fields.get(label);
field.allocate();
- PetscSection section = field.petscSection();
- CPPUNIT_ASSERT(section);
+
+ PetscDM dmMesh = _submesh->dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
+ VecVisitorMesh fieldVisitor(field);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(fiberDim, dof);
- }
+ CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+ } // for
} // testAddDomain
// ----------------------------------------------------------------------
@@ -114,7 +111,7 @@
void
pylith::topology::TestFieldsSubMesh::testDelete(void)
{ // testDelete
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
const char* labelA = "field A";
@@ -136,7 +133,7 @@
void
pylith::topology::TestFieldsSubMesh::testGet(void)
{ // testGet
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
const char* label = "field";
@@ -149,14 +146,14 @@
void
pylith::topology::TestFieldsSubMesh::testGetConst(void)
{ // testGetConst
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
const char* label = "field";
fields.add(label, "displacement");
const FieldsSubMesh* fieldsPtr = &fields;
- CPPUNIT_ASSERT(0 != fieldsPtr);
+ CPPUNIT_ASSERT(fieldsPtr);
const Field<SubMesh>& field = fieldsPtr->get(label);
} // testGetConst
@@ -165,7 +162,7 @@
void
pylith::topology::TestFieldsSubMesh::testHasField(void)
{ // testHasField
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
fields.add("field A", "velocity");
@@ -189,14 +186,8 @@
{ // testCopyLayout
const int fiberDim = 3;
- CPPUNIT_ASSERT(0 != _submesh);
+ CPPUNIT_ASSERT(_submesh);
FieldsSubMesh fields(*_submesh);
- DM dmMesh = _submesh->dmMesh();
- PetscErrorCode err;
- CPPUNIT_ASSERT(dmMesh);
-
- PetscInt vStart, vEnd;
- err = DMPlexGetDepthStratum(dmMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
const char* labelA = "field A";
fields.add(labelA, "velocity", Field<SubMesh>::VERTICES_FIELD, fiberDim);
@@ -211,13 +202,16 @@
const size_t size = 2;
CPPUNIT_ASSERT_EQUAL(size, fields._fields.size());
const Field<SubMesh>& field = fields.get(labelB);
- PetscSection section = field.petscSection();
- CPPUNIT_ASSERT(section);
+
+ PetscDM dmMesh = _submesh->dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
+
+ VecVisitorMesh fieldVisitor(field);
for(PetscInt v = vStart; v < vEnd; ++v) {
- PetscInt dof;
- err = PetscSectionGetDof(section, v, &dof);CHECK_PETSC_ERROR(err);
- CPPUNIT_ASSERT_EQUAL(fiberDim, dof);
- }
+ CPPUNIT_ASSERT_EQUAL(fiberDim, fieldVisitor.sectionDof(v));
+ } // for
} // testCopyLayout
Modified: short/3D/PyLith/trunk/unittests/libtests/topology/TestMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/topology/TestMesh.cc 2013-03-20 02:27:39 UTC (rev 21589)
+++ short/3D/PyLith/trunk/unittests/libtests/topology/TestMesh.cc 2013-03-20 22:32:51 UTC (rev 21590)
@@ -20,6 +20,8 @@
#include "TestMesh.hh" // Implementation of class methods
#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/Stratum.hh" // USES Stratum
+#include "pylith/topology/CoordsVisitor.hh" // USES CoordsVisitor
#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
@@ -164,64 +166,30 @@
normalizer.lengthScale(lengthScale);
mesh.nondimensionalize(normalizer);
- const ALE::Obj<Mesh::SieveMesh>& sieveMesh = mesh.sieveMesh();
- CPPUNIT_ASSERT(!sieveMesh.isNull());
- const ALE::Obj<Mesh::SieveMesh::label_sequence>& vertices =
- sieveMesh->depthStratum(0);
- CPPUNIT_ASSERT(!vertices.isNull());
- const Mesh::SieveMesh::label_sequence::iterator verticesBegin =
- vertices->begin();
- const Mesh::SieveMesh::label_sequence::iterator verticesEnd =
- vertices->end();
- CPPUNIT_ASSERT_EQUAL(numVertices, int(vertices->size()));
+ // Get vertices
+ PetscDM dmMesh = mesh.dmMesh();CPPUNIT_ASSERT(dmMesh);
+ Stratum depthStratum(dmMesh, Stratum::DEPTH, 0);
+ const PetscInt vStart = depthStratum.begin();
+ const PetscInt vEnd = depthStratum.end();
// Check nondimensional coordinates
- const ALE::Obj<Mesh::RealSection>& coordsField =
- sieveMesh->getRealSection("coordinates");
- CPPUNIT_ASSERT(!coordsField.isNull());
- CPPUNIT_ASSERT_EQUAL(spaceDim,
- coordsField->getFiberDimension(*verticesBegin));
- int i = 0;
- for(Mesh::SieveMesh::label_sequence::iterator v_iter = verticesBegin;
- v_iter != verticesEnd;
- ++v_iter) {
- const PylithScalar* coordsVertex = coordsField->restrictPoint(*v_iter);
- CPPUNIT_ASSERT(0 != coordsVertex);
- const PylithScalar tolerance = 1.0e-06;
- for (int iDim=0; iDim < spaceDim; ++iDim) {
- const PylithScalar coordE = coordinates[i++] / lengthScale;
- if (coordE < 1.0)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(coordE, coordsVertex[iDim],
- tolerance);
- else
- CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, coordsVertex[iDim]/coordE,
- tolerance);
+ CoordsVisitor coordsVisitor(dmMesh);
+ const PetscScalar* coordsArray = coordsVisitor.localArray();
+
+ const PylithScalar tolerance = 1.0e-06;
+ for(PetscInt v = vStart, i = 0; v < vEnd; ++v) {
+ CPPUNIT_ASSERT_EQUAL(spaceDim, coordsVisitor.sectionDof(v));
+ const PetscInt off = coordsVisitor.sectionOffset(v);
+ for (int iDim=0; iDim < spaceDim; ++iDim, ++i) {
+ const PylithScalar coordE = coordinates[i] / lengthScale;
+ if (fabs(coordE) < 1.0) {
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(coordE, coordsArray[off+iDim], tolerance);
+ } else {
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, coordsArray[off+iDim]/coordE, tolerance);
+ } // if/else
} // for
} // for
- // Check dimensioned coordinates
- const ALE::Obj<Mesh::RealSection>& coordsDimField =
- sieveMesh->getRealSection("coordinates_dimensioned");
- CPPUNIT_ASSERT(!coordsDimField.isNull());
- CPPUNIT_ASSERT_EQUAL(spaceDim,
- coordsDimField->getFiberDimension(*verticesBegin));
- i = 0;
- for(Mesh::SieveMesh::label_sequence::iterator v_iter = verticesBegin;
- v_iter != verticesEnd;
- ++v_iter) {
- const PylithScalar* coordsVertex = coordsDimField->restrictPoint(*v_iter);
- CPPUNIT_ASSERT(0 != coordsVertex);
- const PylithScalar tolerance = 1.0e-06;
- for (int iDim=0; iDim < spaceDim; ++iDim) {
- const PylithScalar coordE = coordinates[i++];
- if (coordE < 1.0)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(coordE, coordsVertex[iDim],
- tolerance);
- else
- CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, coordsVertex[iDim]/coordE,
- tolerance);
- } // for
- } // for
} // testNondimensionalize
More information about the CIG-COMMITS
mailing list