[cig-commits] r7124 - in short/3D/PyLith/trunk: . libsrc/faults libsrc/feassemble libsrc/meshio unittests/libtests/faults unittests/libtests/faults/data unittests/libtests/feassemble/data unittests/libtests/meshio unittests/libtests/meshio/data unittests/pytests/feassemble

brad at geodynamics.org brad at geodynamics.org
Sun Jun 10 21:25:05 PDT 2007


Author: brad
Date: 2007-06-10 21:25:02 -0700 (Sun, 10 Jun 2007)
New Revision: 7124

Added:
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_finalslip.spatialdb
   short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_peakrate.spatialdb
   short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_sliptime.spatialdb
   short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_finalslip.spatialdb
   short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_peakrate.spatialdb
   short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_sliptime.spatialdb
Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.cc
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8.mesh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataHex3D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad2D.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad3D.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py
Log:
Fixed some more bugs in fault implementation. Established consistent ordering and coordinates of vertices in reference cells (see libsrc/feassemble/Geometry*.hh files). Added more fault unit tests. Updated tests based on established ordering. Need to update FIATLagrange to use new ordering. Need to update CohesiveTopology::create() to generate proper ordering.

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/TODO	2007-06-11 04:25:02 UTC (rev 7124)
@@ -34,20 +34,14 @@
 
 3. Implement faults for kinematic source
    a. Creation of cohesive cells
-     i. Add tests for interpolated meshes.
-        Double check consistency in ordering of vertices (positive/negative).
+     Add more tests for orientations.
 
    b. Implement integrator for faults
 
-     i. Add determinant of Jacobian to CellGeometry::jacobian()
-
      ii. FaultCohesiveKin
        (1) C++ unit tests
-         initialize()
-         integrateResidual()
-         integrateJacobian()
-         setConstraintSizes()
-         setField()
+         Quad4
+         Hex8
        (2) Python unit tests
          initialize()
          adjustTopology()
@@ -61,7 +55,7 @@
 
 5. Additional unit tests
   a. FaultCohesive
-    i. Check faultMesh
+    i. Add checking of faultMesh [not currently used]
 
   b. ElasticityExplicit and ElasticityImplicit
     i. multiple materials

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -113,10 +113,10 @@
   const int spaceDim = 3;
 
   const double j00 = jacobian[0];
-  const double j10 = jacobian[1];
-  const double j20 = jacobian[2];
-  const double j01 = jacobian[3];
-  const double j11 = jacobian[4];
+  const double j01 = jacobian[1];
+  const double j10 = jacobian[2];
+  const double j11 = jacobian[3];
+  const double j20 = jacobian[4];
   const double j21 = jacobian[5];
 
   // Compute normal using Jacobian
@@ -146,13 +146,13 @@
   
   const double wt = jacobianDet;
   (*orientation)[0] =  p0*wt;
-  (*orientation)[1] =  q0*wt;
-  (*orientation)[2] =  r0*wt;
-  (*orientation)[3] =  p1*wt;
+  (*orientation)[1] =  p1*wt;
+  (*orientation)[2] =  p2*wt;
+  (*orientation)[3] =  q0*wt;
   (*orientation)[4] =  q1*wt;
-  (*orientation)[5] =  r1*wt;
-  (*orientation)[6] =  p2*wt;
-  (*orientation)[7] =  q2*wt;
+  (*orientation)[5] =  q2*wt;
+  (*orientation)[6] =  r0*wt;
+  (*orientation)[7] =  r1*wt;
   (*orientation)[8] =  r2*wt;
 } // _orient3D
 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -165,7 +165,8 @@
        ++c_iter) {
     mesh->restrict(coordinates, *c_iter, 
 		   &cohesiveVertices[0], cohesiveVertices.size());
-    for (int i=0, offset=2*numBasis; i < numBasis; ++i)
+    const int size = numBasis*spaceDim;
+    for (int i=0, offset=2*size; i < size; ++i)
       faceVertices[i] = cohesiveVertices[offset+i];
 
     int iBasis = 0;
@@ -208,10 +209,12 @@
       for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
 	mag += pow(vertexOrient[index+jDim],2);
       mag = sqrt(mag);
+      assert(mag > 0.0);
       for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
 	vertexDir[index+jDim] = 
 	  vertexOrient[index+jDim] / mag;
     } // for
+
     _orientation->updatePoint(*v_iter, &vertexDir[0]);
   } // for
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -96,12 +96,12 @@
   const double y7 = vertices[22];
   const double z7 = vertices[23];
 
-  const double x = location[0];
-  const double y = location[1];
-  const double z = location[2];
-  assert(0 <= x && x <= 1.0);
-  assert(0 <= y && y <= 1.0);
-  assert(0 <= z && z <= 1.0);
+  const double x = 0.5 * (location[0] + 1.0);
+  const double y = 0.5 * (location[1] + 1.0);
+  const double z = 0.5 * (location[2] + 1.0);
+  assert(-1.0 <= x && x <= 1.0);
+  assert(-1.0 <= y && y <= 1.0);
+  assert(-1.0 <= z && z <= 1.0);
 
   const double f_xy = x2 - x1 - x3 + x0;
   const double g_xy = y2 - y1 - y3 + y0;

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -15,6 +15,18 @@
  *
  * @brief C++ implementation of cell geometry calculations for 3-D
  * hexahedral cell.
+ *
+ * Reference cell:
+ *
+ * Vertex   x     y    z
+ *    0   -1.0  -1.0  -1.0
+ *    1   +1.0  -1.0  -1.0
+ *    2   +1.0  +1.0  -1.0
+ *    3   -1.0  +1.0  -1.0
+ *    4   -1.0  -1.0  +1.0
+ *    5   +1.0  -1.0  +1.0
+ *    6   +1.0  +1.0  +1.0
+ *    7   -1.0  +1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometryhex3d_hh)

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -83,8 +83,8 @@
   const double x3 = vertices[6];
   const double y3 = vertices[7];
 
-  const double x = location[0];
-  const double y = location[1];
+  const double x = 0.5 * (location[0] + 1.0);
+  const double y = 0.5 * (location[1] + 1.0);
   assert(0 <= x && x <= 1.0);
   assert(0 <= y && y <= 1.0);
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -15,6 +15,19 @@
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * quadrilateral cell.
+ *
+ * Reference cell:
+ *
+ * 3 -- 2
+ * |    |
+ * |    |
+ * 0 -- 1
+ *
+ * Vertex   x     y
+ *    0   -1.0  -1.0
+ *    1   +1.0  -1.0
+ *    2   +1.0  +1.0
+ *    3   -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometryquad2d_hh)

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -87,8 +87,8 @@
   const double y3 = vertices[10];
   const double z3 = vertices[11];
 
-  const double x = location[0];
-  const double y = location[1];
+  const double x = 0.5 * (location[0] + 1.0);
+  const double y = 0.5 * (location[1] + 1.0);
   assert(0 <= x && x <= 1.0);
   assert(0 <= y && y <= 1.0);
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -15,6 +15,19 @@
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * quadrilateral cell in 3-D.
+ *
+ * Reference cell:
+ *
+ * 3 -- 2
+ * |    |
+ * |    |
+ * 0 -- 1
+ *
+ * Vertex   x     y
+ *    0   -1.0  -1.0
+ *    1   +1.0  -1.0
+ *    2   +1.0  +1.0
+ *    3   -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometryquad3d_hh)

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -15,6 +15,14 @@
  *
  * @brief C++ implementation of cell geometry calculations for 3-D
  * tetrahedral cell.
+ *
+ * Reference cell:
+ *
+ * Vertex   x     y     z
+ *    0   -1.0  -1.0  -1.0
+ *    1   +1.0  -1.0  -1.0
+ *    2   -1.0  +1.0  -1.0
+ *    3   -1.0  -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometrytet3d_hh)

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -15,6 +15,13 @@
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * triangular cell.
+ *
+ * Reference cell:
+ *
+ * Vertex   x     y
+ *    0   -1.0  -1.0
+ *    1   +1.0  -1.0
+ *    2   -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometrytri2d_hh)

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -15,6 +15,13 @@
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * triangular cell.
+ *
+ * Reference cell:
+ *
+ * Vertex   x     y
+ *    0   -1.0  -1.0
+ *    1   +1.0  -1.0
+ *    2   -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometrytri3d_hh)

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -320,6 +320,7 @@
   assert(cells->size() == numCells*numCorners);
 
   if (2 == meshDim && 4 == numCorners) // QUAD
+#if 0
     // 0 1 2 3 -> 0 1 3 2
     for (int iCell=0; iCell < numCells; ++iCell) {
       const int i2 = iCell*numCorners+2;
@@ -328,7 +329,11 @@
       (*cells)[i2] = (*cells)[i3];
       (*cells)[i3] = tmp;
     } // for
+#else
+  ; // do nothing
+#endif
   else if (3 == meshDim && 8 == numCorners) // HEX
+#if 0
     // 0 1 2 3 4 5 6 7 -> 0 1 3 2 4 5 7 6
     for (int iCell=0; iCell < numCells; ++iCell) {
       const int i2 = iCell*numCorners+2;
@@ -343,6 +348,9 @@
       (*cells)[i6] = (*cells)[i7];
       (*cells)[i7] = tmp;
     } // for
+#else
+  ; // do nothing
+#endif
 } // _orientCells
   
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2007-06-11 04:25:02 UTC (rev 7124)
@@ -28,10 +28,11 @@
 	TestFaultCohesiveKin.cc \
 	TestFaultCohesiveKinLine2.cc \
 	TestFaultCohesiveKinTri3.cc \
+	TestFaultCohesiveKinQuad4.cc \
+	TestFaultCohesiveKinTet4.cc \
+	TestFaultCohesiveKinHex8.cc \
 	test_faults.cc
 
-
-
 noinst_HEADERS = \
 	TestBruneSlipFn.hh \
 	TestEqKinSrc.hh \
@@ -39,7 +40,10 @@
 	TestFaultCohesive.hh \
 	TestFaultCohesiveKin.hh \
 	TestFaultCohesiveKinLine2.hh \
-	TestFaultCohesiveKinTri3.hh
+	TestFaultCohesiveKinTri3.hh \
+	TestFaultCohesiveKinQuad4.hh \
+	TestFaultCohesiveKinTet4.hh \
+	TestFaultCohesiveKinHex8.hh
 
 # Source files associated with testing data
 testfaults_SOURCES += \
@@ -56,7 +60,10 @@
 	data/CohesiveDataTet4Lagrange.cc \
 	data/CohesiveKinData.cc \
 	data/CohesiveKinDataLine2.cc \
-	data/CohesiveKinDataTri3.cc
+	data/CohesiveKinDataTri3.cc \
+	data/CohesiveKinDataQuad4.cc \
+	data/CohesiveKinDataTet4.cc \
+	data/CohesiveKinDataHex8.cc
 
 noinst_HEADERS += \
 	data/CohesiveData.hh \
@@ -72,7 +79,10 @@
 	data/CohesiveDataTet4Lagrange.hh \
 	data/CohesiveKinData.hh \
 	data/CohesiveKinDataLine2.hh \
-	data/CohesiveKinDataTri3.hh
+	data/CohesiveKinDataTri3.hh \
+	data/CohesiveKinDataQuad4.hh \
+	data/CohesiveKinDataTet4.hh \
+	data/CohesiveKinDataHex8.hh
 
 testfaults_LDFLAGS = $(PETSC_LIB) $(PYTHON_BLDLIBRARY)
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -207,21 +207,26 @@
   const int orientSize = 9;
 
   const double jacobianVals[] = {
-    2.0, 1.0, 0.5,   -0.5, -0.2, 2.0,
-    -1.0, -3.0, -0.3,   2.0, -0.2, 0.3,
+    2.0,  -0.5,
+    1.0,  -0.2,
+    0.5,   2.0,
+
+    -1.0,  2.0,
+    -3.0, -0.2,
+    -0.3,  0.3,
   };
   const double jacobianDetVals[] = {
     1.3, 0.7
   };
   const double upDirVals[] = { 0.0, 0.0, 1.0 };
   const double orientationE[] = {
-    1.1654847299258313, -0.012145479112634533, 0.57575848378190342, 
-    0.57588657243394026, 0.024580136299379406, -1.1652255028919474, 
-    0.0, 1.2997108540889502, 0.027417070656281111,
+    1.1654847299258313, 0.57588657243394026, 0.0, 
+    -0.012145479112634533, 0.024580136299379406, 1.2997108540889502, 
+    0.57575848378190342, -1.1652255028919474, 0.027417070656281111,
 
-    0.20879249519516274, 0.65951433797689429, -0.10698846644884991,
-    -0.66813598462452073, 0.20609823061777949, -0.033433895765265592,
-    0.0, 0.11209084413599232, 0.69096717914882233
+    0.20879249519516274, -0.66813598462452073, 0.0,
+    0.65951433797689429, 0.20609823061777949, 0.11209084413599232, 
+    -0.10698846644884991, -0.033433895765265592, 0.69096717914882233
   };
 
   double_array upDir(upDirVals, 3);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -256,7 +256,7 @@
   err = MatAssemblyEnd(jacobian, MAT_FINAL_ASSEMBLY);
   CPPUNIT_ASSERT(0 == err);
 
-  //MatView(jacobian, PETSC_VIEWER_STDOUT_WORLD);
+  MatView(jacobian, PETSC_VIEWER_STDOUT_WORLD);
 
   const double* valsE = _data->valsJacobian;
   const int nrowsE = dispT->sizeWithBC();

Added: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,39 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestFaultCohesiveKinHex8.hh" // Implementation of class methods
+
+#include "data/CohesiveKinDataHex8.hh" // USES CohesiveKinDataHex8
+
+#include "pylith/feassemble/Quadrature2Din3D.hh" // USES Quadrature2Din3D
+#include "pylith/feassemble/GeometryQuad3D.hh" // USES GeometryQuad3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestFaultCohesiveKinHex8 );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::faults::TestFaultCohesiveKinHex8::setUp(void)
+{ // setUp
+  TestFaultCohesiveKin::setUp();
+  _data = new CohesiveKinDataHex8();
+  _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/faults/TestFaultCohesiveKinHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
+ *
+ * @brief C++ TestFaultCohesiveKinHex8 object.
+ *
+ * C++ unit testing for FaultCohesiveKin for mesh with 3-D hex cells.
+ */
+
+#if !defined(pylith_faults_testfaultcohesivekinhex8_hh)
+#define pylith_faults_testfaultcohesivekinhex8_hh
+
+#include "TestFaultCohesiveKin.hh" // ISA TestFaultCohesiveKin
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace faults {
+    class TestFaultCohesiveKinHex8;
+  } // bc
+} // pylith
+
+/// C++ unit testing for FaultCohesiveKin for mesh with 3-D hex cells.
+class pylith::faults::TestFaultCohesiveKinHex8 : public TestFaultCohesiveKin
+{ // class TestFaultCohesiveKinHex8
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestFaultCohesiveKinHex8 );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testSetConstraintSizes );
+  CPPUNIT_TEST( testSetField );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestFaultCohesiveKinHex8
+
+#endif // pylith_faults_testfaultcohesivehex8_hh
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,39 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestFaultCohesiveKinQuad4.hh" // Implementation of class methods
+
+#include "data/CohesiveKinDataQuad4.hh" // USES CohesiveKinDataQuad4
+
+#include "pylith/feassemble/Quadrature1Din2D.hh" // USES Quadrature1Din2D
+#include "pylith/feassemble/GeometryLine2D.hh" // USES GeometryLine2D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestFaultCohesiveKinQuad4 );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::faults::TestFaultCohesiveKinQuad4::setUp(void)
+{ // setUp
+  TestFaultCohesiveKin::setUp();
+  _data = new CohesiveKinDataQuad4();
+  _quadrature = new feassemble::Quadrature1Din2D();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  feassemble::GeometryLine2D geometry;
+  _quadrature->refGeometry(&geometry);
+} // setUp
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
+ *
+ * @brief C++ TestFaultCohesiveKinQuad4 object.
+ *
+ * C++ unit testing for FaultCohesiveKin for mesh with 2-D quadrilateral cells.
+ */
+
+#if !defined(pylith_faults_testfaultcohesivekinquad4_hh)
+#define pylith_faults_testfaultcohesivekinquad4_hh
+
+#include "TestFaultCohesiveKin.hh" // ISA TestFaultCohesiveKin
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace faults {
+    class TestFaultCohesiveKinQuad4;
+  } // bc
+} // pylith
+
+/// C++ unit testing for FaultCohesiveKin for mesh with 2-D quadrilateral cells.
+class pylith::faults::TestFaultCohesiveKinQuad4 : public TestFaultCohesiveKin
+{ // class TestFaultCohesiveKinQuad4
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestFaultCohesiveKinQuad4 );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testSetConstraintSizes );
+  CPPUNIT_TEST( testSetField );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestFaultCohesiveKinQuad4
+
+#endif // pylith_faults_testfaultcohesivequad4_hh
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,39 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestFaultCohesiveKinTet4.hh" // Implementation of class methods
+
+#include "data/CohesiveKinDataTet4.hh" // USES CohesiveKinDataTet4
+
+#include "pylith/feassemble/Quadrature2Din3D.hh" // USES Quadrature2Din3D
+#include "pylith/feassemble/GeometryTri3D.hh" // USES GeometryTri3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestFaultCohesiveKinTet4 );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::faults::TestFaultCohesiveKinTet4::setUp(void)
+{ // setUp
+  TestFaultCohesiveKin::setUp();
+  _data = new CohesiveKinDataTet4();
+  _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/faults/TestFaultCohesiveKinTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
+ *
+ * @brief C++ TestFaultCohesiveKinTet4 object.
+ *
+ * C++ unit testing for FaultCohesiveKin for mesh with 3-D tetrahedral cells.
+ */
+
+#if !defined(pylith_faults_testfaultcohesivekintet4_hh)
+#define pylith_faults_testfaultcohesivekintet4_hh
+
+#include "TestFaultCohesiveKin.hh" // ISA TestFaultCohesiveKin
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace faults {
+    class TestFaultCohesiveKinTet4;
+  } // bc
+} // pylith
+
+/// C++ unit testing for FaultCohesiveKin for mesh with 3-D tetrahedral cells.
+class pylith::faults::TestFaultCohesiveKinTet4 : public TestFaultCohesiveKin
+{ // class TestFaultCohesiveKinTet4
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestFaultCohesiveKinTet4 );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testSetConstraintSizes );
+  CPPUNIT_TEST( testSetField );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestFaultCohesiveKinTet4
+
+#endif // pylith_faults_testfaultcohesivetet4_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -30,7 +30,7 @@
   } // bc
 } // pylith
 
-/// C++ unit testing for FaultCohesiveKin for mesh with 1-D line cells.
+/// C++ unit testing for FaultCohesiveKin for mesh with 2-D triangular cells.
 class pylith::faults::TestFaultCohesiveKinTri3 : public TestFaultCohesiveKin
 { // class TestFaultCohesiveKinTri3
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -64,9 +64,9 @@
 };
 
 const int pylith::faults::CohesiveDataHex8::_cells[] = {
-  2,  4,  5,  3,  6,  8,  9,  7,
- 14, 16, 17, 15, 10, 12, 13, 11,
-  6,  8,  9,  7, 14, 16, 17, 15,
+  2,  3,  5,  4,  6,  7,  9,  8,
+ 14, 15, 17, 16, 10, 11, 13, 12,
+  6,  7,  9,  8, 14, 15, 17, 16,
 };
 
 const int pylith::faults::CohesiveDataHex8::_materialIds[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -68,9 +68,9 @@
 };
 
 const int pylith::faults::CohesiveDataHex8Lagrange::_cells[] = {
-  2,  4,  5,  3,  6,  8,  9,  7,
- 14, 18, 20, 16, 10, 12, 13, 11,
-  6,  8,  9,  7, 14, 18, 20, 16, 15, 19, 21, 17
+  2,  3,  5,  4,  6,  7,  9,  8,
+ 14, 16, 20, 18, 10, 11, 13, 12,
+  6,  7,  9,  8, 14, 16, 20, 18, 15, 17, 21, 19
 };
 
 const int pylith::faults::CohesiveDataHex8Lagrange::_materialIds[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -71,7 +71,7 @@
 const int pylith::faults::CohesiveDataQuad4::_cells[] = {
   2,  4,  5,  3,
   6,  7,  9,  8,
-  4,  5,  8,  9,
+  5,  4,  9,  8,
 };
 
 const int pylith::faults::CohesiveDataQuad4::_materialIds[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -73,7 +73,7 @@
 const int pylith::faults::CohesiveDataQuad4Lagrange::_cells[] = {
   2,  4,  5,  3,
   6,  7, 10,  8,
-  4,  5,  8, 10,  9, 11
+  5,  4, 10,  8, 11,  9
 };
 
 const int pylith::faults::CohesiveDataQuad4Lagrange::_materialIds[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -57,7 +57,7 @@
 const int pylith::faults::CohesiveDataTet4::_cells[] = {
   3,  4,  5,  2,
   7,  9,  8,  6,
-  3,  4,  5,  7,  8,  9
+  3,  5,  4,  7,  9,  8
 };
 
 const int pylith::faults::CohesiveDataTet4::_materialIds[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -60,7 +60,7 @@
 const int pylith::faults::CohesiveDataTet4Lagrange::_cells[] = {
   3,  4,  5,  2,
   7, 11,  9,  6,
-  3,  4,  5,  7,  9, 11,  8, 10, 12
+  3,  5,  4,  7,  11,  9,  8, 12, 10
 };
 
 const int pylith::faults::CohesiveDataTet4Lagrange::_materialIds[] = {

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,1443 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/* Original mesh
+ *
+ * Cells are 0-1 and vertices are 2-13.
+ *
+ *       2,3,4,5 -------- 6,7,8,9 -------- 10,11,12,13
+ *
+ *                        ^^^^^^^ Vertices forming fault
+ *
+ * After adding cohesive elements
+ *
+ * Cells are 0-1,16 and vertices are 4-15.
+ *
+ *       2,3,4,5 -------- 6,7,8,9 -- 14,16,18,20 -------- 10,11,12,13
+ *                                    15,17,19,21
+ *                        ^^^^^^^^^^^^^^^^^^^^^^ Cohesive element
+ *
+ */
+
+#include "CohesiveKinDataHex8.hh"
+
+const char* pylith::faults::CohesiveKinDataHex8::_meshFilename =
+  "data/hex8.mesh";
+
+const int pylith::faults::CohesiveKinDataHex8::_spaceDim = 3;
+
+const int pylith::faults::CohesiveKinDataHex8::_cellDim = 2;
+
+const int pylith::faults::CohesiveKinDataHex8::_numBasis = 4;
+
+const int pylith::faults::CohesiveKinDataHex8::_numQuadPts = 4;
+
+const double pylith::faults::CohesiveKinDataHex8::_quadPts[] = {
+  -0.57735027, -0.57735027,
+  +0.57735027, -0.57735027,
+  +0.57735027, +0.57735027,
+  -0.57735027, +0.57735027,
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_quadWts[] = {
+  1.0, 1.0, 1.0, 1.0
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_basis[] = {
+  0.62200847,  0.16666667,  0.16666667,  0.0446582,
+  0.16666667,  0.62200847,  0.0446582,   0.16666667,
+  0.16666667,  0.0446582,   0.62200847,  0.16666667,
+  0.0446582,   0.16666667,  0.16666667,  0.62200847,
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_basisDeriv[] = {
+  -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 double pylith::faults::CohesiveKinDataHex8::_verticesRef[] = {
+  -1.0, -1.0,
+  +1.0, -1.0,
+  +1.0, +1.0,
+  -1.0, +1.0
+};
+
+const int pylith::faults::CohesiveKinDataHex8::_id = 10;
+
+const char* pylith::faults::CohesiveKinDataHex8::_label = "fault";
+
+const char* pylith::faults::CohesiveKinDataHex8::_finalSlipFilename = 
+  "data/hex8_finalslip.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataHex8::_slipTimeFilename = 
+  "data/hex8_sliptime.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataHex8::_peakRateFilename = 
+  "data/hex8_peakrate.spatialdb";
+
+const double pylith::faults::CohesiveKinDataHex8::_fieldTpdt[] = {
+  4.1, 6.1, 8.1,
+  4.2, 6.2, 8.2,
+  4.3, 6.3, 8.3,
+  4.4, 6.4, 8.4,
+  4.5, 6.5, 8.5,
+  4.6, 6.6, 8.6,
+  4.7, 6.7, 8.7,
+  4.8, 6.8, 8.8,
+  4.9, 6.9, 8.9,
+  4.0, 6.0, 8.0,
+  5.1, 7.1, 9.1,
+  5.2, 7.2, 9.2,
+  5.3, 7.3, 9.3,
+  5.4, 7.4, 9.4,
+  5.5, 7.5, 9.5,
+  5.6, 7.6, 9.6,
+  5.7, 7.7, 9.7,
+  5.8, 7.8, 9.8,
+  5.9, 7.9, 9.9,
+  5.0, 7.0, 9.0,
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_fieldT[] = {
+  4.1, 6.1, 8.1,
+  4.2, 6.2, 8.2,
+  4.3, 6.3, 8.3,
+  4.4, 6.4, 8.4,
+  4.5, 6.5, 8.5,
+  4.6, 6.6, 8.6,
+  4.7, 6.7, 8.7,
+  4.8, 6.8, 8.8,
+  4.9, 6.9, 8.9,
+  4.0, 6.0, 8.0,
+  5.1, 7.1, 9.1,
+  5.2, 7.2, 9.2,
+  5.3, 7.3, 9.3,
+  1.1, 1.2, 1.3, // 15
+  5.5, 7.5, 9.5,
+  2.1, 2.2, 2.3, // 17
+  5.7, 7.7, 9.7,
+  3.1, 3.2, 3.3, // 19
+  5.9, 7.9, 9.9,
+  1.5, 1.6, 1.7, // 21
+};
+
+const int pylith::faults::CohesiveKinDataHex8::_numConstraintVert = 4;
+
+const double pylith::faults::CohesiveKinDataHex8::_orientation[] = {
+  0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
+  0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
+  0.0, +1.0, 0.0,    0.0, 0.0, +1.0     +1.0, 0.0, 0.0,
+  0.0, +1.0, 0.0,    0.0, 0.0, +1.0     +1.0, 0.0, 0.0,
+};
+
+const int pylith::faults::CohesiveKinDataHex8::_constraintVertices[] = {
+  15, 17, 19, 21
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_valsResidual[] = {
+  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.1,-1.2,-1.3, // 6
+ -2.1,-2.2,-2.3, // 7
+ -3.1,-3.2,-3.3, // 8
+ -1.5,-1.6,-1.7, // 9
+  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.1,+1.2,+1.3, // 14
+  0.0, 0.0, 0.0, // 15 (constraint)
+ +2.1,+2.2,+2.3, // 16
+  0.0, 0.0, 0.0, // 17 (constraint)
+ +3.1,+3.2,+3.3, // 18
+  0.0, 0.0, 0.0, // 19 (constraint)
+ +1.5,+1.6,+1.7, // 20
+  0.0, 0.0, 0.0, // 21 (constraint)
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_valsSlip[] = {
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.07974939836, -0.32861938211, 0.04694562602, // 15 (constraint)
+  0.0, 0.0, 0.0,
+  1.00381374723, -0.33460458241, 0.08365114560, // 17 (constraint)
+  0.0, 0.0, 0.0,
+  0.90493237602, -0.32577565537, 0.10859188512, // 19 (constraint)
+  0.0, 0.0, 0.0,
+  0.78469841324, -0.30180708202, 0.12072283281, // 21 (constraint)
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_valsJacobian[] = {
+  0.0, 0.0, 0.0, // 2x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 2y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 2z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 4y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 4z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 6x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 15
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 6y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 15
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 6z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 15
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0,-1.0, // 17
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0, // 17
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0,-1.0, 0.0, // 17
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 8x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 19
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 8y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 19
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 8z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 19
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 21
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 21
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 21
+  0.0, 0.0, 0.0, // 10x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 12x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 12y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 12z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 13x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 13y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 13z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 14x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 15
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 14y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 15
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 14z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 15
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 15x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0,-1.0, 0.0, // 6
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 14
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 15y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0,-1.0, // 6
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 14
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 15z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0, // 6
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 14
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 16x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 17
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 16y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 17
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 16z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 17
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 17x
+  0.0, 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.0, 0.0, // 7
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 16
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 17y
+  0.0, 0.0, 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.0, // 7
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 16
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 17z
+  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.0, 0.0, 0.0, // 7
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 16
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 18x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 19
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 18y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 19
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 18z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 19
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 19x
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 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, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 18
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 19y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 18
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 19z
+  0.0, 0.0, 0.0,
+  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.0, 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, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 18
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 20x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 21
+  0.0, 0.0, 0.0, // 20y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 21
+  0.0, 0.0, 0.0, // 20z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 21
+  0.0, 0.0, 0.0, // 21x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 9
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 20
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 21y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 9
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 20
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 21z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 9
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 20
+  0.0, 0.0, 0.0,
+};
+
+pylith::faults::CohesiveKinDataHex8::CohesiveKinDataHex8(void)
+{ // constructor
+  meshFilename = const_cast<char*>(_meshFilename);
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDeriv = const_cast<double*>(_basisDeriv);
+  verticesRef = const_cast<double*>(_verticesRef);
+  id = _id;
+  label = const_cast<char*>(_label);
+  finalSlipFilename = const_cast<char*>(_finalSlipFilename);
+  slipTimeFilename = const_cast<char*>(_slipTimeFilename);
+  peakRateFilename = const_cast<char*>(_peakRateFilename);
+  fieldTpdt = const_cast<double*>(_fieldTpdt);
+  fieldT = const_cast<double*>(_fieldT);
+  orientation = const_cast<double*>(_orientation);
+  constraintVertices = const_cast<int*>(_constraintVertices);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsSlip = const_cast<double*>(_valsSlip);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+  numConstraintVert = _numConstraintVert;  
+} // constructor
+
+pylith::faults::CohesiveKinDataHex8::~CohesiveKinDataHex8(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_faults_cohesivekindatahex8_hh)
+#define pylith_faults_cohesivekindatahex8_hh
+
+#include "CohesiveKinData.hh"
+
+namespace pylith {
+  namespace faults {
+     class CohesiveKinDataHex8;
+  } // pylith
+} // faults
+
+class pylith::faults::CohesiveKinDataHex8 : public CohesiveKinData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public: 
+
+  /// Constructor
+  CohesiveKinDataHex8(void);
+
+  /// Destructor
+  ~CohesiveKinDataHex8(void);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private:
+
+  static const char* _meshFilename; ///< Filename of input mesh
+
+  static const int _spaceDim; ///< Number of dimensions in vertex coordinates
+  static const int _cellDim; ///< Number of dimensions associated with cell
+
+  static const int _numBasis; ///< Number of vertices in cell
+  static const int _numQuadPts; ///< Number of quadrature points
+  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const double _quadWts[]; ///< Weights of quadrature points
+  static const double _basis[]; ///< Basis fns at quadrature points
+  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+
+  static const int _id; ///< Fault material identifier
+  static const char* _label; ///< Label for fault
+  static const char* _finalSlipFilename; ///< Name of db for final slip
+  static const char* _slipTimeFilename; ///< Name of db for slip time
+  static const char* _peakRateFilename; ///< Name of db for peak rate
+  //@}
+
+  static const double _fieldTpdt[]; ///< Input field at time t+dt.
+  static const double _fieldT[]; ///< Input field at time t.
+
+  static const double _orientation[]; ///< Expected values for fault orientation.
+  static const int _constraintVertices[]; ///< Expected points for constraint vertices
+  static const double _valsResidual[]; ///< Expected values from residual calculation.
+  static const double _valsSlip[]; ///< Expected values from settting field.
+  static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
+  static const int _numConstraintVert; ///< Number of constraint vertices
+
+};
+
+#endif // pylith_faults_cohesivekindatahex8_hh
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,389 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/* Original mesh
+ *
+ * Cells are 0-1, vertices are 2-7.
+ *
+ *       3 -------- 5 -------- 7
+ *       |          |          |
+ *       |          |          |
+ *       |          |          |
+ *       |          |          |
+ *       |          |          |
+ *       |          |          |
+ *       |          |          |
+ *       |          |          |
+ *       2 -------- 4 -------- 6
+ *
+ * After adding cohesive elements
+ *
+ * Cells are 0-1,10 vertices are 2-9.
+ *
+ *       3 -------- 5 -11- 10 -------- 7
+ *       |          |       |          |
+ *       |          |       |          |
+ *       |          |       |          |
+ *       |          |       |          |
+ *       |          |       |          |
+ *       |          |       |          |
+ *       |          |       |          |
+ *       |          |       |          |
+ *       2 -------- 4 --9-- 8 -------- 6
+ */
+
+#include "CohesiveKinDataQuad4.hh"
+
+const char* pylith::faults::CohesiveKinDataQuad4::_meshFilename =
+  "data/quad4.mesh";
+
+const int pylith::faults::CohesiveKinDataQuad4::_spaceDim = 2;
+
+const int pylith::faults::CohesiveKinDataQuad4::_cellDim = 1;
+
+const int pylith::faults::CohesiveKinDataQuad4::_numBasis = 2;
+
+const int pylith::faults::CohesiveKinDataQuad4::_numQuadPts = 1;
+
+const double pylith::faults::CohesiveKinDataQuad4::_quadPts[] = {
+  0.0,
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_quadWts[] = {
+  2.0,
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_basis[] = {
+  0.5,
+  0.5
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_basisDeriv[] = {
+  -0.5,
+   0.5
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_verticesRef[] = {
+  -1.0, 1.0
+};
+
+const int pylith::faults::CohesiveKinDataQuad4::_id = 10;
+
+const char* pylith::faults::CohesiveKinDataQuad4::_label = "fault";
+
+const char* pylith::faults::CohesiveKinDataQuad4::_finalSlipFilename = 
+  "data/quad4_finalslip.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataQuad4::_slipTimeFilename = 
+  "data/quad4_sliptime.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataQuad4::_peakRateFilename = 
+  "data/quad4_peakrate.spatialdb";
+
+const double pylith::faults::CohesiveKinDataQuad4::_fieldTpdt[] = {
+  8.1, 9.1,
+  8.2, 9.2,
+  8.3, 9.3,
+  8.4, 9.4,
+  8.5, 9.5,
+  8.6, 9.6,
+  8.7, 9.7,
+  8.8, 9.8,
+  8.9, 9.9,
+  8.0, 9.0,
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_fieldT[] = {
+  6.1, 7.1, // 2
+  6.2, 7.2, // 3
+  6.3, 7.3, // 4
+  6.4, 7.4, // 5
+  6.5, 7.5, // 6
+  6.6, 7.6, // 7
+  6.7, 7.7, // 8
+  1.4, 1.5, // 9 (constraint force)
+  6.8, 7.8, // 10
+  2.6, 2.7, // 11 (constraint force)
+};
+
+const int pylith::faults::CohesiveKinDataQuad4::_numConstraintVert = 2;
+
+const double pylith::faults::CohesiveKinDataQuad4::_orientation[] = {
+  0.0, -1.0,  +1.0, 0.0,
+  0.0, -1.0,  +1.0, 0.0
+};
+
+const int pylith::faults::CohesiveKinDataQuad4::_constraintVertices[] = {
+  9, 11
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_valsResidual[] = {
+  0.0,  0.0, // 2
+  0.0,  0.0, // 3
+ -1.4, -1.5, // 4
+ -2.6, -2.7, // 5
+  0.0,  0.0, // 6
+  0.0,  0.0, // 7
+ +1.4, +1.5, // 8
+  0.0,  0.0, // 9
+ +2.6, +2.7, // 10
+  0.0,  0.0, // 11
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_valsSlip[] = {
+  0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  0.989535448086, 0.0824612873405, // 9
+  0.0,  0.0,
+  1.05057813143, 0.0456773100622, // 11
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_valsJacobian[] = {
+  0.0, 0.0, // 2x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 2y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  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, // 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, // 4x
+  0.0, 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.0, // 9
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 4y
+  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.0, 0.0, //  9
+  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,-1.0, //  11
+  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,
+ +1.0, 0.0, //  11
+  0.0, 0.0, // 6x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 6y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  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, // 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, // 8x
+  0.0, 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.0, //  9
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 8y
+  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.0, 0.0, //  9
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 9x
+  0.0, 0.0,
+  0.0,+1.0, //  4
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0,-1.0, //  8
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 9y
+  0.0, 0.0,
+ -1.0, 0.0, //  4
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+ +1.0, 0.0, //  8
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 10x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 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.0, // 11
+  0.0, 0.0, // 10y
+  0.0, 0.0,
+  0.0, 0.0,
+  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.0, 0.0, // 11
+  0.0, 0.0, // 11x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0,+1.0, //  5
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0,-1.0, //  10
+  0.0, 0.0,
+  0.0, 0.0, // 11y
+  0.0, 0.0,
+  0.0, 0.0,
+ -1.0, 0.0, //  5
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+ +1.0, 0.0, //  10
+  0.0, 0.0,
+};
+
+pylith::faults::CohesiveKinDataQuad4::CohesiveKinDataQuad4(void)
+{ // constructor
+  meshFilename = const_cast<char*>(_meshFilename);
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDeriv = const_cast<double*>(_basisDeriv);
+  verticesRef = const_cast<double*>(_verticesRef);
+  id = _id;
+  label = const_cast<char*>(_label);
+  finalSlipFilename = const_cast<char*>(_finalSlipFilename);
+  slipTimeFilename = const_cast<char*>(_slipTimeFilename);
+  peakRateFilename = const_cast<char*>(_peakRateFilename);
+  fieldTpdt = const_cast<double*>(_fieldTpdt);
+  fieldT = const_cast<double*>(_fieldT);
+  orientation = const_cast<double*>(_orientation);
+  constraintVertices = const_cast<int*>(_constraintVertices);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsSlip = const_cast<double*>(_valsSlip);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+  numConstraintVert = _numConstraintVert;  
+} // constructor
+
+pylith::faults::CohesiveKinDataQuad4::~CohesiveKinDataQuad4(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_faults_cohesivekindataquad4_hh)
+#define pylith_faults_cohesivekindataquad4_hh
+
+#include "CohesiveKinData.hh"
+
+namespace pylith {
+  namespace faults {
+     class CohesiveKinDataQuad4;
+  } // pylith
+} // faults
+
+class pylith::faults::CohesiveKinDataQuad4 : public CohesiveKinData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public: 
+
+  /// Constructor
+  CohesiveKinDataQuad4(void);
+
+  /// Destructor
+  ~CohesiveKinDataQuad4(void);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private:
+
+  static const char* _meshFilename; ///< Filename of input mesh
+
+  static const int _spaceDim; ///< Number of dimensions in vertex coordinates
+  static const int _cellDim; ///< Number of dimensions associated with cell
+
+  static const int _numBasis; ///< Number of vertices in cell
+  static const int _numQuadPts; ///< Number of quadrature points
+  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const double _quadWts[]; ///< Weights of quadrature points
+  static const double _basis[]; ///< Basis fns at quadrature points
+  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+
+  static const int _id; ///< Fault material identifier
+  static const char* _label; ///< Label for fault
+  static const char* _finalSlipFilename; ///< Name of db for final slip
+  static const char* _slipTimeFilename; ///< Name of db for slip time
+  static const char* _peakRateFilename; ///< Name of db for peak rate
+  //@}
+
+  static const double _fieldTpdt[]; ///< Input field at time t+dt.
+  static const double _fieldT[]; ///< Input field at time t.
+
+  static const double _orientation[]; ///< Expected values for fault orientation.
+  static const int _constraintVertices[]; ///< Expected points for constraint vertices
+  static const double _valsResidual[]; ///< Expected values from residual calculation.
+  static const double _valsSlip[]; ///< Expected values from settting field.
+  static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
+  static const int _numConstraintVert; ///< Number of constraint vertices
+
+};
+
+#endif // pylith_faults_cohesivekindataquad4_hh
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,545 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/* Original mesh
+ *
+ * Cells are 0-1, vertices are 2-6.
+ *
+ * 2   3,4,5  6
+ *
+ *     ^^^^^ Face in x-y plane
+ *
+ * After adding cohesive elements
+ *
+ * Cells are 0-1,10, vertices are 2-9.
+ *
+ * 2   3,4,5  7,9,11   6
+ *             8,10,12
+ *     ^^^^^^^^^^^^ Cohesive element in x-y plane.
+ */
+
+#include "CohesiveKinDataTet4.hh"
+
+const char* pylith::faults::CohesiveKinDataTet4::_meshFilename =
+  "data/tet4.mesh";
+
+const int pylith::faults::CohesiveKinDataTet4::_spaceDim = 3;
+
+const int pylith::faults::CohesiveKinDataTet4::_cellDim = 2;
+
+const int pylith::faults::CohesiveKinDataTet4::_numBasis = 3;
+
+const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 1;
+
+const double pylith::faults::CohesiveKinDataTet4::_quadPts[] = {
+  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::faults::CohesiveKinDataTet4::_basisDeriv[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+};
+
+const int pylith::faults::CohesiveKinDataTet4::_id = 10;
+
+const char* pylith::faults::CohesiveKinDataTet4::_label = "fault";
+
+const char* pylith::faults::CohesiveKinDataTet4::_finalSlipFilename = 
+  "data/tet4_finalslip.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataTet4::_slipTimeFilename = 
+  "data/tet4_sliptime.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataTet4::_peakRateFilename = 
+  "data/tet4_peakrate.spatialdb";
+
+const double pylith::faults::CohesiveKinDataTet4::_fieldTpdt[] = {
+  7.1, 8.1, 9.1,
+  7.2, 8.2, 9.2,
+  7.3, 8.3, 9.3,
+  7.4, 8.4, 9.4,
+  7.5, 8.5, 9.5,
+  7.6, 8.6, 9.6,
+  7.7, 8.7, 9.7,
+  7.8, 8.8, 9.8,
+  7.9, 8.9, 9.9,
+  7.0, 8.0, 9.0,
+  7.1, 8.1, 9.1,
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_fieldT[] = {
+  4.1, 5.1, 6.1, // 2
+  4.2, 5.2, 6.2, // 3
+  4.3, 5.3, 6.3, // 4
+  4.4, 5.4, 6.4, // 5
+  4.5, 5.5, 6.5, // 6
+  4.6, 5.6, 6.6, // 7
+  1.2, 1.3, 1.4, // 8 (constraint force)
+  4.8, 5.8, 6.8, // 9
+  2.2, 2.3, 2.4, // 10 (constraint force)
+  4.0, 5.0, 6.0, // 11
+  3.2, 3.3, 3.4, // 12 (constraint force)
+};
+
+const int pylith::faults::CohesiveKinDataTet4::_numConstraintVert = 3;
+
+const double pylith::faults::CohesiveKinDataTet4::_orientation[] = {
+  0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
+  0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
+  0.0, +1.0, 0.0,    0.0, 0.0, +1.0     +1.0, 0.0, 0.0,
+};
+
+const int pylith::faults::CohesiveKinDataTet4::_constraintVertices[] = {
+  8, 10, 12
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_valsResidual[] = {
+  0.0,  0.0,  0.0, // 2
+ -1.2, -1.3, -1.4, // 3
+ -2.2, -2.3, -2.4, // 4
+ -3.2, -3.3, -3.4, // 5
+  0.0,  0.0,  0.0, // 6
+ +1.2, +1.3, +1.4, // 7
+  0.0,  0.0,  0.0, // 8
+ +2.2, +2.3, +2.4, // 9
+  0.0,  0.0,  0.0, // 10
+ +3.2, +3.3, +3.4, // 11
+  0.0,  0.0,  0.0, // 12
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_valsSlip[] = {
+  0.0,  0.0,  0.0,
+  0.0,  0.0,  0.0,
+  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.07974939836, -0.32861938211, 0.04694562602, // 8
+  0.0,  0.0,  0.0,
+  1.00381374723, -0.33460458241, 0.08365114560, // 10
+  0.0,  0.0,  0.0,
+  0.90493237602, -0.32577565537, 0.10859188512, // 12
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_valsJacobian[] = {
+  0.0, 0.0, 0.0, // 2x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 2y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 2z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,-1.0, // 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,
+  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,
+ -1.0, 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, 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,-1.0, 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, 0.0,
+  0.0, 0.0, 0.0, // 4x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 4y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 4z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  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,-1.0, // 12
+  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,
+ -1.0, 0.0, 0.0, // 12
+  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,-1.0, 0.0, // 12
+  0.0, 0.0, 0.0, // 6x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 6y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 6z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,+1.0, // 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,
+  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,
+ +1.0, 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, 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,+1.0, 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, 0.0,
+  0.0, 0.0, 0.0, // 8x
+  0.0,-1.0, 0.0, // 3
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0,+1.0, 0.0, // 7
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 8y
+  0.0, 0.0,-1.0, // 3
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0,+1.0, // 7
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 8z
+ -1.0, 0.0, 0.0, // 3
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+ +1.0, 0.0, 0.0, // 7
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,+1.0, // 10
+  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,
+ +1.0, 0.0, 0.0, // 10
+  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,+1.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10x
+  0.0, 0.0, 0.0,
+  0.0,-1.0, 0.0, // 4
+  0.0, 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.0, 0.0, // 9
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10y
+  0.0, 0.0, 0.0,
+  0.0, 0.0,-1.0, // 4
+  0.0, 0.0, 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.0, // 9
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10z
+  0.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0, // 4
+  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.0, 0.0, 0.0, // 9
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,+1.0, // 12
+  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,
+ +1.0, 0.0, 0.0, // 12
+  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,+1.0, 0.0, // 12
+  0.0, 0.0, 0.0, // 12x
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0,-1.0, 0.0, // 5
+  0.0, 0.0, 0.0,
+  0.0, 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.0, 0.0, // 11
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 12y
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0,-1.0, // 5
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 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.0, // 11
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 12z
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0, // 5
+  0.0, 0.0, 0.0,
+  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.0, 0.0, 0.0, // 11
+  0.0, 0.0, 0.0,
+};
+
+pylith::faults::CohesiveKinDataTet4::CohesiveKinDataTet4(void)
+{ // constructor
+  meshFilename = const_cast<char*>(_meshFilename);
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDeriv = const_cast<double*>(_basisDeriv);
+  verticesRef = const_cast<double*>(_verticesRef);
+  id = _id;
+  label = const_cast<char*>(_label);
+  finalSlipFilename = const_cast<char*>(_finalSlipFilename);
+  slipTimeFilename = const_cast<char*>(_slipTimeFilename);
+  peakRateFilename = const_cast<char*>(_peakRateFilename);
+  fieldTpdt = const_cast<double*>(_fieldTpdt);
+  fieldT = const_cast<double*>(_fieldT);
+  orientation = const_cast<double*>(_orientation);
+  constraintVertices = const_cast<int*>(_constraintVertices);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsSlip = const_cast<double*>(_valsSlip);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+  numConstraintVert = _numConstraintVert;  
+} // constructor
+
+pylith::faults::CohesiveKinDataTet4::~CohesiveKinDataTet4(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_faults_cohesivekindatatet4_hh)
+#define pylith_faults_cohesivekindatatet4_hh
+
+#include "CohesiveKinData.hh"
+
+namespace pylith {
+  namespace faults {
+     class CohesiveKinDataTet4;
+  } // pylith
+} // faults
+
+class pylith::faults::CohesiveKinDataTet4 : public CohesiveKinData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public: 
+
+  /// Constructor
+  CohesiveKinDataTet4(void);
+
+  /// Destructor
+  ~CohesiveKinDataTet4(void);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private:
+
+  static const char* _meshFilename; ///< Filename of input mesh
+
+  static const int _spaceDim; ///< Number of dimensions in vertex coordinates
+  static const int _cellDim; ///< Number of dimensions associated with cell
+
+  static const int _numBasis; ///< Number of vertices in cell
+  static const int _numQuadPts; ///< Number of quadrature points
+  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const double _quadWts[]; ///< Weights of quadrature points
+  static const double _basis[]; ///< Basis fns at quadrature points
+  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+
+  static const int _id; ///< Fault material identifier
+  static const char* _label; ///< Label for fault
+  static const char* _finalSlipFilename; ///< Name of db for final slip
+  static const char* _slipTimeFilename; ///< Name of db for slip time
+  static const char* _peakRateFilename; ///< Name of db for peak rate
+  //@}
+
+  static const double _fieldTpdt[]; ///< Input field at time t+dt.
+  static const double _fieldT[]; ///< Input field at time t.
+
+  static const double _orientation[]; ///< Expected values for fault orientation.
+  static const int _constraintVertices[]; ///< Expected points for constraint vertices
+  static const double _valsResidual[]; ///< Expected values from residual calculation.
+  static const double _valsSlip[]; ///< Expected values from settting field.
+  static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
+  static const int _numConstraintVert; ///< Number of constraint vertices
+
+};
+
+#endif // pylith_faults_cohesivekindatatet4_hh
+
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am	2007-06-11 04:25:02 UTC (rev 7124)
@@ -20,11 +20,17 @@
 	tri3_sliptime.spatialdb \
 	tri3_peakrate.spatialdb \
 	quad4.mesh \
+	quad4_finalslip.spatialdb \
+	quad4_sliptime.spatialdb \
+	quad4_peakrate.spatialdb \
 	tet4.mesh \
 	tet4_finalslip.spatialdb \
 	tet4_sliptime.spatialdb \
 	tet4_peakrate.spatialdb \
-	hex8.mesh
+	hex8.mesh \
+	hex8_finalslip.spatialdb \
+	hex8_sliptime.spatialdb \
+	hex8_peakrate.spatialdb
 
 noinst_TMP =
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8.mesh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8.mesh	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8.mesh	2007-06-11 04:25:02 UTC (rev 7124)
@@ -23,8 +23,8 @@
     count = 2
     num-corners = 8
     simplices = {
-             0       0  2  3  1  4  6  7  5
-             1       4  6  7  5  8 10 11  9
+             0       0  1  3  2  4  5  7  6
+             1       4  5  7  6  8  9 11 10
     }
     material-ids = {
              0   0

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_finalslip.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_finalslip.spatialdb	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_finalslip.spatialdb	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,17 @@
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 3
+  value-names =  left-lateral-slip  reverse-slip  fault-opening
+  value-units =  m   m   m
+  num-locs = 4
+  data-dim = 2
+  space-dim = 3
+  cs-data = cartesian {
+    to-meters = 1.0
+    space-dim = 3
+  }
+}
+0.0  -1.0 -1.0    2.3  -0.7  0.1
+0.0   1.0 -1.0    2.4  -0.8  0.2
+0.0  -1.0  1.0    2.5  -0.9  0.3
+0.0   1.0  1.0    2.6  -1.0  0.4

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_peakrate.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_peakrate.spatialdb	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_peakrate.spatialdb	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,17 @@
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 1
+  value-names =  slip-rate
+  value-units =  m/s
+  num-locs = 4
+  data-dim = 2
+  space-dim = 3
+  cs-data = cartesian {
+    to-meters = 1.0
+    space-dim = 3
+  }
+}
+0.0  -1.0 -1.0    1.5
+0.0   1.0 -1.0    1.6
+0.0  -1.0  1.0    1.7
+0.0   1.0  1.0    1.8

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_sliptime.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_sliptime.spatialdb	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/hex8_sliptime.spatialdb	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,17 @@
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 1
+  value-names =  slip-time
+  value-units =  s
+  num-locs = 4
+  data-dim = 2
+  space-dim = 3
+  cs-data = cartesian {
+    to-meters = 1.0
+    space-dim = 3
+  }
+}
+0.0  -1.0 -1.0    1.2
+0.0   1.0 -1.0    1.3
+0.0  -1.0  1.0    1.4
+0.0   1.0  1.0    1.5

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_finalslip.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_finalslip.spatialdb	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_finalslip.spatialdb	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,15 @@
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 2
+  value-names =  slip fault-opening
+  value-units =  m   m
+  num-locs = 2
+  data-dim = 1
+  space-dim = 2
+  cs-data = cartesian {
+    to-meters = 1.0
+    space-dim = 2
+  }
+}
+0.0  +1.0   2.3   0.1
+0.0  -1.0   2.4   0.2

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_peakrate.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_peakrate.spatialdb	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_peakrate.spatialdb	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,15 @@
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 1
+  value-names =  slip-rate
+  value-units =  m/s
+  num-locs = 2
+  data-dim = 1
+  space-dim = 2
+  cs-data = cartesian {
+    to-meters = 1.0
+    space-dim = 2
+  }
+}
+0.0  +1.0   1.4
+0.0  -1.0   1.5

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_sliptime.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_sliptime.spatialdb	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/quad4_sliptime.spatialdb	2007-06-11 04:25:02 UTC (rev 7124)
@@ -0,0 +1,15 @@
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 1
+  value-names =  slip-time
+  value-units =  s
+  num-locs = 2
+  data-dim = 1
+  space-dim = 2
+  cs-data = cartesian {
+    to-meters = 1.0
+    space-dim = 2
+  }
+}
+0.0  +1.0    1.2
+0.0  -1.0    1.3

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataHex3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataHex3D.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataHex3D.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -28,19 +28,19 @@
   -1.7, -0.8, 1.8,
   2.1, -1.7, 0.6,
   2.3, 0.2, 1.9, 
-  -1.8, 0.3, 2.2
+  -1.8, 0.3, 2.2,
 };
 
 const double pylith::feassemble::GeomDataHex3D::_locations[] = {
-  0.0, 0.0, 0.0,
-  1.0, 0.0, 0.0,
-  0.0, 1.0, 0.0,
-  1.0, 1.0, 0.0,
-  0.0, 0.0, 1.0,
-  1.0, 0.0, 1.0,
-  0.0, 1.0, 1.0,
+ -1.0,-1.0,-1.0,
+  1.0,-1.0,-1.0,
+ -1.0, 1.0,-1.0,
+  1.0, 1.0,-1.0,
+ -1.0,-1.0, 1.0,
+  1.0,-1.0, 1.0,
+ -1.0, 1.0, 1.0,
   1.0, 1.0, 1.0,
-  0.2, 0.8, 0.7
+ -0.6, 0.6, 0.4
 };
 
 const double pylith::feassemble::GeomDataHex3D::_jacobian[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad2D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad2D.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad2D.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -24,15 +24,15 @@
   0.3, 0.1,
   0.8, -0.2,
   0.7, 1.2,
-  -0.1, 1.6
+  -0.1, 1.6,
 };
 
 const double pylith::feassemble::GeomDataQuad2D::_locations[] = {
-  0.0, 0.0,
-  1.0, 0.0,
-  0.0, 1.0,
-  1.0, 1.0,
-  0.4, 0.7
+ -1.0, -1.0,
+  1.0, -1.0,
+ -1.0,  1.0,
+  1.0,  1.0,
+ -0.2,  0.4
 };
 
 const double pylith::feassemble::GeomDataQuad2D::_jacobian[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad3D.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/GeomDataQuad3D.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -24,15 +24,15 @@
   1.1, -0.9, 0.1,
   1.0, 0.7, 0.8,
   -0.4, 0.6, 1.2,
-  -0.3, -1.3, -0.1
+  -0.3, -1.3, -0.1,
 };
 
 const double pylith::feassemble::GeomDataQuad3D::_locations[] = {
-  0.0, 0.0,
-  1.0, 0.0,
-  0.0, 1.0,
-  1.0, 1.0,
-  0.3, 0.8
+ -1.0, -1.0,
+  1.0, -1.0,
+ -1.0,  1.0,
+  1.0,  1.0,
+ -0.4,  0.6
 };
 
 const double pylith::feassemble::GeomDataQuad3D::_jacobian[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestMeshIOCubit.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -183,8 +183,7 @@
 void
 pylith::meshio::TestMeshIOCubit::testOrientQuad(void)
 { // testOrientQuad
-  // Expect vertices 0 and 1 to remain the same, but vertices 2 and 3
-  // should be swapped
+  // Expect no change.
 
   const int meshDim = 2;
   const int numCells = 2;
@@ -194,8 +193,8 @@
     6, 7, 8, 9
   };
   const int cellsE[] = {
-    0, 1, 3, 2,
-    6, 7, 9, 8
+    0, 1, 2, 3,
+    6, 7, 8, 9
   };
   
   int_array cells(cellsOrig, numCells*numCorners);
@@ -240,8 +239,7 @@
 void
 pylith::meshio::TestMeshIOCubit::testOrientHex(void)
 { // testOrientHex
-  // Expect vertices 0 and 1 to remain the same, but vertices 2 and 3
-  // should be swapped
+  // Expect no change.
 
   const int meshDim = 3;
   const int numCells = 2;
@@ -251,8 +249,8 @@
     10, 11, 12, 13, 14, 15, 16, 17
   };
   const int cellsE[] = {
-    0, 1, 3, 2, 4, 5, 7, 6,
-    10, 11, 13, 12, 14, 15, 17, 16
+    0, 1, 2, 3, 4, 5, 6, 7,
+    10, 11, 12, 13, 14, 15, 16, 17
   };
   
   int_array cells(cellsOrig, numCells*numCorners);

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitHex.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -39,8 +39,8 @@
 
 // PyLith order, not Cubit order
 const int pylith::meshio::MeshDataCubitHex::_cells[] = {
-  0,  1,  3,  2,  4,  5,  7,  6,
-  4,  5,  7,  6,  8,  9, 11, 10
+  0,  1,  2,  3,  4,  5,  6,  7,
+  4,  5,  6,  7,  8,  9, 10, 11
 };
 const int pylith::meshio::MeshDataCubitHex::_materialIds[] = {
   7, 8

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/MeshDataCubitQuad.cc	2007-06-11 04:25:02 UTC (rev 7124)
@@ -32,8 +32,8 @@
 };
 
 const int pylith::meshio::MeshDataCubitQuad::_cells[] = {
-  0,  1,  3,  2,
-  1,  4,  2,  5
+  0,  1,  2,  3,
+  1,  4,  5,  2
 };
 const int pylith::meshio::MeshDataCubitQuad::_materialIds[] = {
   10, 11

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py	2007-06-10 03:14:33 UTC (rev 7123)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py	2007-06-11 04:25:02 UTC (rev 7124)
@@ -127,12 +127,12 @@
     """
     vertices = numpy.array([[-1.0, -1.0],
                             [+1.0, -1.0],
-                            [-1.0, +1.0],
-                            [+1.0, +1.0]])
+                            [+1.0, +1.0],
+                            [-1.0, +1.0]])
     quadPts = numpy.array([ [-1.0/3**0.5, -1.0/3**0.5],
                             [+1.0/3**0.5, -1.0/3**0.5],
-                            [-1.0/3**0.5, +1.0/3**0.5],
-                            [+1.0/3**0.5, +1.0/3**0.5] ])
+                            [+1.0/3**0.5, +1.0/3**0.5],
+                            [-1.0/3**0.5, +1.0/3**0.5] ])
     quadWts = numpy.array( [1.0, 1.0, 1.0, 1.0])
 
     # Compute basis fns and derivatives at quadrature points
@@ -158,6 +158,10 @@
     self.quadWts = quadWts
     self.basis = basis
     self.basisDeriv = basisDeriv
+
+    print "quadPts\n",quadPts
+    print "basis\n",basis
+    print "basisDeriv\n",basisDeriv
     return
 
 
@@ -180,22 +184,22 @@
     return -(1+p[0])/4.0
 
   def N2(self, p):
-    return (1-p[0])*(1+p[1])/4.0
+    return (1+p[0])*(1+p[1])/4.0
 
   def N2p(self, p):
-    return -(1+p[1])/4.0
+    return (1+p[1])/4.0
 
   def N2q(self, p):
-    return (1-p[0])/4.0
+    return (1+p[0])/4.0
 
   def N3(self, p):
-    return (1+p[0])*(1+p[1])/4.0
+    return (1-p[0])*(1+p[1])/4.0
 
   def N3p(self, p):
-    return (1+p[1])/4.0
+    return -(1+p[1])/4.0
 
   def N3q(self, p):
-    return (1+p[0])/4.0
+    return (1-p[0])/4.0
 
 # ----------------------------------------------------------------------
 class Hex8(object):
@@ -206,20 +210,20 @@
     """
     vertices = numpy.array([[-1.0, -1.0, -1.0],
                             [+1.0, -1.0, -1.0],
+                            [+1.0, +1.0, -1.0],
                             [-1.0, +1.0, -1.0],
-                            [+1.0, +1.0, -1.0],
                             [-1.0, -1.0, +1.0],
                             [+1.0, -1.0, +1.0],
-                            [-1.0, +1.0, +1.0],
-                            [+1.0, +1.0, +1.0]])
+                            [+1.0, +1.0, +1.0],
+                            [-1.0, +1.0, +1.0]])
     quadPts = numpy.array([ [-1.0/3**0.5, -1.0/3**0.5, -1.0/3**0.5],
                             [+1.0/3**0.5, -1.0/3**0.5, -1.0/3**0.5],
+                            [+1.0/3**0.5, +1.0/3**0.5, -1.0/3**0.5],
                             [-1.0/3**0.5, +1.0/3**0.5, -1.0/3**0.5],
-                            [+1.0/3**0.5, +1.0/3**0.5, -1.0/3**0.5],
                             [-1.0/3**0.5, -1.0/3**0.5, +1.0/3**0.5],
                             [+1.0/3**0.5, -1.0/3**0.5, +1.0/3**0.5],
-                            [-1.0/3**0.5, +1.0/3**0.5, +1.0/3**0.5],
-                            [+1.0/3**0.5, +1.0/3**0.5, +1.0/3**0.5]])
+                            [+1.0/3**0.5, +1.0/3**0.5, +1.0/3**0.5],
+                            [-1.0/3**0.5, +1.0/3**0.5, +1.0/3**0.5]])
     quadWts = numpy.array( [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
 
     # Compute basis fns and derivatives at quadrature points
@@ -279,29 +283,29 @@
     return -(1+p[0])*(1-p[1])/8.0
   
   def N2(self, p):
-    return (1-p[0])*(1+p[1])*(1-p[2])/8.0
+    return (1+p[0])*(1+p[1])*(1-p[2])/8.0
   
   def N2p(self, p):
-    return -(1+p[1])*(1-p[2])/8.0
+    return (1+p[1])*(1-p[2])/8.0
   
   def N2q(self, p):
-    return (1-p[0])*(1-p[2])/8.0
-  
+    return (1+p[0])*(1-p[2])/8.0
+
   def N2r(self, p):
-    return -(1-p[0])*(1+p[1])/8.0
-  
+    return -(1+p[0])*(1+p[1])/8.0
+
   def N3(self, p):
-    return (1+p[0])*(1+p[1])*(1-p[2])/8.0
+    return (1-p[0])*(1+p[1])*(1-p[2])/8.0
   
   def N3p(self, p):
-    return (1+p[1])*(1-p[2])/8.0
+    return -(1+p[1])*(1-p[2])/8.0
   
   def N3q(self, p):
-    return (1+p[0])*(1-p[2])/8.0
-
+    return (1-p[0])*(1-p[2])/8.0
+  
   def N3r(self, p):
-    return -(1+p[0])*(1+p[1])/8.0
-
+    return -(1-p[0])*(1+p[1])/8.0
+  
   def N4(self, p):
     return (1-p[0])*(1-p[1])*(1+p[2])/8.0
 
@@ -327,29 +331,29 @@
     return (1+p[0])*(1-p[1])/8.0
   
   def N6(self, p):
-    return (1-p[0])*(1+p[1])*(1+p[2])/8.0
+    return (1+p[0])*(1+p[1])*(1+p[2])/8.0
   
   def N6p(self, p):
-    return -(1+p[1])*(1+p[2])/8.0
+    return (1+p[1])*(1+p[2])/8.0
   
   def N6q(self, p):
-    return (1-p[0])*(1+p[2])/8.0
+    return (1+p[0])*(1+p[2])/8.0
   
   def N6r(self, p):
-    return (1-p[0])*(1+p[1])/8.0
-  
+    return (1+p[0])*(1+p[1])/8.0
+
   def N7(self, p):
-    return (1+p[0])*(1+p[1])*(1+p[2])/8.0
+    return (1-p[0])*(1+p[1])*(1+p[2])/8.0
   
   def N7p(self, p):
-    return (1+p[1])*(1+p[2])/8.0
+    return -(1+p[1])*(1+p[2])/8.0
   
   def N7q(self, p):
-    return (1+p[0])*(1+p[2])/8.0
+    return (1-p[0])*(1+p[2])/8.0
   
   def N7r(self, p):
-    return (1+p[0])*(1+p[1])/8.0
-
+    return (1-p[0])*(1+p[1])/8.0
+  
 # ----------------------------------------------------------------------
 class TestFIATLagrange(unittest.TestCase):
   """



More information about the cig-commits mailing list