[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