[cig-commits] r8219 - in short/3D/PyLith/trunk: . libsrc/bc unittests/libtests/bc unittests/libtests/bc/data

brad at geodynamics.org brad at geodynamics.org
Tue Nov 6 16:33:43 PST 2007


Author: brad
Date: 2007-11-06 16:33:42 -0800 (Tue, 06 Nov 2007)
New Revision: 8219

Added:
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticisotropic3d.spatialdb
Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2b.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/bc/data/absorbingdampers.py
   short/3D/PyLith/trunk/unittests/libtests/bc/data/hex8.mesh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/tet4.mesh
Log:
Finished C++ unit tests for absorbing boundary condition. Updated TODO list. Added use of CPPUNIT_TETS_SUB_SUITE in libtests/bc.

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/TODO	2007-11-07 00:33:42 UTC (rev 8219)
@@ -4,16 +4,21 @@
 
 Release 1.0.2
 
-  1. Fix partitioning with cohesive cells.
+  1. Fix memory use on proc 0 when partitioning.
 
-  2. Add check to make sure every material in mesh has a material model.
+  2. Fix problems with buildbot on darwin.
 
+  3. Add check to make sure every material in mesh has a material model.
+
     Add check for overlapping of material ids for bulk and cohesive
     cells.
 
 Release 1.1
 
   1. Finish AbsorbingDampers BC.
+    Python
+    module
+    Python unit tests
 
   2. Finish Neumann BC.
 

Modified: short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc	2007-11-07 00:33:42 UTC (rev 8219)
@@ -142,7 +142,7 @@
 
   // Container for data returned in query of database
   double_array queryData(numValues);
-  double_array quadPtRef(spaceDim);
+  double_array quadPtRef(cellDim);
 
   // Container for damping constants for current cell
   double_array dampingConstsLocal(fiberDim);
@@ -159,6 +159,7 @@
     const double_array& quadPts = _quadrature->quadPts();
     const double_array& quadPtsRef = _quadrature->quadPtsRef();
 
+    dampingConstsGlobal = 0.0;
     for(int iQuad = 0, index=0; iQuad < numQuadPts; ++iQuad, index+=spaceDim) {
       // Compute damping constants in normal/tangential coordinates
       const int err = _db->query(&queryData[0], numValues, 
@@ -183,19 +184,19 @@
       // Compute normal/tangential orientation
       _boundaryMesh->restrict(coordinates, *c_iter, 
 		     &cellVertices[0], cellVertices.size());
-      memcpy(&quadPtRef[0], &quadPtsRef[index], spaceDim*sizeof(double));
+      memcpy(&quadPtRef[0], &quadPtsRef[index], cellDim*sizeof(double));
       cellGeometry.jacobian(&jacobian, &jacobianDet, cellVertices, quadPtRef);
       cellGeometry.orientation(&orientation, jacobian, jacobianDet, 
 			       upDir);
       orientation /= jacobianDet;
 
-      dampingConstsGlobal = 0.0;
       for (int iDim=0; iDim < spaceDim; ++iDim) {
 	for (int jDim=0; jDim < spaceDim; ++jDim)
-	  dampingConstsGlobal[iDim] += 
-	    dampingConstsLocal[jDim]*orientation[iDim*spaceDim+jDim];
+	  dampingConstsGlobal[iQuad*spaceDim+iDim] += 
+	    dampingConstsLocal[jDim]*orientation[jDim*spaceDim+iDim];
 	// Ensure damping constants are positive
-	dampingConstsGlobal[iDim] = fabs(dampingConstsGlobal[iDim]);
+	dampingConstsGlobal[iQuad*spaceDim+iDim] = 
+	  fabs(dampingConstsGlobal[iQuad*spaceDim+iDim]);
       } // for
     } // for
     _dampingConsts->updatePoint(*c_iter, &dampingConstsGlobal[0]);

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/Makefile.am	2007-11-07 00:33:42 UTC (rev 8219)
@@ -25,6 +25,8 @@
 	TestAbsorbingDampersLine2.cc \
 	TestAbsorbingDampersTri3.cc \
 	TestAbsorbingDampersQuad4.cc \
+	TestAbsorbingDampersTet4.cc \
+	TestAbsorbingDampersHex8.cc \
 	TestBoundaryCondition.cc \
 	TestDirichlet.cc \
 	TestDirichletLine2.cc \
@@ -44,6 +46,8 @@
 	TestAbsorbingDampersLine2.hh \
 	TestAbsorbingDampersTri3.hh \
 	TestAbsorbingDampersQuad4.hh \
+	TestAbsorbingDampersTet4.hh \
+	TestAbsorbingDampersHex8.hh \
 	TestBoundaryCondition.hh \
 	TestDirichlet.hh \
 	TestDirichletLine2.hh \
@@ -63,6 +67,8 @@
 	data/AbsorbingDampersDataLine2.cc \
 	data/AbsorbingDampersDataTri3.cc \
 	data/AbsorbingDampersDataQuad4.cc \
+	data/AbsorbingDampersDataTet4.cc \
+	data/AbsorbingDampersDataHex8.cc \
 	data/DirichletData.cc \
 	data/DirichletDataLine2.cc \
 	data/DirichletDataLine2b.cc \
@@ -80,6 +86,8 @@
 	data/AbsorbingDampersDataLine2.hh \
 	data/AbsorbingDampersDataTri3.hh \
 	data/AbsorbingDampersDataQuad4.hh \
+	data/AbsorbingDampersDataTet4.hh \
+	data/AbsorbingDampersDataHex8.hh \
 	data/DirichletData.hh \
 	data/DirichletDataLine2.hh \
 	data/DirichletDataLine2b.hh \

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc	2007-11-07 00:33:42 UTC (rev 8219)
@@ -85,6 +85,8 @@
   CPPUNIT_ASSERT_EQUAL(_data->numVertices, numVertices);
   CPPUNIT_ASSERT_EQUAL(_data->numCells, numCells);
 
+  //boundaryMesh->view("BOUNDARY MESH");
+
   const int boundaryDepth = boundaryMesh->depth()-1; // depth of bndry cells  
   int iCell = 0;
   for(Mesh::label_sequence::iterator c_iter = cells->begin();
@@ -109,6 +111,8 @@
   const int size = bc._dampingConsts->sizeWithBC();
   const double* vals = bc._dampingConsts->restrict();
 
+  //bc._dampingConsts->view("DAMPING CONSTS");
+
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
   const double tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
@@ -275,6 +279,8 @@
     bc->db(&db);
     bc->initialize(*mesh, &cs, upDir);
 
+    //bc->_boundaryMesh->view("BOUNDARY MESH");
+
     // Setup fields
     CPPUNIT_ASSERT(0 != fields);
     fields->addReal("residual");

Added: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.cc	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.cc	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestAbsorbingDampersHex8.hh" // Implementation of class methods
+
+#include "data/AbsorbingDampersDataHex8.hh" // USES AbsorbingDampersDataHex8
+
+#include "pylith/feassemble/Quadrature2Din3D.hh" // USES Quadrature2Din3D
+#include "pylith/feassemble/GeometryQuad3D.hh" // USES GeometryQuad3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::bc::TestAbsorbingDampersHex8 );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::bc::TestAbsorbingDampersHex8::setUp(void)
+{ // setUp
+  _data = new AbsorbingDampersDataHex8();
+  _quadrature = new feassemble::Quadrature2Din3D();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  feassemble::GeometryQuad3D geometry;
+  _quadrature->refGeometry(&geometry);
+} // setUp
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/bc/TestAbsorbingDampersHex8.hh
+ *
+ * @brief C++ TestAbsorbingDampers object.
+ *
+ * C++ unit testing for AbsorbingDampers for mesh with 2-D tri cells.
+ */
+
+#if !defined(pylith_bc_testabsorbingdampershex8_hh)
+#define pylith_bc_testabsorbingdampershex8_hh
+
+#include "TestAbsorbingDampers.hh" // ISA TestAbsorbingDampers
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace bc {
+    class TestAbsorbingDampersHex8;
+  } // bc
+} // pylith
+
+/// C++ unit testing for AbsorbingDampers for mesh with 2-D tri cells.
+class pylith::bc::TestAbsorbingDampersHex8 : public TestAbsorbingDampers
+{ // class TestAbsorbingDampers
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUB_SUITE( TestAbsorbingDampersHex8, TestAbsorbingDampers );
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestAbsorbingDampersHex8
+
+#endif // pylith_bc_absorbingdampershex8_hh
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.cc	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.cc	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestAbsorbingDampersTet4.hh" // Implementation of class methods
+
+#include "data/AbsorbingDampersDataTet4.hh" // USES AbsorbingDampersDataTet4
+
+#include "pylith/feassemble/Quadrature2Din3D.hh" // USES Quadrature2Din3D
+#include "pylith/feassemble/GeometryTri3D.hh" // USES GeometryTri3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::bc::TestAbsorbingDampersTet4 );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::bc::TestAbsorbingDampersTet4::setUp(void)
+{ // setUp
+  _data = new AbsorbingDampersDataTet4();
+  _quadrature = new feassemble::Quadrature2Din3D();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  feassemble::GeometryTri3D geometry;
+  _quadrature->refGeometry(&geometry);
+} // setUp
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/bc/TestAbsorbingDampersTet4.hh
+ *
+ * @brief C++ TestAbsorbingDampers object.
+ *
+ * C++ unit testing for AbsorbingDampers for mesh with 2-D tri cells.
+ */
+
+#if !defined(pylith_bc_testabsorbingdamperstet4_hh)
+#define pylith_bc_testabsorbingdamperstet4_hh
+
+#include "TestAbsorbingDampers.hh" // ISA TestAbsorbingDampers
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace bc {
+    class TestAbsorbingDampersTet4;
+  } // bc
+} // pylith
+
+/// C++ unit testing for AbsorbingDampers for mesh with 2-D tri cells.
+class pylith::bc::TestAbsorbingDampersTet4 : public TestAbsorbingDampers
+{ // class TestAbsorbingDampers
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUB_SUITE( TestAbsorbingDampersTet4, TestAbsorbingDampers );
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestAbsorbingDampersTet4
+
+#endif // pylith_bc_absorbingdamperstet4_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletHex8.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletHex8.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -35,7 +35,7 @@
 { // class TestDirichlet
 
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
-  CPPUNIT_TEST_SUITE( TestDirichletHex8 );
+  CPPUNIT_TEST_SUB_SUITE( TestDirichletHex8, TestDirichlet );
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testSetConstraintSizes );
   CPPUNIT_TEST( testSetConstraints );

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -35,7 +35,7 @@
 { // class TestDirichlet
 
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
-  CPPUNIT_TEST_SUITE( TestDirichletLine2 );
+  CPPUNIT_TEST_SUB_SUITE( TestDirichletLine2, TestDirichlet );
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testSetConstraintSizes );
   CPPUNIT_TEST( testSetConstraints );

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2b.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2b.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletLine2b.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -35,7 +35,7 @@
 { // class TestDirichlet
 
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
-  CPPUNIT_TEST_SUITE( TestDirichletLine2b );
+  CPPUNIT_TEST_SUB_SUITE( TestDirichletLine2b, TestDirichlet );
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testSetConstraintSizes );
   CPPUNIT_TEST( testSetConstraints );

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletQuad4.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletQuad4.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -35,7 +35,7 @@
 { // class TestDirichlet
 
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
-  CPPUNIT_TEST_SUITE( TestDirichletQuad4 );
+  CPPUNIT_TEST_SUB_SUITE( TestDirichletQuad4, TestDirichlet );
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testSetConstraintSizes );
   CPPUNIT_TEST( testSetConstraints );

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTet4.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTet4.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -35,7 +35,7 @@
 { // class TestDirichlet
 
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
-  CPPUNIT_TEST_SUITE( TestDirichletTet4 );
+  CPPUNIT_TEST_SUB_SUITE( TestDirichletTet4, TestDirichlet );
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testSetConstraintSizes );
   CPPUNIT_TEST( testSetConstraints );

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTri3.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestDirichletTri3.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -35,7 +35,7 @@
 { // class TestDirichlet
 
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
-  CPPUNIT_TEST_SUITE( TestDirichletTri3 );
+  CPPUNIT_TEST_SUB_SUITE( TestDirichletTri3, TestDirichlet );
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testSetConstraintSizes );
   CPPUNIT_TEST( testSetConstraints );

Added: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,609 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "AbsorbingDampersDataHex8.hh"
+
+const char* pylith::bc::AbsorbingDampersDataHex8::_meshFilename = 
+  "data/hex8.mesh";
+
+const int pylith::bc::AbsorbingDampersDataHex8::_numBasis = 4;
+const int pylith::bc::AbsorbingDampersDataHex8::_numQuadPts = 4;
+const double pylith::bc::AbsorbingDampersDataHex8::_quadPts[] = {
+  -0.57735027, -0.57735027,
+   0.57735027, -0.57735027,
+   0.57735027,  0.57735027,
+  -0.57735027,  0.57735027,
+};
+const double pylith::bc::AbsorbingDampersDataHex8::_quadWts[] = {
+  1.0, 1.0, 1.0, 1.0,
+};
+const double pylith::bc::AbsorbingDampersDataHex8::_basis[] = {
+  0.62200847,  0.16666667,  0.0446582,   0.16666667,
+  0.16666667,  0.62200847,  0.16666667,  0.0446582,
+  0.0446582,   0.16666667,  0.62200847,  0.16666667,
+  0.16666667,  0.0446582,   0.16666667,  0.62200847,
+};
+const double pylith::bc::AbsorbingDampersDataHex8::_basisDerivRef[] = {
+  -0.39433757, -0.39433757,
+   0.39433757, -0.10566243,
+   0.10566243,  0.10566243,
+  -0.10566243,  0.39433757,
+  -0.39433757, -0.10566243,
+   0.39433757, -0.39433757,
+   0.10566243,  0.39433757,
+  -0.10566243,  0.10566243,
+  -0.10566243, -0.10566243,
+   0.10566243, -0.39433757,
+   0.39433757,  0.39433757,
+  -0.39433757,  0.10566243,
+  -0.10566243, -0.39433757,
+   0.10566243, -0.10566243,
+   0.39433757,  0.10566243,
+  -0.39433757,  0.39433757,
+};
+
+const char* pylith::bc::AbsorbingDampersDataHex8::_spatialDBFilename = 
+  "data/elasticisotropic3d.spatialdb";
+const int pylith::bc::AbsorbingDampersDataHex8::_id = 2;
+const char* pylith::bc::AbsorbingDampersDataHex8::_label = "bc2";
+
+const double pylith::bc::AbsorbingDampersDataHex8::_dt =   0.25;
+const double pylith::bc::AbsorbingDampersDataHex8::_fieldTmdt[] = {
+  1.0,  2.4,  3.0,
+  1.1,  2.2,  3.2,
+  1.2,  2.0,  3.4,
+  1.3,  1.8,  3.6,
+  1.4,  1.6,  3.8,
+  1.5,  1.4,  4.0,
+  1.6,  1.2,  4.2,
+  1.7,  1.0,  4.4,
+  1.8,  0.8,  4.6,
+  1.9,  0.6,  4.8,
+  2.0,  0.4,  5.0,
+  2.1,  0.2,  5.2,
+};
+const double pylith::bc::AbsorbingDampersDataHex8::_fieldT[] = {
+  1.1,  2.3,  3.2,
+  1.3,  2.1,  3.6,
+  1.5,  1.9,  4.0,
+  1.7,  1.7,  4.4,
+  1.9,  1.5,  4.8,
+  2.1,  1.3,  5.2,
+  2.3,  1.1,  5.6,
+  2.5,  0.9,  6.0,
+  2.7,  0.7,  6.4,
+  2.9,  0.5,  6.8,
+  3.1,  0.3,  7.2,
+  3.3,  0.1,  7.6,
+};
+const double pylith::bc::AbsorbingDampersDataHex8::_fieldTpdt[] = {
+  1.2,  1.1,  3.4,
+  1.5,  1.0,  4.0,
+  1.8,  0.9,  4.6,
+  2.1,  0.8,  5.2,
+  2.4,  0.7,  5.8,
+  2.7,  0.6,  6.4,
+  3.0,  0.5,  7.0,
+  3.3,  0.4,  7.6,
+  3.6,  0.3,  8.2,
+  3.9,  0.2,  8.8,
+  4.2,  0.1,  9.4,
+  4.5,  0.0, 10.0,
+};
+
+const int pylith::bc::AbsorbingDampersDataHex8::_spaceDim = 3;
+const int pylith::bc::AbsorbingDampersDataHex8::_cellDim = 2;
+const int pylith::bc::AbsorbingDampersDataHex8::_numVertices = 6;
+const int pylith::bc::AbsorbingDampersDataHex8::_numCells = 2;
+const int pylith::bc::AbsorbingDampersDataHex8::_numCorners = 4;
+const int pylith::bc::AbsorbingDampersDataHex8::_cells[] = {
+  4, 10,  8,  2,
+  6, 12, 10,  4,
+};
+
+
+const double pylith::bc::AbsorbingDampersDataHex8::_dampingConsts[] = {
+  7.5e+06,  1.25e+07,  7.5e+06,
+  7.5e+06,  1.25e+07,  7.5e+06,
+  7.5e+06,  1.25e+07,  7.5e+06,
+  7.5e+06,  1.25e+07,  7.5e+06,
+  7.5e+06,  1.25e+07,  7.5e+06,
+  7.5e+06,  1.25e+07,  7.5e+06,
+  7.5e+06,  1.25e+07,  7.5e+06,
+  7.5e+06,  1.25e+07,  7.5e+06,
+};
+const double pylith::bc::AbsorbingDampersDataHex8::_valsResidual[] = {
+  -5.50000000e+06,  1.29166667e+07, -1.10000000e+07,
+   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  -1.50000000e+07,  2.25000000e+07, -3.00000000e+07,
+   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  -9.50000000e+06,  9.58333333e+06, -1.90000000e+07,
+   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  -8.50000000e+06,  1.04166667e+07, -1.70000000e+07,
+   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  -2.10000000e+07,  1.75000000e+07, -4.20000000e+07,
+   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  -1.25000000e+07,  7.08333333e+06, -2.50000000e+07,
+   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+};
+const double pylith::bc::AbsorbingDampersDataHex8::_valsJacobian[] = {
+  3.33333333e+06, 0.0, 0.0, // 0x
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 6
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 5.55555556e+06, 0.0, // 0y
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 6
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 3.33333333e+06, // 0z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 6
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 1x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 1y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 1z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 2x
+  0.0, 0.0, 0.0,
+  6.66666667e+06, 0.0, 0.0, // 2
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 4
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 6
+  0.0, 0.0, 0.0,
+  3.33333333e+06, 0.0, 0.0, // 8
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 2y
+  0.0, 0.0, 0.0,
+  0.0, 1.11111111e+07, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 4
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 6
+  0.0, 0.0, 0.0,
+  0.0, 5.55555556e+06, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 2z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 6.66666667e+06, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 6
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 3.33333333e+06, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 3x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 3y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 3z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 4x
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 2
+  0.0, 0.0, 0.0,
+  3.33333333e+06, 0.0, 0.0, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 8
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 4y
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 5.55555556e+06, 0.0, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 4z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 3.33333333e+06, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 5x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 5y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 5z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 6x
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  3.33333333e+06, 0.0, 0.0, // 6
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 6y
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 5.55555556e+06, 0.0, // 6
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 6z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 3.33333333e+06, // 6
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 7x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 7y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 7z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 8x
+  0.0, 0.0, 0.0,
+  3.33333333e+06, 0.0, 0.0, // 2
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 4
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 6
+  0.0, 0.0, 0.0,
+  6.66666667e+06, 0.0, 0.0, // 8
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 8y
+  0.0, 0.0, 0.0,
+  0.0, 5.55555556e+06, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 4
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 6
+  0.0, 0.0, 0.0,
+  0.0, 1.11111111e+07, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 8z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 3.33333333e+06, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 6
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 6.66666667e+06, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 9x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 9y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 9z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10x
+  0.0, 0.0, 0.0,
+  8.33333333e+05, 0.0, 0.0, // 2
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  1.66666667e+06, 0.0, 0.0, // 8
+  0.0, 0.0, 0.0,
+  3.33333333e+06, 0.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10y
+  0.0, 0.0, 0.0,
+  0.0, 1.38888889e+06, 0.0, // 2
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 2.77777778e+06, 0.0, // 8
+  0.0, 0.0, 0.0,
+  0.0, 5.55555556e+06, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 2
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 4
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 1.66666667e+06, // 8
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 3.33333333e+06, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 11x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 11y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 11z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+};
+
+pylith::bc::AbsorbingDampersDataHex8::AbsorbingDampersDataHex8(void)
+{ // constructor
+  meshFilename = const_cast<char*>(_meshFilename);
+
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+
+  spatialDBFilename = const_cast<char*>(_spatialDBFilename);
+  id = _id;
+  label = const_cast<char*>(_label);
+
+  dt = _dt;
+  fieldTpdt = const_cast<double*>(_fieldTpdt);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numCorners = _numCorners;
+  cells = const_cast<int*>(_cells);
+
+  dampingConsts = const_cast<double*>(_dampingConsts);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::bc::AbsorbingDampersDataHex8::~AbsorbingDampersDataHex8(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_bc_absorbingdampersdatahex8_hh)
+#define pylith_bc_absorbingdampersdatahex8_hh
+
+#include "AbsorbingDampersData.hh"
+
+namespace pylith {
+  namespace bc {
+     class AbsorbingDampersDataHex8;
+  } // pylith
+} // bc
+
+class pylith::bc::AbsorbingDampersDataHex8 : public AbsorbingDampersData
+{
+
+public: 
+
+  /// Constructor
+  AbsorbingDampersDataHex8(void);
+
+  /// Destructor
+  ~AbsorbingDampersDataHex8(void);
+
+private:
+
+  static const char* _meshFilename;
+
+  static const int _numBasis;
+  static const int _numQuadPts;
+  static const double _quadPts[];
+  static const double _quadWts[];
+  static const double _basis[];
+  static const double _basisDerivRef[];
+
+  static const char* _spatialDBFilename;
+  static const int _id;
+  static const char* _label;
+
+  static const double _dt;
+  static const double _fieldTpdt[];
+  static const double _fieldT[];
+  static const double _fieldTmdt[];
+
+  static const int _spaceDim;
+  static const int _cellDim;
+  static const int _numVertices;
+  static const int _numCells;
+  static const int _numCorners;
+  static const int _cells[];
+
+  static const double _dampingConsts[];
+  static const double _valsResidual[];
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_bc_absorbingdampersdatahex8_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,168 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "AbsorbingDampersDataTet4.hh"
+
+const char* pylith::bc::AbsorbingDampersDataTet4::_meshFilename = 
+  "data/tet4.mesh";
+
+const int pylith::bc::AbsorbingDampersDataTet4::_numBasis = 3;
+const int pylith::bc::AbsorbingDampersDataTet4::_numQuadPts = 1;
+const double pylith::bc::AbsorbingDampersDataTet4::_quadPts[] = {
+  0.3333333333333333, 0.3333333333333333
+};
+const double pylith::bc::AbsorbingDampersDataTet4::_quadWts[] = {
+  0.5,
+};
+const double pylith::bc::AbsorbingDampersDataTet4::_basis[] = {
+  0.3333333333333333,
+  0.3333333333333333,
+  0.3333333333333333,
+};
+const double pylith::bc::AbsorbingDampersDataTet4::_basisDerivRef[] = {
+ -1.0, -1.0,
+  1.0,  0.0,
+  0.0,  1.0,
+};
+
+const char* pylith::bc::AbsorbingDampersDataTet4::_spatialDBFilename = 
+  "data/elasticisotropic3d.spatialdb";
+const int pylith::bc::AbsorbingDampersDataTet4::_id = 2;
+const char* pylith::bc::AbsorbingDampersDataTet4::_label = "bc2";
+
+const double pylith::bc::AbsorbingDampersDataTet4::_dt =   0.25;
+const double pylith::bc::AbsorbingDampersDataTet4::_fieldTmdt[] = {
+  1.0,  2.4,  3.0,
+  1.1,  1.8,  3.2,
+  1.2,  2.4,  3.4,
+  1.3,  2.2,  3.6
+};
+const double pylith::bc::AbsorbingDampersDataTet4::_fieldT[] = {
+  1.1,  2.0,  3.2,
+  1.3,  2.1,  3.6,
+  1.5,  2.2,  4.0,
+  1.7,  2.3,  4.4,
+};
+const double pylith::bc::AbsorbingDampersDataTet4::_fieldTpdt[] = {
+  1.2,  1.6,  3.4,
+  1.5,  2.4,  4.0,
+  1.8,  2.0,  4.6,
+  2.1,  2.4,  5.2
+};
+
+const int pylith::bc::AbsorbingDampersDataTet4::_spaceDim = 3;
+const int pylith::bc::AbsorbingDampersDataTet4::_cellDim = 2;
+const int pylith::bc::AbsorbingDampersDataTet4::_numVertices = 3;
+const int pylith::bc::AbsorbingDampersDataTet4::_numCells = 1;
+const int pylith::bc::AbsorbingDampersDataTet4::_numCorners = 3;
+const int pylith::bc::AbsorbingDampersDataTet4::_cells[] = {
+  4,  3,  1,
+};
+
+
+const double pylith::bc::AbsorbingDampersDataTet4::_dampingConsts[] = {
+  1.25e+07,  7.5e+06,  7.5e+06
+};
+const double pylith::bc::AbsorbingDampersDataTet4::_valsResidual[] = {
+  -2.22222222e+06,  8.33333333e+05, -2.66666667e+06,
+   0.0,              0.0,             0.0,
+  -2.22222222e+06,  8.33333333e+05, -2.66666667e+06,
+  -2.22222222e+06,  8.33333333e+05, -2.66666667e+06,
+};
+const double pylith::bc::AbsorbingDampersDataTet4::_valsJacobian[] = {
+  1.38888889e+06, 0.0, 0.0, // 0x
+  0.0, 0.0, 0.0,
+  1.38888889e+06, 0.0, 0.0,
+  1.38888889e+06, 0.0, 0.0,
+  0.0, 8.33333333e+05, 0.0, // 0y
+  0.0, 0.0, 0.0,
+  0.0, 8.33333333e+05, 0.0,
+  0.0, 8.33333333e+05, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 0z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05,
+  0.0, 0.0, 8.33333333e+05,
+  0.0, 0.0, 0.0, // 1x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 1y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 1z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  1.38888889e+06, 0.0, 0.0, // 2x
+  0.0, 0.0, 0.0,
+  1.38888889e+06, 0.0, 0.0,
+  1.38888889e+06, 0.0, 0.0,
+  0.0, 8.33333333e+05, 0.0, // 2y
+  0.0, 0.0, 0.0,
+  0.0, 8.33333333e+05, 0.0,
+  0.0, 8.33333333e+05, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 2z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05,
+  0.0, 0.0, 8.33333333e+05,
+  1.38888889e+06, 0.0, 0.0, // 3x
+  0.0, 0.0, 0.0,
+  1.38888889e+06, 0.0, 0.0,
+  1.38888889e+06, 0.0, 0.0,
+  0.0, 8.33333333e+05, 0.0, // 3y
+  0.0, 0.0, 0.0,
+  0.0, 8.33333333e+05, 0.0,
+  0.0, 8.33333333e+05, 0.0,
+  0.0, 0.0, 8.33333333e+05, // 3z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 8.33333333e+05,
+  0.0, 0.0, 8.33333333e+05,
+};
+
+pylith::bc::AbsorbingDampersDataTet4::AbsorbingDampersDataTet4(void)
+{ // constructor
+  meshFilename = const_cast<char*>(_meshFilename);
+
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+
+  spatialDBFilename = const_cast<char*>(_spatialDBFilename);
+  id = _id;
+  label = const_cast<char*>(_label);
+
+  dt = _dt;
+  fieldTpdt = const_cast<double*>(_fieldTpdt);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numCorners = _numCorners;
+  cells = const_cast<int*>(_cells);
+
+  dampingConsts = const_cast<double*>(_dampingConsts);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::bc::AbsorbingDampersDataTet4::~AbsorbingDampersDataTet4(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_bc_absorbingdampersdatatet4_hh)
+#define pylith_bc_absorbingdampersdatatet4_hh
+
+#include "AbsorbingDampersData.hh"
+
+namespace pylith {
+  namespace bc {
+     class AbsorbingDampersDataTet4;
+  } // pylith
+} // bc
+
+class pylith::bc::AbsorbingDampersDataTet4 : public AbsorbingDampersData
+{
+
+public: 
+
+  /// Constructor
+  AbsorbingDampersDataTet4(void);
+
+  /// Destructor
+  ~AbsorbingDampersDataTet4(void);
+
+private:
+
+  static const char* _meshFilename;
+
+  static const int _numBasis;
+  static const int _numQuadPts;
+  static const double _quadPts[];
+  static const double _quadWts[];
+  static const double _basis[];
+  static const double _basisDerivRef[];
+
+  static const char* _spatialDBFilename;
+  static const int _id;
+  static const char* _label;
+
+  static const double _dt;
+  static const double _fieldTpdt[];
+  static const double _fieldT[];
+  static const double _fieldTmdt[];
+
+  static const int _spaceDim;
+  static const int _cellDim;
+  static const int _numVertices;
+  static const int _numCells;
+  static const int _numCorners;
+  static const int _cells[];
+
+  static const double _dampingConsts[];
+  static const double _valsResidual[];
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_bc_absorbingdampersdatatet4_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/Makefile.am	2007-11-07 00:33:42 UTC (rev 8219)
@@ -22,6 +22,7 @@
 	quad4.spatialdb \
 	tet4.mesh \
 	tet4.spatialdb \
+	elasticisotropic3d.spatialdb \
 	hex8.mesh \
 	hex8.spatialdb \
 	hex8b.mesh \

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/absorbingdampers.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/absorbingdampers.py	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/absorbingdampers.py	2007-11-07 00:33:42 UTC (rev 8219)
@@ -131,8 +131,235 @@
 
   
 # ----------------------------------------------------------------------
-calcTri3()
-calcQuad4()
+def calcTet4():
+  """
+  Calculate damping constants, residual, and Jacobian values for
+  absorbing dampers on mesh with tet4 cells.
+  """
 
+  dt = 0.25
+  density = 2500.0
+  vp = 5000.0
+  vs = 3000.0
+  area = 0.5
+  N0 = 1.0/3.0
+  N1 = 1.0/3.0
+  N2 = 1.0/3.0
+  velocityX = (N0+N1+N2)/3.0 * \
+              (N0*(2.1-1.3)+N1*(1.8-1.2)+N2*(1.2-1.0)) / (2.0*dt)
+  velocityY = (N0+N1+N2)/3.0 * \
+              (N0*(2.4-2.2)+N1*(2.0-2.4)+N2*(1.6-2.4)) / (2.0*dt)
+  velocityZ = (N0+N1+N2)/3.0 * \
+              (N0*(5.2-3.6)+N1*(4.6-3.4)+N2*(3.4-3.0)) / (2.0*dt)
+  normal = [-1.0, 0.0, 0.0]
+  tangent1 = [0.0, -1.0, 0.0]
+  tangent2 = [0.0, 0.0, 1.0]
+
+  constNormal = density*vp
+  constTangential = density*vs
+  dampingConsts = [abs(constNormal*normal[0] +
+                       constTangential*tangent1[0] +
+                       constTangential*tangent2[0]),
+                   abs(constNormal*normal[1] +
+                       constTangential*tangent1[1] +
+                       constTangential*tangent2[1]),
+                   abs(constNormal*normal[2] +
+                       constTangential*tangent1[2] +
+                       constTangential*tangent2[2])]
+  residualX = -dampingConsts[0]*velocityX*area
+  residualY = -dampingConsts[1]*velocityY*area
+  residualZ = -dampingConsts[2]*velocityZ*area
+  residual = [residualX, residualY, residualZ,
+              residualX, residualY, residualZ,
+              residualX, residualY, residualZ]
+
+  j00 = area*N0**2 / (2.0*dt)
+  j01 = area*N0*N1 / (2.0*dt)
+  j02 = area*N0*N2 / (2.0*dt)
+  j10 = j01
+  j11 = area*N1**2 / (2.0*dt)
+  j12 = area*N1*N2 / (2.0*dt)
+  j20 = j02
+  j21 = j12
+  j22 = area*N2**2 / (2.0*dt)  
+  jacobian = [dampingConsts[0]*j00, dampingConsts[1]*j00, dampingConsts[2]*j00,
+              dampingConsts[0]*j01, dampingConsts[1]*j01, dampingConsts[2]*j01,
+              dampingConsts[0]*j10, dampingConsts[1]*j10, dampingConsts[2]*j10,
+              dampingConsts[0]*j11, dampingConsts[1]*j11, dampingConsts[2]*j11,
+              dampingConsts[0]*j12, dampingConsts[1]*j12, dampingConsts[2]*j12,
+              dampingConsts[0]*j20, dampingConsts[1]*j20, dampingConsts[2]*j20,
+              dampingConsts[0]*j21, dampingConsts[1]*j21, dampingConsts[2]*j21,
+              dampingConsts[0]*j22, dampingConsts[1]*j22, dampingConsts[2]*j22]
+
+  print "Absorbing boundary for hex8 mesh"
+  print "damping constants:"
+  for v in dampingConsts:
+      print "  %16.8e" % v
+  print "values for residual:"
+  for v in residual:
+      print "  %16.8e" % v
+  print "values for jacobian:"
+  for j in jacobian:
+      print "  %16.8e" % j
+
   
+# ----------------------------------------------------------------------
+def calcHex8():
+  """
+  Calculate damping constants, residual, and Jacobian values for
+  absorbing dampers on mesh with hex8 cells.
+  """
+
+  import numpy
+
+  dt = 0.25
+  density = 2500.0
+  vp = 5000.0
+  vs = 3000.0
+  area = 1.0
+  jacobianDet = 0.5
+  basis = [[0.62200847,  0.16666667,  0.0446582,   0.16666667],
+           [0.16666667,  0.62200847,  0.16666667,  0.0446582 ],
+           [0.0446582,   0.16666667,  0.62200847,  0.16666667],
+           [0.16666667,  0.0446582,   0.16666667,  0.62200847]]
+  cells = [[2, 8, 6, 0],
+           [4, 10, 8, 2]]
+  dispTpdt = [[1.2,  1.1,  3.4],
+              [1.5,  1.0,  4.0],
+              [1.8,  0.9,  4.6],
+              [2.1,  0.8,  5.2],
+              [2.4,  0.7,  5.8],
+              [2.7,  0.6,  6.4],
+              [3.0,  0.5,  7.0],
+              [3.3,  0.4,  7.6],
+              [3.6,  0.3,  8.2],
+              [3.9,  0.2,  8.8],
+              [4.2,  0.1,  9.4],
+              [4.5,  0.0, 10.0]]
+  dispTmdt = [[1.0,  2.4,  3.0],
+              [1.1,  2.2,  3.2],
+              [1.2,  2.0,  3.4],
+              [1.3,  1.8,  3.6],
+              [1.4,  1.6,  3.8],
+              [1.5,  1.4,  4.0],
+              [1.6,  1.2,  4.2],
+              [1.7,  1.0,  4.4],
+              [1.8,  0.8,  4.6],
+              [1.9,  0.6,  4.8],
+              [2.0,  0.4,  5.0],
+              [2.1,  0.2,  5.2]]
+  normal = [0.0, 1.0, 0.0]
+  tangent1 = [-1.0, 0.0, 0.0]
+  tangent2 = [0.0, 0.0, 1.0]
+
+  constNormal = density*vp
+  constTangential = density*vs
+  dampingConsts = [abs(constNormal*normal[0] +
+                       constTangential*tangent1[0] +
+                       constTangential*tangent2[0]),
+                   abs(constNormal*normal[1] +
+                       constTangential*tangent1[1] +
+                       constTangential*tangent2[1]),
+                   abs(constNormal*normal[2] +
+                       constTangential*tangent1[2] +
+                       constTangential*tangent2[2])]
+
+  residual = numpy.zeros( (12, 3), dtype=numpy.float64 )
+  jacobian = numpy.zeros( (12, 3, 12, 3), dtype=numpy.float64 )
+  for cell in cells:
+    for b in basis:
+      N0 = b[0]
+      N1 = b[1]
+      N2 = b[2]
+      N3 = b[3]
+      v0x = (dispTpdt[cell[0]][0]-dispTmdt[cell[0]][0])/(2.0*dt)
+      v0y = (dispTpdt[cell[0]][1]-dispTmdt[cell[0]][1])/(2.0*dt)
+      v0z = (dispTpdt[cell[0]][2]-dispTmdt[cell[0]][2])/(2.0*dt)
+      v1x = (dispTpdt[cell[1]][0]-dispTmdt[cell[1]][0])/(2.0*dt)
+      v1y = (dispTpdt[cell[1]][1]-dispTmdt[cell[1]][1])/(2.0*dt)
+      v1z = (dispTpdt[cell[1]][2]-dispTmdt[cell[1]][2])/(2.0*dt)
+      v2x = (dispTpdt[cell[2]][0]-dispTmdt[cell[2]][0])/(2.0*dt)
+      v2y = (dispTpdt[cell[2]][1]-dispTmdt[cell[2]][1])/(2.0*dt)
+      v2z = (dispTpdt[cell[2]][2]-dispTmdt[cell[2]][2])/(2.0*dt)
+      v3x = (dispTpdt[cell[3]][0]-dispTmdt[cell[3]][0])/(2.0*dt)
+      v3y = (dispTpdt[cell[3]][1]-dispTmdt[cell[3]][1])/(2.0*dt)
+      v3z = (dispTpdt[cell[3]][2]-dispTmdt[cell[3]][2])/(2.0*dt)
+      velocityX = N0*v0x + N1*v1x + N2*v2x + N3*v3x
+      velocityY = N0*v0y + N1*v1y + N2*v2y + N3*v3y
+      velocityZ = N0*v0z + N1*v1z + N2*v2z + N3*v3z
+
+      residualX = -dampingConsts[0] * velocityX * area * jacobianDet
+      residualY = -dampingConsts[1] * velocityY * area * jacobianDet
+      residualZ = -dampingConsts[2] * velocityZ * area * jacobianDet
+      residual[cell[0],:] += N0*numpy.array([residualX,residualY,residualZ])
+      residual[cell[1],:] += N1*numpy.array([residualX,residualY,residualZ])
+      residual[cell[2],:] += N2*numpy.array([residualX,residualY,residualZ])
+      residual[cell[3],:] += N3*numpy.array([residualX,residualY,residualZ])
+      
+
+    for b in basis:
+      j00 = jacobianDet*area*b[0]*b[0] / (2.0*dt)
+      j01 = jacobianDet*area*b[0]*b[1] / (2.0*dt)
+      j02 = jacobianDet*area*b[0]*b[2] / (2.0*dt)
+      j03 = jacobianDet*area*b[0]*b[3] / (2.0*dt)
+
+      j10 = jacobianDet*area*b[1]*b[0] / (2.0*dt)
+      j11 = jacobianDet*area*b[1]*b[1] / (2.0*dt)
+      j12 = jacobianDet*area*b[1]*b[2] / (2.0*dt)
+      j13 = jacobianDet*area*b[1]*b[3] / (2.0*dt)
+
+      j20 = jacobianDet*area*b[2]*b[0] / (2.0*dt)
+      j21 = jacobianDet*area*b[2]*b[1] / (2.0*dt)
+      j22 = jacobianDet*area*b[2]*b[2] / (2.0*dt)
+      j23 = jacobianDet*area*b[2]*b[3] / (2.0*dt)
+
+      j30 = jacobianDet*area*b[3]*b[0] / (2.0*dt)
+      j31 = jacobianDet*area*b[3]*b[1] / (2.0*dt)
+      j32 = jacobianDet*area*b[3]*b[2] / (2.0*dt)
+      j33 = jacobianDet*area*b[3]*b[3] / (2.0*dt)
+
+      jj = [dampingConsts[0]*j00, dampingConsts[1]*j00, dampingConsts[2]*j00,
+            dampingConsts[0]*j01, dampingConsts[1]*j01, dampingConsts[2]*j01,
+            dampingConsts[0]*j02, dampingConsts[1]*j02, dampingConsts[2]*j02,
+            dampingConsts[0]*j03, dampingConsts[1]*j03, dampingConsts[2]*j03,
+            dampingConsts[0]*j10, dampingConsts[1]*j10, dampingConsts[2]*j10,
+            dampingConsts[0]*j11, dampingConsts[1]*j11, dampingConsts[2]*j11,
+            dampingConsts[0]*j12, dampingConsts[1]*j12, dampingConsts[2]*j12,
+            dampingConsts[0]*j13, dampingConsts[1]*j13, dampingConsts[2]*j13,
+            dampingConsts[0]*j20, dampingConsts[1]*j20, dampingConsts[2]*j20,
+            dampingConsts[0]*j21, dampingConsts[1]*j21, dampingConsts[2]*j21,
+            dampingConsts[0]*j22, dampingConsts[1]*j22, dampingConsts[2]*j22,
+            dampingConsts[0]*j23, dampingConsts[1]*j23, dampingConsts[2]*j23,
+            dampingConsts[0]*j30, dampingConsts[1]*j30, dampingConsts[2]*j30,
+            dampingConsts[0]*j31, dampingConsts[1]*j31, dampingConsts[2]*j31,
+            dampingConsts[0]*j32, dampingConsts[1]*j32, dampingConsts[2]*j32,
+            dampingConsts[0]*j33, dampingConsts[1]*j33, dampingConsts[2]*j33]
+      index = 0
+      for i in xrange(4):
+        for j in xrange(4):
+          jacobian[cell[i],0,cell[j],0] += numpy.array(jj[index  ])
+          jacobian[cell[i],1,cell[j],1] += numpy.array(jj[index+1])
+          jacobian[cell[i],2,cell[j],2] += numpy.array(jj[index+2])
+          index += 3
+          
+
+  print "Absorbing boundary for hex8 mesh"
+  print "damping constants:"
+  for v in dampingConsts:
+      print "  %16.8e" % v
+  print "values for residual:"
+  for v in numpy.ravel(residual):
+      print "  %16.8e" % v
+  print "values for jacobian:"
+  for j in numpy.ravel(jacobian):
+      print "  %16.8e" % j
+
+  
+# ----------------------------------------------------------------------
+#calcTri3()
+#calcQuad4()
+#calcTet4()
+#calcHex8()
+
+  
 # End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticisotropic3d.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticisotropic3d.spatialdb	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/elasticisotropic3d.spatialdb	2007-11-07 00:33:42 UTC (rev 8219)
@@ -0,0 +1,14 @@
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 3
+  value-names =  density vs vp
+  value-units =  kg/m^3  m/s  m/s
+  num-locs = 1
+  data-dim = 0
+  space-dim = 3
+  cs-data = cartesian {
+    to-meters = 1.0
+    space-dim = 3
+  }
+}
+0.0  0.0  0.0   2500.0  3000.0  5000.0

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/hex8.mesh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/hex8.mesh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/hex8.mesh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -1,3 +1,32 @@
+// Original
+//
+//        11 -----10
+//       / |     / |
+//      /  |    /  |
+//     9 ----- 8   |
+//   / |   5 /-|-- 4
+//  /  | /  /  | /
+// 7 ----- 6   |/   Cell 1
+// |   3 --|-- 2
+// | /     | /
+// |/      |/    Cell 0
+// 1 ----- 0
+//
+//
+// Sieve mesh
+//
+//        13 -----12
+//       / |     / |
+//      /  |    /  |
+//    11 -----10   |
+//   / |   7 /-|-- 6
+//  /  | /  /  | /
+// 9 ----- 8   |/    1
+// |   5 --|-- 4
+// | /     | /
+// |/      |/    0
+// 3 ----- 2
+//
 mesh = {
   dimension = 3
   use-index-zero = true
@@ -39,4 +68,12 @@
       0  1  6  7
     }
   }
+  group = {
+    name = bc2
+    type = vertices
+    count = 6
+    indices = {
+      0  2  4  6  8  10
+    }
+  }
 }

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/data/tet4.mesh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/data/tet4.mesh	2007-11-07 00:32:32 UTC (rev 8218)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/data/tet4.mesh	2007-11-07 00:33:42 UTC (rev 8219)
@@ -29,4 +29,12 @@
       2
     }
   }
+  group = {
+    name = bc2
+    type = vertices
+    count = 3
+    indices = {
+      0  2  3
+    }
+  }
 }



More information about the cig-commits mailing list