[cig-commits] r4568 - in short/3D/PyLith/trunk: libsrc/feassemble
unittests/libtests/feassemble
baagaard at geodynamics.org
baagaard at geodynamics.org
Mon Sep 18 21:01:35 PDT 2006
Author: baagaard
Date: 2006-09-18 21:01:35 -0700 (Mon, 18 Sep 2006)
New Revision: 4568
Modified:
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc
short/3D/PyLith/trunk/unittests/libtests/feassemble/test_feassemble.cc
Log:
Implemented test of computeGeometry for 1-D quadrature and linear basis. Fixed bug in 1-D quadrature.
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc 2006-09-18 03:35:26 UTC (rev 4567)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.cc 2006-09-19 04:01:35 UTC (rev 4568)
@@ -46,7 +46,6 @@
{ // _computeGeometry
assert(1 == _cellDim);
assert(1 == _spaceDim);
- assert(0 != cell);
assert(0 != _basisDeriv);
assert(0 != _quadPtsRef);
assert(0 != _quadPts);
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc 2006-09-18 03:35:26 UTC (rev 4567)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature.cc 2006-09-19 04:01:35 UTC (rev 4568)
@@ -26,40 +26,68 @@
void
pylith::feassemble::TestQuadrature::testClone(void)
{ // testClone
- Quadrature1D qOrig;
-
+ // Semi-random values manually set to check cloning
const double jacobianTol = 1.0;
-
const int cellDim = 1;
const int numCorners = 2;
const int numQuadPts = 1;
const int spaceDim = 1;
- const double basis[] = { 0.5, 0.5 };
- const double basisDeriv[] = { -1.0, 1.0 };
- const double quadPtsRef[] = { 0.5 };
- const double quadWts[] = { 1.0 };
+ const double basis[] = { 0.2, 0.4 };
+ const double basisDeriv[] = { 0.8, 1.6 };
+ const double quadPtsRef[] = { 3.2 };
+ const double quadWts[] = { 6.4 };
+ const double quadPts[] = { 12.8 };
+ const double jacobian[] = { 2.56 };
+ const double jacobianInv[] = { 5.12 };
+ const double jacobianDet[] = { 10.24 };
- // Semi-random values manually set to check cloning
- const double quadPts[] = { 2.0 };
- const double jacobian[] = { 4.0 };
- const double jacobianInv[] = { 0.25 };
- const double jacobianDet[] = { 5.0 };
+ // Set values
+ Quadrature1D qOrig;
+ qOrig._jacobianTol = jacobianTol;
+ qOrig._cellDim = cellDim;
+ qOrig._numCorners = numCorners;
+ qOrig._numQuadPts = numQuadPts;
+ qOrig._spaceDim = spaceDim;
- qOrig.jacobianTolerance(jacobianTol);
- qOrig.initialize(basis, basisDeriv, quadPtsRef, quadWts,
- cellDim, numCorners, numQuadPts, spaceDim);
- int size = 1;
+ int size = 2;
+ qOrig._basis = (size > 0) ? new double[size] : 0;
+ memcpy(qOrig._basis, basis, size*sizeof(double));
+
+ size = 2;
+ qOrig._basisDeriv = (size > 0) ? new double[size] : 0;
+ memcpy(qOrig._basisDeriv, basisDeriv, size*sizeof(double));
+
+ size = 1;
+ qOrig._quadPtsRef = (size > 0) ? new double[size] : 0;
+ memcpy(qOrig._quadPtsRef, quadPtsRef, size*sizeof(double));
+
+ size = 1;
+ qOrig._quadWts = (size > 0) ? new double[size] : 0;
+ memcpy(qOrig._quadWts, quadWts, size*sizeof(double));
+
+ size = 1;
+ qOrig._quadPts = (size > 0) ? new double[size] : 0;
memcpy(qOrig._quadPts, quadPts, size*sizeof(double));
+
+ size = 1;
+ qOrig._jacobian = (size > 0) ? new double[size] : 0;
memcpy(qOrig._jacobian, jacobian, size*sizeof(double));
+
+ size = 1;
+ qOrig._jacobianInv = (size > 0) ? new double[size] : 0;
memcpy(qOrig._jacobianInv, jacobianInv, size*sizeof(double));
+
+ size = 1;
+ qOrig._jacobianDet = (size > 0) ? new double[size] : 0;
memcpy(qOrig._jacobianDet, jacobianDet, size*sizeof(double));
-
+
+ // Clone
const Quadrature* qCopy = qOrig.clone();
+
+ // Check clone
CPPUNIT_ASSERT(0 != qCopy);
- // Make sure values match those passed
CPPUNIT_ASSERT_EQUAL(jacobianTol, qCopy->_jacobianTol);
-
CPPUNIT_ASSERT_EQUAL(cellDim, qCopy->_cellDim);
CPPUNIT_ASSERT_EQUAL(numCorners, qCopy->_numCorners);
CPPUNIT_ASSERT_EQUAL(numQuadPts, qCopy->_numQuadPts);
@@ -117,7 +145,6 @@
void
pylith::feassemble::TestQuadrature::testInitialize(void)
{ // initialize
- Quadrature1D q;
const int cellDim = 1;
const int numCorners = 2;
@@ -129,6 +156,7 @@
const double quadWts[] = { 1.0 };
const double jacobianTol = 1.0;
+ Quadrature1D q;
q.initialize(basis, basisDeriv, quadPtsRef, quadWts,
cellDim, numCorners, numQuadPts, spaceDim);
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc 2006-09-18 03:35:26 UTC (rev 4567)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestQuadrature1D.cc 2006-09-19 04:01:35 UTC (rev 4568)
@@ -34,7 +34,79 @@
void
pylith::feassemble::TestQuadrature1D::testLinear(void)
{ // testLinear
- CPPUNIT_ASSERT(false);
+ // Basis fns: N0 = 1-p, N1 = p
+ // Quadrature points: (p=0.5, wt=1.0)
+
+ const int cellDim = 1;
+ const int numCorners = 2;
+ const int numQuadPts = 1;
+ const int spaceDim = 1;
+ const double basis[] = { 0.5, 0.5 };
+ const double basisDeriv[] = { -1.0, 1.0 };
+ const double quadPtsRef[] = { 0.5 };
+ const double quadWts[] = { 1.0 };
+ const double jacobianTol = 1.0;
+
+ Quadrature1D q;
+ q.initialize(basis, basisDeriv, quadPtsRef, quadWts,
+ cellDim, numCorners, numQuadPts, spaceDim);
+
+ // Test cell: x0=-0.25, x1=2.0
+ const int numVertices = 2;
+ const int numCells = 1;
+ const double vertCoords[] = { -0.25, 2.0 };
+ const int cells[] = { 0, 1 };
+ const double quadPts[] = { 0.875 };
+ const double jacobian[] = { 2.25 };
+ const double jacobianInv[] = { 1.0/2.25 };
+ const double jacobianDet[] = { 2.25 };
+
+ // Create mesh with test cell
+ typedef ALE::Sieve<int, int, int> sieve_type;
+ typedef ALE::New::Topology<int, sieve_type> topology_type;
+ typedef ALE::New::Section<topology_type, double> section_type;
+ ALE::Obj<ALE::Mesh> mesh = ALE::Mesh(PETSC_COMM_WORLD, cellDim);
+ ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
+ ALE::Obj<topology_type> topology = new topology_type(mesh->comm());
+
+ const bool interpolate = false;
+ ALE::New::SieveBuilder<sieve_type>::buildTopology(sieve, cellDim, numCells,
+ (int*) cells, numVertices, interpolate, numCorners);
+ sieve->stratify();
+ topology->setPatch(0, sieve);
+ topology->stratify();
+ mesh->setTopologyNew(topology);
+ ALE::New::SieveBuilder<sieve_type>::buildCoordinates(
+ mesh->getSection("coordinates"), spaceDim, vertCoords);
+
+ // Check values from _computeGeometry()
+ const ALE::Mesh::topology_type::patch_type patch = 0;
+ const ALE::Obj<topology_type::label_sequence>& elements =
+ topology->heightStratum(patch, 0);
+ const topology_type::label_sequence::iterator e_iter = elements->begin();
+ const ALE::Obj<ALE::Mesh::section_type>& coordinates =
+ mesh->getSection("coordinates");
+ q._computeGeometry(coordinates, *e_iter);
+
+ int size = 1;
+ CPPUNIT_ASSERT(0 != q._quadPts);
+ for (int i=0; i < size; ++i)
+ CPPUNIT_ASSERT_EQUAL(quadPts[i], q._quadPts[i]);
+
+ size = 1;
+ CPPUNIT_ASSERT(0 != q._jacobian);
+ for (int i=0; i < size; ++i)
+ CPPUNIT_ASSERT_EQUAL(jacobian[i], q._jacobian[i]);
+
+ size = 1;
+ CPPUNIT_ASSERT(0 != q._jacobianInv);
+ for (int i=0; i < size; ++i)
+ CPPUNIT_ASSERT_EQUAL(jacobianInv[i], q._jacobianInv[i]);
+
+ size = 1;
+ CPPUNIT_ASSERT(0 != q._jacobianDet);
+ for (int i=0; i < size; ++i)
+ CPPUNIT_ASSERT_EQUAL(jacobianDet[i], q._jacobianDet[i]);
} // testLinear
// ----------------------------------------------------------------------
Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/test_feassemble.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/test_feassemble.cc 2006-09-18 03:35:26 UTC (rev 4567)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/test_feassemble.cc 2006-09-19 04:01:35 UTC (rev 4568)
@@ -10,6 +10,8 @@
// ----------------------------------------------------------------------
//
+#include "petsc.h"
+
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/BriefTestProgressListener.h>
@@ -23,6 +25,10 @@
main(int argc,
char* argv[])
{ // main
+ // Initialize PETSc
+ PetscErrorCode err = PetscInitialize(&argc, &argv, PETSC_NULL, PETSC_NULL);
+ CHKERRQ(err);
+
// Create event manager and test controller
CppUnit::TestResult controller;
@@ -43,6 +49,10 @@
CppUnit::TextOutputter outputter(&result, std::cerr);
outputter.write();
+ // Finalize PETSc
+ err = PetscFinalize();
+ CHKERRQ(err);
+
return (result.wasSuccessful() ? 0 : 1);
} // main
More information about the cig-commits
mailing list