[cig-commits] r7280 - in short/3D/PyLith/trunk: . libsrc/faults modulesrc/faults pylith/faults unittests/libtests/faults unittests/libtests/faults/data unittests/pytests/faults

brad at geodynamics.org brad at geodynamics.org
Sun Jun 17 17:28:01 PDT 2007


Author: brad
Date: 2007-06-17 17:28:00 -0700 (Sun, 17 Jun 2007)
New Revision: 7280

Added:
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4f.mesh
Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/faults/Fault.hh
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
   short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src
   short/3D/PyLith/trunk/pylith/faults/Fault.py
   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/TestFaultCohesive.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am
   short/3D/PyLith/trunk/unittests/pytests/faults/TestFaultCohesiveKin.py
Log:
Added user influenced picking of fault normal direction (allows user to insure that sense of slip with be left-lateral, reverse, and fault-opening). Added corresponding unit test (tet4f).

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/TODO	2007-06-18 00:28:00 UTC (rev 7280)
@@ -20,13 +20,13 @@
 MAIN PRIORITIES (Brad)
 ======================================================================
 
-add preferred normal direction for fault normal (to increase changes
-we get the orientation that we want in 3-D cases).
+add ability to have comments in meshio and spatial data files (if easy
+to do, would use '#' as delimiter).
 
 1. Additional unit tests
 
-  Unit tests with multiple cohesive cells.
-    hex8
+  FaultCohesiveKin
+    multiple cohesive cells for hex8 mesh
 
     normal okay with rollover of fault dip?
 

Modified: short/3D/PyLith/trunk/libsrc/faults/Fault.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/Fault.hh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/libsrc/faults/Fault.hh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -93,12 +93,16 @@
    * @param cs Coordinate system for mesh
    * @param upDir Direction perpendicular to along-strike direction that is 
    *   not collinear with fault normal (usually "up" direction but could 
-   *   be up-dip direction).
+   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+   * @param normalDir General preferred direction for fault normal
+   *   (used to pick which of two possible normal directions for
+   *   interface; only applies to fault surfaces in a 3-D domain).
    */
   virtual
   void initialize(const ALE::Obj<ALE::Mesh>& mesh,
 		  const spatialdata::geocoords::CoordSys* cs,
-		  const double_array& upDir) = 0;
+		  const double_array& upDir,
+		  const double_array& normalDir) = 0;
 
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -39,7 +39,8 @@
 void
 pylith::faults::FaultCohesiveDyn::initialize(const ALE::Obj<ALE::Mesh>& mesh,
 					     const spatialdata::geocoords::CoordSys* cs,
-					     const double_array& upDir)
+					     const double_array& upDir,
+					     const double_array& normalDir)
 { // initialize
   throw std::logic_error("FaultCohesiveDyn::initialize() not implemented.");
 } // initialize

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -58,11 +58,15 @@
    * @param cs Coordinate system for mesh
    * @param upDir Direction perpendicular to along-strike direction that is 
    *   not collinear with fault normal (usually "up" direction but could 
-   *   be up-dip direction).
+   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+   * @param normalDir General preferred direction for fault normal
+   *   (used to pick which of two possible normal directions for
+   *   interface; only applies to fault surfaces in a 3-D domain).
    */
   void initialize(const ALE::Obj<ALE::Mesh>& mesh,
 		  const spatialdata::geocoords::CoordSys* cs,
-		  const double_array& upDir);
+		  const double_array& upDir,
+		  const double_array& normalDir);
 
   /** Integrate contribution of cohesive cells to residual term.
    *

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -58,7 +58,8 @@
 void
 pylith::faults::FaultCohesiveKin::initialize(const ALE::Obj<ALE::Mesh>& mesh,
 					     const spatialdata::geocoords::CoordSys* cs,
-					     const double_array& upDir)
+					     const double_array& upDir,
+					     const double_array& normalDir)
 { // initialize
   assert(0 != _quadrature);
   assert(0 != _eqsrc);
@@ -66,6 +67,9 @@
   if (3 != upDir.size())
     throw std::runtime_error("Up direction for fault orientation must be "
 			     "a vector with 3 components.");
+  if (3 != normalDir.size())
+    throw std::runtime_error("Normal direction for fault orientation must be "
+			     "a vector with 3 components.");
 
   /* First find vertices associated with Lagrange multiplier
    * constraints in cohesive cells and compute the orientation of the
@@ -114,12 +118,12 @@
   const int orientationSize = spaceDim*spaceDim;
   _orientation = new real_section_type(mesh->comm(), mesh->debug());
   assert(!_orientation.isNull());
-  const std::set<Mesh::point_type>::const_iterator vertCohesiveBegin = 
+  const std::set<Mesh::point_type>::const_iterator vertConstraintBegin = 
     _constraintVert.begin();
-  const std::set<Mesh::point_type>::const_iterator vertCohesiveEnd = 
+  const std::set<Mesh::point_type>::const_iterator vertConstraintEnd = 
     _constraintVert.end();
-  for (std::set<Mesh::point_type>::const_iterator v_iter=vertCohesiveBegin;
-       v_iter != vertCohesiveEnd;
+  for (std::set<Mesh::point_type>::const_iterator v_iter=vertConstraintBegin;
+       v_iter != vertConstraintEnd;
        ++v_iter)
     _orientation->setFiberDimension(*v_iter, orientationSize);
   mesh->allocate(_orientation);
@@ -204,8 +208,8 @@
 
   // Loop over vertices, make orientation information unit magnitude
   double_array vertexDir(orientationSize);
-  for (std::set<Mesh::point_type>::const_iterator v_iter=vertCohesiveBegin;
-       v_iter != vertCohesiveEnd;
+  for (std::set<Mesh::point_type>::const_iterator v_iter=vertConstraintBegin;
+       v_iter != vertConstraintEnd;
        ++v_iter) {
     const real_section_type::value_type* vertexOrient = 
       _orientation->restrictPoint(*v_iter);
@@ -225,6 +229,44 @@
     _orientation->updatePoint(*v_iter, &vertexDir[0]);
   } // for
 
+  if (2 == cohesiveDim) {
+    // Check orientation of first vertex, if dot product of fault
+    // normal with preferred normal is negative, flip all along-strike
+    // and fault-normal directions (keep up-dip direction the same).
+    // If the user gives the correct normal direction, we should end
+    // up with left-lateral-slip, reverse-slip, and fault-opening for
+    // positive slip values.
+
+    const real_section_type::value_type* vertexOrient = 
+      _orientation->restrictPoint(*vertConstraintBegin);
+    assert(9 == _orientation->getFiberDimension(*vertConstraintBegin));
+    double_array vertNormalDir(&vertexOrient[6], 3);
+    const double dot = 
+      normalDir[0]*vertNormalDir[0] +
+      normalDir[1]*vertNormalDir[1] +
+      normalDir[2]*vertNormalDir[2];
+    if (dot < 0.0)
+      for (std::set<Mesh::point_type>::const_iterator v_iter=vertConstraintBegin;
+	   v_iter != vertConstraintEnd;
+	   ++v_iter) {
+	const real_section_type::value_type* vertexOrient = 
+	  _orientation->restrictPoint(*v_iter);
+	assert(9 == _orientation->getFiberDimension(*v_iter));
+	// Flip along-strike direction
+	for (int iDim=0; iDim < 3; ++iDim)
+	  vertexDir[iDim] = -vertexOrient[iDim];
+	// Keep up-dip direction
+	for (int iDim=3; iDim < 6; ++iDim)
+	  vertexDir[iDim] = vertexOrient[iDim];
+	// Flip normal direction
+	for (int iDim=6; iDim < 9; ++iDim)
+	  vertexDir[iDim] = -vertexOrient[iDim];
+	
+	// Update direction
+	_orientation->updatePoint(*v_iter, &vertexDir[0]);
+      } // for
+  } // if
+
   _eqsrc->initialize(mesh, *_faultMesh, _constraintVert, cs);
 
   // Establish pairing between constraint vertices and first cell they
@@ -232,14 +274,14 @@
   const int noCell = -1;
   _constraintCell = new int_section_type(mesh->comm(), mesh->debug());
   assert(!_constraintCell.isNull());
-  for (std::set<Mesh::point_type>::const_iterator v_iter=vertCohesiveBegin;
-       v_iter != vertCohesiveEnd;
+  for (std::set<Mesh::point_type>::const_iterator v_iter=vertConstraintBegin;
+       v_iter != vertConstraintEnd;
        ++v_iter)
     _constraintCell->setFiberDimension(*v_iter, 1);
   mesh->allocate(_constraintCell);
   // Set values to noCell
-  for (std::set<Mesh::point_type>::const_iterator v_iter=vertCohesiveBegin;
-       v_iter != vertCohesiveEnd;
+  for (std::set<Mesh::point_type>::const_iterator v_iter=vertConstraintBegin;
+       v_iter != vertConstraintEnd;
        ++v_iter)
     _constraintCell->updatePoint(*v_iter, &noCell);
 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -72,11 +72,15 @@
    * @param cs Coordinate system for mesh
    * @param upDir Direction perpendicular to along-strike direction that is 
    *   not collinear with fault normal (usually "up" direction but could 
-   *   be up-dip direction).
+   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+   * @param normalDir General preferred direction for fault normal
+   *   (used to pick which of two possible normal directions for
+   *   interface; only applies to fault surfaces in a 3-D domain).
    */
   void initialize(const ALE::Obj<ALE::Mesh>& mesh,
 		  const spatialdata::geocoords::CoordSys* cs,
-		  const double_array& upDir);
+		  const double_array& upDir,
+		  const double_array& normalDir);
 
   /** Integrate contributions to residual term (r) for operator.
    *

Modified: short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/modulesrc/faults/faults.pyxe.src	2007-06-18 00:28:00 UTC (rev 7280)
@@ -119,12 +119,12 @@
     return
 
 
-  def initialize(self, mesh, cs, upDir):
+  def initialize(self, mesh, cs, upDir, normalDir):
     """
     Initialize fault.
     """
     # create shim for method 'initialize'
-    #embed{ void Fault_initialize(void* objVptr, void* meshVptr, void* csVptr, double* upDirPtr)
+    #embed{ void Fault_initialize(void* objVptr, void* meshVptr, void* csVptr, double* upDirPtr, double* normalDirPtr)
     try {
       assert(0 != objVptr);
       assert(0 != meshVptr);
@@ -136,7 +136,11 @@
       upDir[0] = upDirPtr[0];
       upDir[1] = upDirPtr[1];
       upDir[2] = upDirPtr[2];
-      ((pylith::faults::Fault*) objVptr)->initialize(*mesh, cs, upDir);
+      pylith::double_array normalDir(3);
+      normalDir[0] = normalDirPtr[0];
+      normalDir[1] = normalDirPtr[1];
+      normalDir[2] = normalDirPtr[2];
+      ((pylith::faults::Fault*) objVptr)->initialize(*mesh, cs, upDir, normalDir);
       } catch (const std::exception& err) {
       PyErr_SetString(PyExc_RuntimeError,
                       const_cast<char*>(err.what()));
@@ -160,12 +164,19 @@
     if 3 != len(upDir):
       raise TypeError, \
             "Argument must be a 3 vector (list)."
+    if 3 != len(normalDir):
+      raise TypeError, \
+            "Argument must be a 3 vector (list)."
     cdef double upDirCpp[3]
     upDirCpp[0] = upDir[0]
     upDirCpp[1] = upDir[1]
     upDirCpp[2] = upDir[2]    
+    cdef double normalDirCpp[3]
+    normalDirCpp[0] = normalDir[0]
+    normalDirCpp[1] = normalDir[1]
+    normalDirCpp[2] = normalDir[2]    
     Fault_initialize(self.thisptr, ptrFromHandle(mesh), ptrFromHandle(cs),
-                     upDirCpp)
+                     upDirCpp, normalDirCpp)
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/faults/Fault.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/Fault.py	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/pylith/faults/Fault.py	2007-06-18 00:28:00 UTC (rev 7280)
@@ -22,12 +22,12 @@
 
 from pyre.components.Component import Component
 
-# Validator for up-direction
-def validateUpDir(value):
+# Validator for direction
+def validateDir(value):
   """
-  Validate up-direction.
+  Validate direction.
   """
-  msg = "Up-direction must be a 3 component vector (list)."
+  msg = "Direction must be a 3 component vector (list)."
   if not isinstance(value, list):
     raise ValueError(msg)
   if 3 != len(value):
@@ -64,7 +64,11 @@
     ## @li \b id Fault identifier
     ## @li \b name Name of fault
     ## @li \b up_dir Up-dip or up direction
-    ##   (perpendicular to along-strike and not collinear with fault normal)
+    ##   (perpendicular to along-strike and not collinear with fault normal;
+    ##   only applies to fault surfaces in a 3-D domain).
+    ## @li \b normal_dir General preferred direction for fault normal
+    ##   (used to pick which of two possible normal directions for
+    ##   interface; only applies to fault surfaces in a 3-D domain).
     ##
     ## \b Facilities
     ## @li \b quadrature Quadrature object for numerical integration
@@ -79,11 +83,18 @@
     label.meta['tip'] = "Name of material."
 
     upDir = pyre.inventory.list("up_dir", default=[0, 0, 1],
-                                validator=validateUpDir)
+                                validator=validateDir)
     upDir.meta['tip'] = "Up-dip or up direction " \
                         "(perpendicular to along-strike and not collinear " \
-                        "with fault normal)."
+                        "with fault normal; only applies to fault surface " \
+                        "in a 3-D domain)."
 
+    normalDir = pyre.inventory.list("normal_dir", default=[1, 0, 0],
+                                validator=validateDir)
+    normalDir.meta['tip'] = "General preferred direction for fault normal " \
+                 "(used to pick which of two possible normal directions for " \
+                 "interface; only applies to fault surfaces in a 3-D domain)."
+
     from pylith.feassemble.quadrature.Quadrature import Quadrature
     quadrature = pyre.inventory.facility("quadrature", factory=Quadrature)
     quadrature.meta['tip'] = "Quadrature object for numerical integration."
@@ -131,7 +142,7 @@
     self.cppHandle.label = self.label
     self.cppHandle.quadrature = self.quadrature.cppHandle
     self.cppHandle.initialize(mesh.cppHandle, mesh.coordsys.cppHandle,
-                              self.upDir)
+                              self.upDir, self.normalDir)
     return
 
 
@@ -145,6 +156,7 @@
     self.id = self.inventory.id
     self.label = self.inventory.label
     self.upDir = self.inventory.upDir
+    self.normalDir = self.inventory.normalDir
     self.quadrature = self.inventory.quadrature
     return
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2007-06-18 00:28:00 UTC (rev 7280)
@@ -33,6 +33,7 @@
 	TestFaultCohesiveKinQuad4e.cc \
 	TestFaultCohesiveKinTet4.cc \
 	TestFaultCohesiveKinTet4e.cc \
+	TestFaultCohesiveKinTet4f.cc \
 	TestFaultCohesiveKinHex8.cc \
 	test_faults.cc
 
@@ -49,6 +50,7 @@
 	TestFaultCohesiveKinQuad4e.hh \
 	TestFaultCohesiveKinTet4.hh \
 	TestFaultCohesiveKinTet4e.hh \
+	TestFaultCohesiveKinTet4f.hh \
 	TestFaultCohesiveKinHex8.hh
 
 # Source files associated with testing data
@@ -71,6 +73,7 @@
 	data/CohesiveDataTet4b.cc \
 	data/CohesiveDataTet4c.cc \
 	data/CohesiveDataTet4d.cc \
+	data/CohesiveDataTet4f.cc \
 	data/CohesiveDataTet4Lagrange.cc \
 	data/CohesiveDataHex8.cc \
 	data/CohesiveDataHex8b.cc \
@@ -87,6 +90,7 @@
 	data/CohesiveKinDataQuad4e.cc \
 	data/CohesiveKinDataTet4.cc \
 	data/CohesiveKinDataTet4e.cc \
+	data/CohesiveKinDataTet4f.cc \
 	data/CohesiveKinDataHex8.cc
 
 noinst_HEADERS += \
@@ -108,6 +112,7 @@
 	data/CohesiveDataTet4b.hh \
 	data/CohesiveDataTet4c.hh \
 	data/CohesiveDataTet4d.hh \
+	data/CohesiveDataTet4f.hh \
 	data/CohesiveDataTet4Lagrange.hh \
 	data/CohesiveDataHex8.hh \
 	data/CohesiveDataHex8b.hh \
@@ -124,6 +129,7 @@
 	data/CohesiveKinDataQuad4e.hh \
 	data/CohesiveKinDataTet4.hh \
 	data/CohesiveKinDataTet4e.hh \
+	data/CohesiveKinDataTet4f.hh \
 	data/CohesiveKinDataHex8.hh
 
 AM_CPPFLAGS = $(PETSC_SIEVE_FLAGS) $(PETSC_INCLUDE)

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -36,6 +36,7 @@
 #include "data/CohesiveDataTet4b.hh" // USES CohesiveDataTet4b
 #include "data/CohesiveDataTet4c.hh" // USES CohesiveDataTet4c
 #include "data/CohesiveDataTet4d.hh" // USES CohesiveDataTet4d
+#include "data/CohesiveDataTet4f.hh" // USES CohesiveDataTet4f
 #include "data/CohesiveDataHex8.hh" // USES CohesiveDataHex8
 #include "data/CohesiveDataHex8b.hh" // USES CohesiveDataHex8b
 #include "data/CohesiveDataHex8c.hh" // USES CohesiveDataHex8c
@@ -173,7 +174,7 @@
 } // testAdjustTopologyTet4b
 
 // ----------------------------------------------------------------------
-// Test adjustTopology() with 3-D tetrahedral element (face b).
+// Test adjustTopology() with 3-D tetrahedral element (face c).
 void
 pylith::faults::TestFaultCohesive::testAdjustTopologyTet4c(void)
 { // testAdjustTopologyTet4c
@@ -183,7 +184,7 @@
 } // testAdjustTopologyTet4c
 
 // ----------------------------------------------------------------------
-// Test adjustTopology() with 3-D tetrahedral element (face b).
+// Test adjustTopology() with 3-D tetrahedral element (face d).
 void
 pylith::faults::TestFaultCohesive::testAdjustTopologyTet4d(void)
 { // testAdjustTopologyTet4d
@@ -193,6 +194,16 @@
 } // testAdjustTopologyTet4d
 
 // ----------------------------------------------------------------------
+// Test adjustTopology() with 3-D tetrahedral element (reverse cell order).
+void
+pylith::faults::TestFaultCohesive::testAdjustTopologyTet4f(void)
+{ // testAdjustTopologyTet4f
+  CohesiveDataTet4f data;
+  FaultCohesiveDyn fault;
+  _testAdjustTopology(&fault, data);
+} // testAdjustTopologyTet4f
+
+// ----------------------------------------------------------------------
 // Test adjustTopology() with 3-D hexahedral element.
 void
 pylith::faults::TestFaultCohesive::testAdjustTopologyHex8(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.hh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesive.hh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -55,6 +55,7 @@
   CPPUNIT_TEST( testAdjustTopologyTet4b );
   CPPUNIT_TEST( testAdjustTopologyTet4c );
   CPPUNIT_TEST( testAdjustTopologyTet4d );
+  CPPUNIT_TEST( testAdjustTopologyTet4f );
   CPPUNIT_TEST( testAdjustTopologyHex8 );
   CPPUNIT_TEST( testAdjustTopologyHex8b );
   CPPUNIT_TEST( testAdjustTopologyHex8c );
@@ -119,6 +120,9 @@
   /// Test adjustTopology() with 3-D tetrahedral element (face d).
   void testAdjustTopologyTet4d(void);
 
+  /// Test adjustTopology() with 3-D tetrahedral element (reverse cell order).
+  void testAdjustTopologyTet4f(void);
+
   /// Test adjustTopology() with 3-D hexahedral element.
   void testAdjustTopologyHex8(void);
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -363,7 +363,10 @@
     const double upDirVals[] = { 0.0, 0.0, 1.0 };
     double_array upDir(upDirVals, 3);
 
-    fault->initialize(*mesh, &cs, upDir); 
+    const double normalDirVals[] = { 1.0, 0.0, 0.0 };
+    double_array normalDir(normalDirVals, 3);
+
+    fault->initialize(*mesh, &cs, upDir, normalDir); 
   } catch (const ALE::Exception& err) {
     throw std::runtime_error(err.msg());
   } // catch

Added: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -0,0 +1,39 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestFaultCohesiveKinTet4f.hh" // Implementation of class methods
+
+#include "data/CohesiveKinDataTet4f.hh" // USES CohesiveKinDataTet4f
+
+#include "pylith/feassemble/Quadrature2Din3D.hh" // USES Quadrature2Din3D
+#include "pylith/feassemble/GeometryTri3D.hh" // USES GeometryTri3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestFaultCohesiveKinTet4f );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::faults::TestFaultCohesiveKinTet4f::setUp(void)
+{ // setUp
+  TestFaultCohesiveKin::setUp();
+  _data = new CohesiveKinDataTet4f();
+  _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/TestFaultCohesiveKinTet4f.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -0,0 +1,57 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
+ *
+ * @brief C++ TestFaultCohesiveKinTet4f object.
+ *
+ * C++ unit testing for FaultCohesiveKin for mesh with 3-D tetrahedral cells.
+ */
+
+#if !defined(pylith_faults_testfaultcohesivekintet4f_hh)
+#define pylith_faults_testfaultcohesivekintet4f_hh
+
+#include "TestFaultCohesiveKin.hh" // ISA TestFaultCohesiveKin
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace faults {
+    class TestFaultCohesiveKinTet4f;
+  } // bc
+} // pylith
+
+/// C++ unit testing for FaultCohesiveKin for mesh with 3-D tetrahedral cells.
+class pylith::faults::TestFaultCohesiveKinTet4f : public TestFaultCohesiveKin
+{ // class TestFaultCohesiveKinTet4f
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestFaultCohesiveKinTet4f );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestFaultCohesiveKinTet4f
+
+#endif // pylith_faults_testfaultcohesivetet4f_hh
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -0,0 +1,110 @@
+// -*- 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   7,8,9  3,4,5    6
+ *
+ *     ^^^^^^^^^^^^ Cohesive element in x-y plane.
+ */
+
+#include "CohesiveDataTet4f.hh"
+
+const int pylith::faults::CohesiveDataTet4f::_numVertices = 8;
+
+const int pylith::faults::CohesiveDataTet4f::_spaceDim = 3;
+
+const int pylith::faults::CohesiveDataTet4f::_numCells = 3;
+
+const int pylith::faults::CohesiveDataTet4f::_cellDim = 3;
+
+const double pylith::faults::CohesiveDataTet4f::_vertices[] = {
+  -1.0,  0.0,  0.0,
+   0.0, -1.0,  0.0,
+   0.0,  0.0,  1.0,
+   0.0,  1.0,  0.0,
+   1.0,  0.0,  0.0,
+   0.0, -1.0,  0.0,
+   0.0,  0.0,  1.0,
+   0.0,  1.0,  0.0
+};
+
+const int pylith::faults::CohesiveDataTet4f::_numCorners[] = {
+  4,
+  4,
+  6
+};
+
+const int pylith::faults::CohesiveDataTet4f::_cells[] = {
+  3,  5,  4,  6,
+  7,  8,  9,  2,
+  3,  4,  5,  7,  8,  9
+};
+
+const int pylith::faults::CohesiveDataTet4f::_materialIds[] = {
+  0,  0,
+  1
+};
+
+const int pylith::faults::CohesiveDataTet4f::_numGroups = 2;
+
+const int pylith::faults::CohesiveDataTet4f::_groupSizes[] = 
+  { 6, 5 };
+
+const int pylith::faults::CohesiveDataTet4f::_groups[] = {
+  3, 4, 5, 7, 8, 9,
+  2, 4, 5, 8, 9
+};
+
+const char* pylith::faults::CohesiveDataTet4f::_groupNames[] = {
+  "fault", "output"
+};
+
+const char* pylith::faults::CohesiveDataTet4f::_groupTypes[] = {
+  "vertex", "vertex"
+};
+
+const char* pylith::faults::CohesiveDataTet4f::_filename = "data/tet4f.mesh";
+
+pylith::faults::CohesiveDataTet4f::CohesiveDataTet4f(void)
+{ // constructor
+  numVertices = _numVertices;
+  spaceDim = _spaceDim;
+  numCells = _numCells;
+  cellDim = _cellDim;
+  vertices = const_cast<double*>(_vertices);
+  numCorners = const_cast<int*>(_numCorners);
+  cells = const_cast<int*>(_cells);
+  materialIds = const_cast<int*>(_materialIds);
+  groups = const_cast<int*>(_groups);
+  groupSizes = const_cast<int*>(_groupSizes);
+  groupNames = const_cast<char**>(_groupNames);
+  groupTypes = const_cast<char**>(_groupTypes);
+  numGroups = _numGroups;
+  filename = const_cast<char*>(_filename);
+} // constructor
+
+pylith::faults::CohesiveDataTet4f::~CohesiveDataTet4f(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.hh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveDataTet4f.hh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_faults_cohesivedatatet4f_hh)
+#define pylith_faults_cohesivedatatet4f_hh
+
+#include "CohesiveData.hh"
+
+namespace pylith {
+  namespace faults {
+     class CohesiveDataTet4f;
+  } // pylith
+} // faults
+
+class pylith::faults::CohesiveDataTet4f : public CohesiveData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public: 
+
+  /// Constructor
+  CohesiveDataTet4f(void);
+
+  /// Destructor
+  ~CohesiveDataTet4f(void);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private:
+
+  static const int _numVertices; ///< Number of vertices
+  static const int _spaceDim; ///< Number of dimensions in vertex coordinates
+  static const int _numCells; ///< Number of cells
+  static const int _cellDim; ///< Number of dimensions associated with cell
+
+  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const int _numCorners[]; ///< Number of vertices in cell
+  static const int _cells[]; ///< Pointer to indices of vertices in cells
+  static const int _materialIds[]; ///< Pointer to cell material identifiers
+
+  static const int _groups[]; ///< Groups of points
+  static const int _groupSizes[]; ///< Sizes of groups
+  static const char* _groupNames[]; ///< Array of group names
+  static const char* _groupTypes[]; ///< Array of group types
+  static const int _numGroups; ///< Number of groups
+
+  static const char* _filename; ///< Filename of input mesh
+};
+
+#endif // pylith_faults_cohesivedatatet4f_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -12,124 +12,117 @@
 
 /* Original mesh
  *
- * Cells are 0-3, vertices are 4-8.
+ * Cells are 0-1, vertices are 2-6.
  *
- * 4   5,6,7  8
+ * 2   3,4,5  6
  *
  *     ^^^^^ Face in x-y plane
  *
  * After adding cohesive elements
  *
- * Cells are 0-3,18,19, vertices are 4-17.
+ * Cells are 0-1,10, vertices are 2-9.
  *
- * 4   5,6,7  10,12,14   8
- *            11,13,15
+ * 2   3,4,5  7,9,11   6
+ *             8,10,12
  *     ^^^^^^^^^^^^ Cohesive element in x-y plane.
  */
 
-#include "CohesiveKinDataTet4e.hh"
+#include "CohesiveKinDataTet4.hh"
 
-const char* pylith::faults::CohesiveKinDataTet4e::_meshFilename =
-  "data/tet4e.mesh";
+const char* pylith::faults::CohesiveKinDataTet4::_meshFilename =
+  "data/tet4.mesh";
 
-const int pylith::faults::CohesiveKinDataTet4e::_spaceDim = 3;
+const int pylith::faults::CohesiveKinDataTet4::_spaceDim = 3;
 
-const int pylith::faults::CohesiveKinDataTet4e::_cellDim = 2;
+const int pylith::faults::CohesiveKinDataTet4::_cellDim = 2;
 
-const int pylith::faults::CohesiveKinDataTet4e::_numBasis = 3;
+const int pylith::faults::CohesiveKinDataTet4::_numBasis = 3;
 
-const int pylith::faults::CohesiveKinDataTet4e::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 1;
 
-const double pylith::faults::CohesiveKinDataTet4e::_quadPts[] = {
+const double pylith::faults::CohesiveKinDataTet4::_quadPts[] = {
   3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_quadWts[] = {
+const double pylith::faults::CohesiveKinDataTet4::_quadWts[] = {
   5.00000000e-01,
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_basis[] = {
+const double pylith::faults::CohesiveKinDataTet4::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::faults::CohesiveKinDataTet4e::_basisDeriv[] = {
+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::CohesiveKinDataTet4e::_verticesRef[] = {
+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::CohesiveKinDataTet4e::_id = 10;
+const int pylith::faults::CohesiveKinDataTet4::_id = 10;
 
-const char* pylith::faults::CohesiveKinDataTet4e::_label = "fault";
+const char* pylith::faults::CohesiveKinDataTet4::_label = "fault";
 
-const char* pylith::faults::CohesiveKinDataTet4e::_finalSlipFilename = 
-  "data/tet4e_finalslip.spatialdb";
+const char* pylith::faults::CohesiveKinDataTet4::_finalSlipFilename = 
+  "data/tet4_finalslip.spatialdb";
 
-const char* pylith::faults::CohesiveKinDataTet4e::_slipTimeFilename = 
-  "data/tet4e_sliptime.spatialdb";
+const char* pylith::faults::CohesiveKinDataTet4::_slipTimeFilename = 
+  "data/tet4_sliptime.spatialdb";
 
-const char* pylith::faults::CohesiveKinDataTet4e::_peakRateFilename = 
-  "data/tet4e_peakrate.spatialdb";
+const char* pylith::faults::CohesiveKinDataTet4::_peakRateFilename = 
+  "data/tet4_peakrate.spatialdb";
 
-const double pylith::faults::CohesiveKinDataTet4e::_fieldT[] = {
-  3.1, 5.1, 7.1,
-  3.2, 5.2, 7.2,
-  3.3, 5.3, 7.3,
-  3.4, 5.4, 7.4,
-  3.5, 5.5, 7.5,
-  3.6, 5.6, 7.6,
-  3.7, 5.7, 7.7,
-  3.8, 5.8, 7.8,
-  3.9, 5.9, 7.9,
-  3.0, 5.0, 7.0,
-  4.1, 6.1, 8.1,
-  4.2, 6.2, 8.2,
-  4.3, 6.3, 8.3,
-  4.4, 6.4, 8.4,
+const double pylith::faults::CohesiveKinDataTet4::_fieldT[] = {
+  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 int pylith::faults::CohesiveKinDataTet4e::_numConstraintVert = 4;
+const int pylith::faults::CohesiveKinDataTet4::_numConstraintVert = 3;
 
-const double pylith::faults::CohesiveKinDataTet4e::_orientation[] = {
+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,
-  0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
 };
 
-const int pylith::faults::CohesiveKinDataTet4e::_constraintVertices[] = {
-  11, 13, 15, 17
+const int pylith::faults::CohesiveKinDataTet4::_constraintVertices[] = {
+  8, 10, 12
 };
 
-const int pylith::faults::CohesiveKinDataTet4e::_constraintCells[] = {
-  18, 18, 18, 19
+const int pylith::faults::CohesiveKinDataTet4::_constraintCells[] = {
+  13, 13, 13
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_valsResidual[] = {
+const double pylith::faults::CohesiveKinDataTet4::_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,
   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.07974939836, -0.32861938211, 0.04694562602, // 11
+  1.00381374723, -0.33460458241, 0.08365114560, // 10
   0.0,  0.0,  0.0,
-  1.00381374723, -0.33460458241, 0.08365114560, // 13
-  0.0,  0.0,  0.0,
-  0.90493237602, -0.32577565537, 0.10859188512, // 15
-  0.0, 0.0, 0.0,
-  0.78469841324, -0.30180708202, 0.12072283281, // 17
+  0.90493237602, -0.32577565537, 0.10859188512, // 12
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_valsJacobian[] = {
-  0.0, 0.0, 0.0, // 4x
+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,
@@ -140,10 +133,10 @@
   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, // 4y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -151,69 +144,73 @@
   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, // 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, // 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, // 5x
+  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,-1.0, // 11
   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, // 5y
   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,
- -1.0, 0.0, 0.0, // 11
+  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, // 5z
   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,-1.0, 0.0, // 11
   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, // 6x
+  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,
@@ -221,41 +218,43 @@
   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,-1.0, // 13
   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, // 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,-1.0, // 12
+  0.0, 0.0, 0.0, // 5y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 13
   0.0, 0.0, 0.0,
   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,
+ -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,-1.0, 0.0, // 13
   0.0, 0.0, 0.0,
   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,-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,
@@ -266,10 +265,9 @@
   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, // 6y
   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,
@@ -278,87 +276,95 @@
   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,
- -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, // 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, // 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,-1.0, 0.0, // 15
   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, // 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, // 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,-1.0, // 17
-  0.0, 0.0, 0.0, // 8y
+  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,
- -1.0, 0.0, 0.0, // 17
-  0.0, 0.0, 0.0, // 8z
+  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,-1.0, 0.0, // 17
-  0.0, 0.0, 0.0, // 9x
   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, // 9y
   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,
@@ -366,7 +372,9 @@
   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,
@@ -375,351 +383,111 @@
   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,
-  0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10x
   0.0, 0.0, 0.0,
+  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,+1.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
-  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,
- +1.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
-  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,+1.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
-  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,-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,+1.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 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,-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,+1.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   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
- -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,
- +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,
   0.0, 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,+1.0, // 13
-  0.0, 0.0, 0.0,
-  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,-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,
- +1.0, 0.0, 0.0, // 13
-  0.0, 0.0, 0.0,
-  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,
+ -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,
-  0.0,+1.0, 0.0, // 13
-  0.0, 0.0, 0.0,
-  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,-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,+1.0, 0.0, // 12
-  0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
-  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,-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,+1.0, // 12
-  0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
-  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,
- -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,
- +1.0, 0.0, 0.0, // 12
-  0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0,
-  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,+1.0, // 15
-  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,
- +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, // 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,+1.0, 0.0, // 15
-  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,-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,+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, // 15y
-  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,+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, // 15z
-  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,
- +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, // 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,+1.0, // 17
-  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,
- +1.0, 0.0, 0.0, // 17
-  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,+1.0, 0.0, // 17
-  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,-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,+1.0, 0.0, // 16
-  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,-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,+1.0, // 16
-  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,
- -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,
- +1.0, 0.0, 0.0, // 16
-  0.0, 0.0, 0.0,
 };
 
-pylith::faults::CohesiveKinDataTet4e::CohesiveKinDataTet4e(void)
+pylith::faults::CohesiveKinDataTet4::CohesiveKinDataTet4(void)
 { // constructor
   meshFilename = const_cast<char*>(_meshFilename);
   spaceDim = _spaceDim;
@@ -745,7 +513,7 @@
   numConstraintVert = _numConstraintVert;  
 } // constructor
 
-pylith::faults::CohesiveKinDataTet4e::~CohesiveKinDataTet4e(void)
+pylith::faults::CohesiveKinDataTet4::~CohesiveKinDataTet4(void)
 {}
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -12,117 +12,124 @@
 
 /* Original mesh
  *
- * Cells are 0-1, vertices are 2-6.
+ * Cells are 0-3, vertices are 4-8.
  *
- * 2   3,4,5  6
+ * 4   5,6,7  8
  *
  *     ^^^^^ Face in x-y plane
  *
  * After adding cohesive elements
  *
- * Cells are 0-1,10, vertices are 2-9.
+ * Cells are 0-3,18,19, vertices are 4-17.
  *
- * 2   3,4,5  7,9,11   6
- *             8,10,12
+ * 4   5,6,7  10,12,14   8
+ *            11,13,15
  *     ^^^^^^^^^^^^ Cohesive element in x-y plane.
  */
 
-#include "CohesiveKinDataTet4.hh"
+#include "CohesiveKinDataTet4e.hh"
 
-const char* pylith::faults::CohesiveKinDataTet4::_meshFilename =
-  "data/tet4.mesh";
+const char* pylith::faults::CohesiveKinDataTet4e::_meshFilename =
+  "data/tet4e.mesh";
 
-const int pylith::faults::CohesiveKinDataTet4::_spaceDim = 3;
+const int pylith::faults::CohesiveKinDataTet4e::_spaceDim = 3;
 
-const int pylith::faults::CohesiveKinDataTet4::_cellDim = 2;
+const int pylith::faults::CohesiveKinDataTet4e::_cellDim = 2;
 
-const int pylith::faults::CohesiveKinDataTet4::_numBasis = 3;
+const int pylith::faults::CohesiveKinDataTet4e::_numBasis = 3;
 
-const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4e::_numQuadPts = 1;
 
-const double pylith::faults::CohesiveKinDataTet4::_quadPts[] = {
+const double pylith::faults::CohesiveKinDataTet4e::_quadPts[] = {
   3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_quadWts[] = {
+const double pylith::faults::CohesiveKinDataTet4e::_quadWts[] = {
   5.00000000e-01,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_basis[] = {
+const double pylith::faults::CohesiveKinDataTet4e::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::faults::CohesiveKinDataTet4::_basisDeriv[] = {
+const double pylith::faults::CohesiveKinDataTet4e::_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[] = {
+const double pylith::faults::CohesiveKinDataTet4e::_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 int pylith::faults::CohesiveKinDataTet4e::_id = 10;
 
-const char* pylith::faults::CohesiveKinDataTet4::_label = "fault";
+const char* pylith::faults::CohesiveKinDataTet4e::_label = "fault";
 
-const char* pylith::faults::CohesiveKinDataTet4::_finalSlipFilename = 
-  "data/tet4_finalslip.spatialdb";
+const char* pylith::faults::CohesiveKinDataTet4e::_finalSlipFilename = 
+  "data/tet4e_finalslip.spatialdb";
 
-const char* pylith::faults::CohesiveKinDataTet4::_slipTimeFilename = 
-  "data/tet4_sliptime.spatialdb";
+const char* pylith::faults::CohesiveKinDataTet4e::_slipTimeFilename = 
+  "data/tet4e_sliptime.spatialdb";
 
-const char* pylith::faults::CohesiveKinDataTet4::_peakRateFilename = 
-  "data/tet4_peakrate.spatialdb";
+const char* pylith::faults::CohesiveKinDataTet4e::_peakRateFilename = 
+  "data/tet4e_peakrate.spatialdb";
 
-const double pylith::faults::CohesiveKinDataTet4::_fieldT[] = {
-  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::CohesiveKinDataTet4e::_fieldT[] = {
+  3.1, 5.1, 7.1,
+  3.2, 5.2, 7.2,
+  3.3, 5.3, 7.3,
+  3.4, 5.4, 7.4,
+  3.5, 5.5, 7.5,
+  3.6, 5.6, 7.6,
+  3.7, 5.7, 7.7,
+  3.8, 5.8, 7.8,
+  3.9, 5.9, 7.9,
+  3.0, 5.0, 7.0,
+  4.1, 6.1, 8.1,
+  4.2, 6.2, 8.2,
+  4.3, 6.3, 8.3,
+  4.4, 6.4, 8.4,
 };
 
-const int pylith::faults::CohesiveKinDataTet4::_numConstraintVert = 3;
+const int pylith::faults::CohesiveKinDataTet4e::_numConstraintVert = 4;
 
-const double pylith::faults::CohesiveKinDataTet4::_orientation[] = {
+const double pylith::faults::CohesiveKinDataTet4e::_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::CohesiveKinDataTet4::_constraintVertices[] = {
-  8, 10, 12
+const int pylith::faults::CohesiveKinDataTet4e::_constraintVertices[] = {
+  11, 13, 15, 17
 };
 
-const int pylith::faults::CohesiveKinDataTet4::_constraintCells[] = {
-  13, 13, 13
+const int pylith::faults::CohesiveKinDataTet4e::_constraintCells[] = {
+  18, 18, 18, 19
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_valsResidual[] = {
+const double pylith::faults::CohesiveKinDataTet4e::_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,
   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
+  1.07974939836, -0.32861938211, 0.04694562602, // 11
   0.0,  0.0,  0.0,
-  0.90493237602, -0.32577565537, 0.10859188512, // 12
+  1.00381374723, -0.33460458241, 0.08365114560, // 13
+  0.0,  0.0,  0.0,
+  0.90493237602, -0.32577565537, 0.10859188512, // 15
+  0.0, 0.0, 0.0,
+  0.78469841324, -0.30180708202, 0.12072283281, // 17
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_valsJacobian[] = {
-  0.0, 0.0, 0.0, // 2x
+const double pylith::faults::CohesiveKinDataTet4e::_valsJacobian[] = {
+  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,
@@ -133,10 +140,10 @@
   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, // 4y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -144,73 +151,69 @@
   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, // 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, // 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, // 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,
- -1.0, 0.0, 0.0, // 8
   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,
   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, // 5y
   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
+ -1.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   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,-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,-1.0, 0.0, // 11
   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, // 6x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -218,43 +221,41 @@
   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,-1.0, // 13
   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, // 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,-1.0, // 12
-  0.0, 0.0, 0.0, // 5y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0, // 13
   0.0, 0.0, 0.0,
   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,
- -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,-1.0, 0.0, // 13
   0.0, 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, // 7x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -265,9 +266,10 @@
   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,-1.0, // 15
   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,
@@ -276,95 +278,87 @@
   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,
+ -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, // 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, // 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,-1.0, 0.0, // 15
   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, // 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, // 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,-1.0, // 17
+  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,+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
+ -1.0, 0.0, 0.0, // 17
+  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, // 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,-1.0, 0.0, // 17
+  0.0, 0.0, 0.0, // 9x
   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, // 9y
   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,
@@ -372,9 +366,7 @@
   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,
@@ -383,111 +375,351 @@
   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,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10x
   0.0, 0.0, 0.0,
-  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,+1.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+ +1.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,+1.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,-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,+1.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 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,
+  0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11y
+  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,+1.0, // 10
   0.0, 0.0, 0.0,
   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,
+  0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11z
+ -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,
+ +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,
   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,
+  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,-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,+1.0, // 13
+  0.0, 0.0, 0.0,
+  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,-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,
+ +1.0, 0.0, 0.0, // 13
+  0.0, 0.0, 0.0,
+  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,
- -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,
+  0.0,+1.0, 0.0, // 13
+  0.0, 0.0, 0.0,
+  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,-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,+1.0, 0.0, // 12
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,-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,+1.0, // 12
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,
+ -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,
+ +1.0, 0.0, 0.0, // 12
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  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,+1.0, // 15
+  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,
+ +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, // 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,+1.0, 0.0, // 15
+  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,-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,+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, // 15y
+  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,+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, // 15z
+  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,
+ +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, // 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,+1.0, // 17
+  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,
+ +1.0, 0.0, 0.0, // 17
+  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,+1.0, 0.0, // 17
+  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,-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,+1.0, 0.0, // 16
+  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,-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,+1.0, // 16
+  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,
+ -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,
+ +1.0, 0.0, 0.0, // 16
+  0.0, 0.0, 0.0,
 };
 
-pylith::faults::CohesiveKinDataTet4::CohesiveKinDataTet4(void)
+pylith::faults::CohesiveKinDataTet4e::CohesiveKinDataTet4e(void)
 { // constructor
   meshFilename = const_cast<char*>(_meshFilename);
   spaceDim = _spaceDim;
@@ -513,7 +745,7 @@
   numConstraintVert = _numConstraintVert;  
 } // constructor
 
-pylith::faults::CohesiveKinDataTet4::~CohesiveKinDataTet4(void)
+pylith::faults::CohesiveKinDataTet4e::~CohesiveKinDataTet4e(void)
 {}
 
 

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2007-06-18 00:28:00 UTC (rev 7280)
@@ -0,0 +1,520 @@
+// -*- 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   7,9,11   3,4,5  6
+ *      8,10,12
+ *     ^^^^^^^^^^^^ Cohesive element in x-y plane.
+ */
+
+#include "CohesiveKinDataTet4f.hh"
+
+const char* pylith::faults::CohesiveKinDataTet4f::_meshFilename =
+  "data/tet4f.mesh";
+
+const int pylith::faults::CohesiveKinDataTet4f::_spaceDim = 3;
+
+const int pylith::faults::CohesiveKinDataTet4f::_cellDim = 2;
+
+const int pylith::faults::CohesiveKinDataTet4f::_numBasis = 3;
+
+const int pylith::faults::CohesiveKinDataTet4f::_numQuadPts = 1;
+
+const double pylith::faults::CohesiveKinDataTet4f::_quadPts[] = {
+  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::faults::CohesiveKinDataTet4f::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::faults::CohesiveKinDataTet4f::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::faults::CohesiveKinDataTet4f::_basisDeriv[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::faults::CohesiveKinDataTet4f::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+};
+
+const int pylith::faults::CohesiveKinDataTet4f::_id = 10;
+
+const char* pylith::faults::CohesiveKinDataTet4f::_label = "fault";
+
+const char* pylith::faults::CohesiveKinDataTet4f::_finalSlipFilename = 
+  "data/tet4_finalslip.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataTet4f::_slipTimeFilename = 
+  "data/tet4_sliptime.spatialdb";
+
+const char* pylith::faults::CohesiveKinDataTet4f::_peakRateFilename = 
+  "data/tet4_peakrate.spatialdb";
+
+const double pylith::faults::CohesiveKinDataTet4f::_fieldT[] = {
+  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 int pylith::faults::CohesiveKinDataTet4f::_numConstraintVert = 3;
+
+const double pylith::faults::CohesiveKinDataTet4f::_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::CohesiveKinDataTet4f::_constraintVertices[] = {
+  8, 10, 12
+};
+
+const int pylith::faults::CohesiveKinDataTet4f::_constraintCells[] = {
+  13, 13, 13
+};
+
+const double pylith::faults::CohesiveKinDataTet4f::_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,
+  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::CohesiveKinDataTet4f::_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,+1.0, 0.0, // 10
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, // 10x
+  0.0, 0.0, 0.0,
+  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::CohesiveKinDataTet4f::CohesiveKinDataTet4f(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);
+  fieldT = const_cast<double*>(_fieldT);
+  orientation = const_cast<double*>(_orientation);
+  constraintVertices = const_cast<int*>(_constraintVertices);
+  constraintCells = const_cast<int*>(_constraintCells);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+  numConstraintVert = _numConstraintVert;  
+} // constructor
+
+pylith::faults::CohesiveKinDataTet4f::~CohesiveKinDataTet4f(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -0,0 +1,73 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_faults_cohesivekindatatet4f_hh)
+#define pylith_faults_cohesivekindatatet4f_hh
+
+#include "CohesiveKinData.hh"
+
+namespace pylith {
+  namespace faults {
+     class CohesiveKinDataTet4f;
+  } // pylith
+} // faults
+
+class pylith::faults::CohesiveKinDataTet4f : public CohesiveKinData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public: 
+
+  /// Constructor
+  CohesiveKinDataTet4f(void);
+
+  /// Destructor
+  ~CohesiveKinDataTet4f(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 _fieldT[]; ///< Solution field at time t.
+
+  static const double _orientation[]; ///< Expected values for fault orientation.
+  static const int _constraintVertices[]; ///< Expected points for constraint vertices
+  static const int _constraintCells[]; ///< Expected cells for constraint vertices
+  static const double _valsResidual[]; ///< Expected values from residual calculation.
+  static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
+  static const int _numConstraintVert; ///< Number of constraint vertices
+
+};
+
+#endif // pylith_faults_cohesivekindatatet4f_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-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am	2007-06-18 00:28:00 UTC (rev 7280)
@@ -41,6 +41,7 @@
 	tet4c.mesh \
 	tet4d.mesh \
 	tet4e.mesh \
+	tet4f.mesh \
 	tet4_finalslip.spatialdb \
 	tet4_sliptime.spatialdb \
 	tet4_peakrate.spatialdb \

Added: short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4f.mesh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4f.mesh	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/tet4f.mesh	2007-06-18 00:28:00 UTC (rev 7280)
@@ -0,0 +1,47 @@
+mesh = {
+  dimension = 3
+  use-index-zero = true
+  vertices = {
+    dimension = 3
+    count = 5
+    coordinates = {
+             0     -1.0  0.0  0.0
+             1      0.0 -1.0  0.0
+             2      0.0  0.0  1.0
+             3      0.0  1.0  0.0
+             4      1.0  0.0  0.0
+    }
+  }
+  cells = {
+    count = 2
+    num-corners = 4
+    simplices = {
+             1       1  3  2  4
+             0       1  2  3  0
+    }
+    material-ids = {
+             0   0
+             1   0
+    }
+  }
+  group = {
+    name = fault
+    type = vertices
+    count = 3
+    indices = {
+      1
+      2
+      3
+    }
+  }
+  group = {
+    name = output
+    type = vertices
+    count = 3
+    indices = {
+      0
+      2
+      3
+    }
+  }
+}

Modified: short/3D/PyLith/trunk/unittests/pytests/faults/TestFaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/faults/TestFaultCohesiveKin.py	2007-06-17 22:35:13 UTC (rev 7279)
+++ short/3D/PyLith/trunk/unittests/pytests/faults/TestFaultCohesiveKin.py	2007-06-18 00:28:00 UTC (rev 7280)
@@ -256,6 +256,7 @@
     fault.id = 10
     fault.label = "fault"
     fault.upDir = [0, 0, 1]
+    fault.normalDir = [1, 0, 0]
     fault.quadrature = quadrature
     fault.eqsrc = eqsrc
     fault.timeStep(dt)



More information about the cig-commits mailing list