[cig-commits] r19004 - in short/3D/PyLith/branches/v1.6-revisedfault: libsrc/pylith/faults unittests/libtests/faults unittests/libtests/faults/data

brad at geodynamics.org brad at geodynamics.org
Mon Oct 3 17:54:54 PDT 2011


Author: brad
Date: 2011-10-03 17:54:54 -0700 (Mon, 03 Oct 2011)
New Revision: 19004

Modified:
   short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveDyn.cc
   short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc
   short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
   short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3.cc
   short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc
   short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/cohesivedyn.py
Log:
Updated test data for slip and opening cases.

Modified: short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveDyn.cc	2011-10-04 00:25:12 UTC (rev 19003)
+++ short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveDyn.cc	2011-10-04 00:54:54 UTC (rev 19004)
@@ -629,20 +629,6 @@
       } // for
     } // for
 
-#if 1 // debugging
-    std::cout << "slipVertex: ";
-    for (int iDim=0; iDim < spaceDim; ++iDim)
-      std::cout << "  " << slipVertex[iDim];
-    std::cout << ",  slipRateVertex: ";
-    for (int iDim=0; iDim < spaceDim; ++iDim)
-      std::cout << "  " << slipRateVertex[iDim];
-    std::cout << ",  tractionVertex: ";
-    for (int iDim=0; iDim < spaceDim; ++iDim)
-      std::cout << "  " << tractionTpdtVertex[iDim];
-    std::cout << std::endl;
-#endif
-     
-
     // Get friction properties and state variables.
     _friction->retrievePropsStateVars(v_fault);
 
@@ -663,11 +649,33 @@
       } // for
     } // for
 
+#if 1 // debugging
+    std::cout << "slipVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << slipVertex[iDim];
+    std::cout << ",  slipRateVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << slipRateVertex[iDim];
+    std::cout << ",  tractionVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << tractionTpdtVertex[iDim];
+    std::cout << ",  dLagrangeTpdtVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dLagrangeTpdtVertex[iDim];
+    std::cout << ",  dLagrangeTpdtVertexGlobal: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dLagrangeTpdtVertexGlobal[iDim];
+    std::cout << std::endl;
+#endif
+     
+
     assert(dLagrangeTpdtVertexGlobal.size() ==
         dLagrangeTpdtSection->getFiberDimension(v_fault));
     dLagrangeTpdtSection->updatePoint(v_fault, &dLagrangeTpdtVertexGlobal[0]);
   } // for
 
+  dLagrangeTpdtSection->view("dLagrange"); // DEBUGGING
+
   // Solve sensitivity problem for negative side of the fault.
   bool negativeSide = true;
   _sensitivityUpdateJacobian(negativeSide, jacobian, *fields);
@@ -739,7 +747,7 @@
 	slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
 	  dispRelVertex[jDim];
 	dSlipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] * 
-	  2.0*sensDispRelVertex[jDim];
+	  sensDispRelVertex[jDim];
       } // for
     } // for
 
@@ -791,11 +799,11 @@
     
   } // for
 
-#if 0 // DEBUGGING
-  dLagrangeTpdtSection->view("AFTER dLagrange");
-  //dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
-  dispRelSection->view("AFTER RELATIVE DISPLACEMENT");
-  velRelSection->view("AFTER RELATIVE VELOCITY");
+#if 1 // DEBUGGING
+  //dLagrangeTpdtSection->view("AFTER dLagrange");
+  dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
+  //dispRelSection->view("AFTER RELATIVE DISPLACEMENT");
+  //velRelSection->view("AFTER RELATIVE VELOCITY");
 #endif
 } // constrainSolnSpace
 
@@ -1768,7 +1776,7 @@
 
   _jacobian->assemble("final_assembly");
 
-  //_jacobian->view(); // DEBUGGING
+  _jacobian->view(); // DEBUGGING
 } // _sensitivityUpdateJacobian
 
 // ----------------------------------------------------------------------
@@ -1782,7 +1790,7 @@
    * so we compute L rather than extract entries from the Jacoiab.
    */
 
-  const double signFault = (negativeSide) ? -1.0 : 1.0;
+  const double signFault = (negativeSide) ? 1.0 : -1.0;
 
   // Get cell information
   const int numQuadPts = _quadrature->numQuadPts();
@@ -1864,10 +1872,10 @@
     
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
       for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-	const double l = basisProducts[iBasis*numBasis+jBasis];
+	const double l = signFault * basisProducts[iBasis*numBasis+jBasis];
 	for (int iDim=0; iDim < spaceDim; ++iDim) {
-	  residualCell[iBasis*spaceDim+iDim] -= 
-	    signFault * l * dLagrangeCell[jBasis*spaceDim+iDim];
+	  residualCell[iBasis*spaceDim+iDim] += 
+	    l * dLagrangeCell[jBasis*spaceDim+iDim];
 	} // for
       } // for
     } // for
@@ -1907,7 +1915,7 @@
   // Update section view of field.
   solution.scatterVectorToSection();
 
-#if 0 // DEBUGGING
+#if 1 // DEBUGGING
   residual.view("SENSITIVITY RESIDUAL");
   solution.view("SENSITIVITY SOLUTION");
 #endif

Modified: short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveDyn.cc	2011-10-04 00:25:12 UTC (rev 19003)
+++ short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveDyn.cc	2011-10-04 00:54:54 UTC (rev 19004)
@@ -307,105 +307,105 @@
   fault.timeStep(dt);
   fault.constrainSolnSpace(&fields, t, jacobian);
 
-  //residual.view("RESIDUAL"); // DEBUGGING
+  { // Check slip values
+    // Slip values should be adjusted based on the change in the
+    // Lagrange multipliers as reflected in the slipSlipE data member.
 
-  { // Check solution values
-    // Lagrange multipliers should be adjusted according to friction
-    // as reflected in the fieldIncrSlipE data member.
-    const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
-    CPPUNIT_ASSERT(!sieveMesh.isNull());
-    const ALE::Obj<SieveMesh::label_sequence>& vertices =
-      sieveMesh->depthStratum(0);
+    // Get fault vertex info
+    const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
+    CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+    const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+      faultSieveMesh->depthStratum(0);
     CPPUNIT_ASSERT(!vertices.isNull());
-    const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
-    const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+    const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+    const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
 
-    // Get section containing solution (disp + Lagrange multipliers)
-    const ALE::Obj<RealSection>& dispIncrSection =
-      fields.get("dispIncr(t->t+dt)").section();
-    CPPUNIT_ASSERT(!dispIncrSection.isNull());
+    // Get section containing slip
+    const ALE::Obj<RealSection>& slipSection =
+      fault.vertexField("slip").section();
+    CPPUNIT_ASSERT(!slipSection.isNull());
 
+    slipSection->view("SLIP"); // DEBUGGING
+
     // Get expected values
-    const double* valsE = _data->fieldIncrSlipE; // Expected values for dispIncr
+    const double* valsE = _data->slipSlipE;
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
     const double tolerance = 1.0e-06;
-    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
-	 v_iter != verticesEnd;
-	 ++v_iter, ++iVertex) { // loop over all vertices in mesh
+    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
+	   != verticesEnd;
+	 ++v_iter, ++iVertex) { // loop over fault vertices
       // Check fiber dimension (number of values at point)
-      const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
+      const int fiberDim = slipSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = dispIncrSection->restrictPoint(*v_iter);
+      const double* vals = slipSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
         const double valE = valsE[index];
-#if 0 // DEBUGGING
-	std::cout << "SOLUTION valE: " << valE
+#if 1 // DEBUGGING
+	std::cout << "SLIP valE: " << valE
 		  << ", val: " << vals[i]
 		  << ", error: " << fabs(1.0-vals[i]/valE)
 		  << std::endl;
 #endif // DEBUGGING
-	if (fabs(valE) > tolerance)
+        if (fabs(valE) > tolerance)
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
         else
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
       } // for
     } // for
-  } // Check solution values
+  } // Check slip values
 
-  { // Check slip values
-    // Slip values should be adjusted based on the change in the
-    // Lagrange multipliers as reflected in the slipSlipE data member.
-
-    // Get fault vertex info
-    const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
-    CPPUNIT_ASSERT(!faultSieveMesh.isNull());
-    const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
-      faultSieveMesh->depthStratum(0);
+  { // Check solution values
+    // Lagrange multipliers should be adjusted according to friction
+    // as reflected in the fieldIncrSlipE data member.
+    const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+    CPPUNIT_ASSERT(!sieveMesh.isNull());
+    const ALE::Obj<SieveMesh::label_sequence>& vertices =
+      sieveMesh->depthStratum(0);
     CPPUNIT_ASSERT(!vertices.isNull());
-    const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
-    const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+    const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
+    const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
 
-    // Get section containing slip
-    const ALE::Obj<RealSection>& slipSection =
-      fault.vertexField("slip").section();
-    CPPUNIT_ASSERT(!slipSection.isNull());
+    // Get section containing solution (disp + Lagrange multipliers)
+    const ALE::Obj<RealSection>& dispIncrSection =
+      fields.get("dispIncr(t->t+dt)").section();
+    CPPUNIT_ASSERT(!dispIncrSection.isNull());
 
     // Get expected values
-    const double* valsE = _data->slipSlipE;
+    const double* valsE = _data->fieldIncrSlipE; // Expected values for dispIncr
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
     const double tolerance = 1.0e-06;
-    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
-	   != verticesEnd;
-	 ++v_iter, ++iVertex) { // loop over fault vertices
+    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
+	 v_iter != verticesEnd;
+	 ++v_iter, ++iVertex) { // loop over all vertices in mesh
       // Check fiber dimension (number of values at point)
-      const int fiberDim = slipSection->getFiberDimension(*v_iter);
+      const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = slipSection->restrictPoint(*v_iter);
+      const double* vals = dispIncrSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
         const double valE = valsE[index];
-#if 0 // DEBUGGING
-	std::cout << "SLIP valE: " << valE
+#if 1 // DEBUGGING
+	std::cout << "SOLUTION valE: " << valE
 		  << ", val: " << vals[i]
 		  << ", error: " << fabs(1.0-vals[i]/valE)
 		  << std::endl;
 #endif // DEBUGGING
-        if (fabs(valE) > tolerance)
+	if (fabs(valE) > tolerance)
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
         else
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
       } // for
     } // for
-  } // Check slip values
+  } // Check solution values
 
 } // testConstrainSolnSpaceSlip
 

Modified: short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc	2011-10-04 00:25:12 UTC (rev 19003)
+++ short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc	2011-10-04 00:54:54 UTC (rev 19004)
@@ -103,209 +103,167 @@
   8.0, 9.0, // 11
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
 const double pylith::faults::CohesiveDynDataQuad4::_jacobian[] = {
-   1, 0.1,
+ 0.1, 0.1, // 2x
  0.2, 0.3,
  0.4, 0.5,
  0.6, 0.7,
  0.8, 0.9,
-   1, 1.1,
+ 1.0, 1.1,
  1.2, 1.3,
  1.4, 1.5,
  1.6, 1.7,
  1.8, 1.9,
-   2,   1,
+ 2.0, 2.1, // 2y
  2.1, 2.2,
  2.3, 2.4,
  2.5, 2.6,
  2.7, 2.8,
- 2.9,   3,
+ 2.9, 3.0,
  3.1, 3.2,
  3.3, 3.4,
  3.5, 3.6,
  3.7, 3.8,
- 3.9,   4,
-   1, 4.1,
+ 3.9, 4.0, // 3x
+ 4.0, 4.1,
  4.2, 4.3,
  4.4, 4.5,
  4.6, 4.7,
  4.8, 4.9,
-   5, 5.1,
+ 5.0, 5.1,
  5.2, 5.3,
  5.4, 5.5,
  5.6, 5.7,
- 5.8, 5.9,
-   6,   1,
+ 5.8, 5.9, // 3y
+ 6.0, 6.1,
  6.1, 6.2,
  6.3, 6.4,
  6.5, 6.6,
  6.7, 6.8,
- 6.9,   7,
+ 6.9, 7.0,
  7.1, 7.2,
  7.3, 7.4,
  7.5, 7.6,
- 7.7, 7.8,
- 7.9,   8,
-   1, 8.1,
- 8.2, 8.3,
+ 7.7, 7.8, // 4x
+ 7.9, 8.0,
++4.0,-1.2, // 4
+-2.2,-2.3, // 5
  8.4, 8.5,
  8.6, 8.7,
  8.8, 8.9,
-   9, 9.1,
- 9.2,  -1,
+ 9.0, 9.1,
+ 9.2, 9.3,
  9.3, 9.4,
- 9.5, 9.6,
- 9.7, 9.8,
- 9.9,   1,
-  10,10.1,
-10.2,10.3,
-10.4,10.5,
-10.6,10.7,
-10.8,10.9,
-  -1,  11,
-11.1,11.2,
-11.3,11.4,
-11.5,11.6,
-11.7,11.8,
-   1,11.9,
-  12,12.1,
-12.2,12.3,
-12.4,12.5,
-12.6,12.7,
-12.8,12.9,
-  13,  -1,
-13.1,13.2,
-13.3,13.4,
-13.5,13.6,
-13.7,   1,
-13.8,13.9,
-  14,14.1,
-14.2,14.3,
-14.4,14.5,
-14.6,14.7,
-  -1,14.8,
-14.9,  15,
-15.1,15.2,
-15.3,15.4,
-15.5,15.6,
-   1,15.7,
-15.8,15.9,
-  16,16.1,
-16.2,16.3,
-16.4,16.5,
-16.6,16.7,
-16.8,16.9,
-  17,17.1,
-17.2,17.3,
-17.4,17.5,
-17.6,   1,
-17.7,17.8,
-17.9,  18,
-18.1,18.2,
-18.3,18.4,
-18.5,18.6,
-18.7,18.8,
-18.9,  19,
-19.1,19.2,
-19.3,19.4,
-19.5,19.6,
-   1,19.7,
-19.8,19.9,
-  20,20.1,
-20.2,20.3,
-20.4,20.5,
-20.6,20.7,
-20.8,20.9,
-  21,21.1,
-21.2,21.3,
-21.4,21.5,
-21.6,   1,
-21.7,21.8,
-21.9,  22,
-22.1,22.2,
-22.3,22.4,
-22.5,22.6,
-22.7,22.8,
-22.9,  23,
-23.1,23.2,
-23.3,23.4,
-23.5,23.6,
-   1,23.7,
-23.8,23.9,
-  24,   1,
-24.1,24.2,
-24.3,24.4,
-24.5,24.6,
-24.7,24.8,
-24.9,  25,
-25.1,25.2,
-25.3,25.4,
-25.5,   1,
-25.6,25.7,
-   1,25.8,
-25.9,  26,
-26.1,26.2,
-26.3,26.4,
-26.5,26.6,
-26.7,26.8,
-26.9,  27,
-27.1,27.2,
-27.3,27.4,
-   1,27.5,
-27.6,27.7,
-27.8,   1,
-27.9,  28,
-28.1,28.2,
-28.3,28.4,
-28.5,28.6,
-28.7,28.8,
-28.9,  29,
-29.1,29.2,
-29.3,   1,
-29.4,29.5,
-   1,29.6,
-29.7,29.8,
-29.9,  30,
-30.1,  -1,
-30.2,30.3,
-30.4,30.5,
-30.6,30.7,
-30.8,   1,
-30.9,  31,
-31.1,31.2,
-31.3,31.4,
-31.5,31.6,
-31.7,31.8,
-  -1,31.9,
-  32,32.1,
-32.2,32.3,
-32.4,32.5,
-   1,32.6,
-32.7,32.8,
-32.9,  33,
-33.1,33.2,
-33.3,33.4,
-33.5,33.6,
-33.7,33.8,
-33.9,  -1,
-  34,34.1,
-34.2,34.3,
-34.4,34.5,
-34.6,   1,
-34.7,34.8,
-34.9,  35,
-35.1,35.2,
-35.3,35.4,
-35.5,35.6,
-  -1,35.7,
-35.8,35.9,
-  36,36.1,
-36.2,36.3,
-   1,36.4,
-36.5,36.6,
-36.7,36.8,
+ 3.7, 4.8, // 4y
+ 3.9, 4.0,
+-1.2,+5.0, // 4
+-1.3,-3.2, // 5
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 7.7, 7.8, // 5x
+ 7.9, 8.0,
+-2.2,-1.3, // 4
++4.1,-4.3, // 5
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 5y
+ 3.9, 4.0,
+-2.3,-3.2, // 4
+-4.3,+5.1, // 5
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 0.1, 0.1, // 6x
+ 0.2, 0.3,
+ 0.4, 0.5,
+ 0.6, 0.7,
+ 0.8, 0.9,
+ 1.0, 1.1,
+ 1.2, 1.3,
+ 1.4, 1.5,
+ 1.6, 1.7,
+ 1.8, 1.9,
+ 2.0, 2.1, // 6y
+ 2.1, 2.2,
+ 2.3, 2.4,
+ 2.5, 2.6,
+ 2.7, 2.8,
+ 2.9, 3.0,
+ 3.1, 3.2,
+ 3.3, 3.4,
+ 3.5, 3.6,
+ 3.7, 3.8,
+ 3.9, 4.0, // 7x
+ 4.0, 4.1,
+ 4.2, 4.3,
+ 4.4, 4.5,
+ 4.6, 4.7,
+ 4.8, 4.9,
+ 5.0, 5.1,
+ 5.2, 5.3,
+ 5.4, 5.5,
+ 5.6, 5.7,
+ 5.8, 5.9, // 7y
+ 6.0, 6.1,
+ 6.1, 6.2,
+ 6.3, 6.4,
+ 6.5, 6.6,
+ 6.7, 6.8,
+ 6.9, 7.0,
+ 7.1, 7.2,
+ 7.3, 7.4,
+ 7.5, 7.6,
+ 7.7, 7.8, // 8x
+ 7.9, 8.0,
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
++5.0,-1.2, // 8
+-2.2,-2.3, // 9
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 8y
+ 3.9, 4.0,
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+-1.2,+4.0, // 8
+-1.3,-3.2, // 9
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 7.7, 7.8, // 9x
+ 7.9, 8.0,
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
+-2.2,-1.3, // 8
++5.1,-4.3, // 9
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 9y
+ 3.9, 4.0,
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+-2.3,-3.2, // 8
+-4.3,+4.1, // 9
+ 4.2, 5.3,
+ 4.3, 5.4,
 };
 
 // ----------------------------------------------------------------------
@@ -358,37 +316,36 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlip[] = {
-  9.1, 10.1,
-  9.2, 10.2,
-  9.3, 10.3, // 4
-  9.4, 10.4, // 5
-  9.5, 10.5,
-  9.6, 10.6,
-  9.7, 10.7, // 8
-  9.9, 10.9, // 9
-  -9.8, -10.8, // 10
-  -9.0, -10.0, // 11
+  1.1, 2.1,
+  1.2, 2.2,
+  1.3, 2.3, // 4
+  1.4, 2.4, // 5
+  1.5, 2.5,
+  1.6, 2.6,
+  1.7, 2.7, // 8
+  1.9, 2.9, // 9
+  1.8, 2.8, // 10
+  1.0, 2.0, // 11
 };
 
 // Output
-// :TODO: Update Lagrange multiplier values
 const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlipE[] = {
-  9.1,  10.100000000000,
-  9.2,  10.200000000000,
-  9.3,  10.313079001869,
-  9.4,  10.405865253910,
-  9.5,  10.500000000000,
-  9.6,  10.600000000000,
-  9.7,  10.686920998131,
-  9.9,  10.894134746090,
- -9.4, -10.800000000000,
- -8.6, -10.000000000000,
+   1.100000000000,   2.100000000000,
+   1.200000000000,   2.200000000000,
+   1.300000000000,   2.468370545405,
+   1.400000000000,   3.350253402750,
+   1.500000000000,   2.500000000000,
+   1.600000000000,   2.600000000000,
+   1.700000000000,   2.531629454595,
+   1.900000000000,   1.949746597250,
+   1.800000000000,  -3.440000000000,
+   1.000000000000,  -3.600000000000,
 };
 
 // Update slip values based on changes in Lagrange multiplier values
 const double pylith::faults::CohesiveDynDataQuad4::_slipSlipE[] = {
-  0.026158003737426,                   0.0,
-  0.011730507820273,                   0.0,
+   0.336741090809,   0.000000000000,
+   1.900506805500,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
@@ -396,35 +353,35 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpen[] = {
-  9.1, 10.1,
-  9.2, 10.2,
-  9.3, 10.3, // 4
-  9.4, 10.4, // 5
-  9.5, 10.5,
-  9.6, 10.6,
-  9.7, 10.7, // 8
-  9.9, 10.9, // 9
-  9.8, 10.8, // 10
-  9.0, 10.0, // 11
+  1.1, 2.1,
+  1.2, 2.2,
+  1.3, 2.3, // 4
+  1.4, 2.4, // 5
+  1.5, 2.5,
+  1.6, 2.6,
+  1.7, 2.7, // 8
+  1.9, 2.9, // 9
+  -10.8, 2.8, // 10
+  -10.0, 2.0, // 11
 };
 
 // Output
 const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpenE[] = {
-   9.100000000000,  10.100000000000,
-   9.200000000000,  10.200000000000,
-   9.300000000000,  10.685047196672,
-   9.932709332305,  11.176949275526,
-   9.500000000000,  10.500000000000,
-   9.600000000000,  10.600000000000,
-   9.700000000000,  10.314952803328,
-   9.367290667695,  10.123050724474,
+   1.100000000000,   2.100000000000,
+   1.200000000000,   2.200000000000,
+   3.837558167495,   2.192904776328,
+   4.297022233334,   3.773022694556,
+   1.500000000000,   2.500000000000,
+   1.600000000000,   2.600000000000,
+  -0.837558167495,   2.807095223672,
+  -0.997022233334,   1.526977305444,
   -8.800000000000,  -9.800000000000,
   -8.000000000000,  -9.000000000000,
 };
 
 const double pylith::faults::CohesiveDynDataQuad4::_slipOpenE[] = {
-  0.770094393343286,  0.0,
-  1.553898551051246,   1.065418664609568,
+  -0.214190447343,   5.075116334990,
+   2.746045389111,   5.794044466667,
 };
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTet4.cc	2011-10-04 00:25:12 UTC (rev 19003)
+++ short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTet4.cc	2011-10-04 00:54:54 UTC (rev 19004)
@@ -92,372 +92,370 @@
   7.1, 8.1, 9.1, // 12
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
 const double pylith::faults::CohesiveDynDataTet4::_jacobian[] = {
-    1,  0.1,  0.2,
+  1.0,  0.1,  0.2, // 2x
   0.3,  0.4,  0.5,
   0.6,  0.7,  0.8,
-  0.9,    1,  1.1,
+  0.9,  1.0,  1.1,
   1.2,  1.3,  1.4,
   1.5,  1.6,  1.7,
-  1.8,  1.9,    2,
+  1.8,  1.9,  2.0,
   2.1,  2.2,  2.3,
   2.4,  2.5,  2.6,
   2.7,  2.8,  2.9,
-    3,  3.1,  3.2,
-  3.3,    1,  3.4,
-  3.5,  3.6,  3.7,
-  3.8,  3.9,    4,
-  4.1,  4.2,  4.3,
-  4.4,  4.5,  4.6,
-  4.7,  4.8,  4.9,
-    5,  5.1,  5.2,
-  5.3,  5.4,  5.5,
-  5.6,  5.7,  5.8,
-  5.9,    6,  6.1,
-  6.2,  6.3,  6.4,
-  6.5,  6.6,    1,
-  6.7,  6.8,  6.9,
-    7,  7.1,  7.2,
-  7.3,  7.4,  7.5,
-  7.6,  7.7,  7.8,
-  7.9,    8,  8.1,
-  8.2,  8.3,  8.4,
-  8.5,  8.6,  8.7,
-  8.8,  8.9,    9,
-  9.1,  9.2,  9.3,
-  9.4,  9.5,  9.6,
-  9.7,  9.8,  9.9,
-    1,   10, 10.1,
- 10.2, 10.3, 10.4,
- 10.5, 10.6, 10.7,
- 10.8, 10.9,   11,
- 11.1, 11.2, 11.3,
- 11.4, 11.5, 11.6,
- 11.7, 11.8, 11.9,
-   12, 12.1,   -1,
- 12.2, 12.3, 12.4,
- 12.5, 12.6, 12.7,
- 12.8, 12.9,   13,
- 13.1,    1, 13.2,
- 13.3, 13.4, 13.5,
- 13.6, 13.7, 13.8,
- 13.9,   14, 14.1,
- 14.2, 14.3, 14.4,
- 14.5, 14.6, 14.7,
- 14.8, 14.9,   15,
-   -1, 15.1, 15.2,
- 15.3, 15.4, 15.5,
- 15.6, 15.7, 15.8,
- 15.9,   16, 16.1,
- 16.2, 16.3,    1,
- 16.4, 16.5, 16.6,
- 16.7, 16.8, 16.9,
-   17, 17.1, 17.2,
- 17.3, 17.4, 17.5,
- 17.6, 17.7, 17.8,
- 17.9,   18, 18.1,
- 18.2,   -1, 18.3,
- 18.4, 18.5, 18.6,
- 18.7, 18.8, 18.9,
-   19, 19.1, 19.2,
- 19.3, 19.4, 19.5,
-    1, 19.6, 19.7,
- 19.8, 19.9,   20,
- 20.1, 20.2, 20.3,
- 20.4, 20.5, 20.6,
- 20.7, 20.8, 20.9,
-   21, 21.1, 21.2,
- 21.3, 21.4, 21.5,
- 21.6, 21.7,   -1,
- 21.8, 21.9,   22,
- 22.1, 22.2, 22.3,
- 22.4, 22.5, 22.6,
- 22.7,    1, 22.8,
- 22.9,   23, 23.1,
- 23.2, 23.3, 23.4,
- 23.5, 23.6, 23.7,
- 23.8, 23.9,   24,
- 24.1, 24.2, 24.3,
- 24.4, 24.5, 24.6,
-   -1, 24.7, 24.8,
- 24.9,   25, 25.1,
- 25.2, 25.3, 25.4,
- 25.5, 25.6, 25.7,
- 25.8, 25.9,    1,
-   26, 26.1, 26.2,
- 26.3, 26.4, 26.5,
- 26.6, 26.7, 26.8,
- 26.9,   27, 27.1,
- 27.2, 27.3, 27.4,
- 27.5, 27.6, 27.7,
- 27.8,   -1, 27.9,
-   28, 28.1, 28.2,
- 28.3, 28.4, 28.5,
- 28.6, 28.7, 28.8,
- 28.9,   29, 29.1,
-    1, 29.2, 29.3,
- 29.4, 29.5, 29.6,
- 29.7, 29.8, 29.9,
-   30, 30.1, 30.2,
- 30.3, 30.4, 30.5,
- 30.6, 30.7, 30.8,
- 30.9,   31, 31.1,
- 31.2, 31.3,   -1,
- 31.4, 31.5, 31.6,
- 31.7, 31.8, 31.9,
-   32, 32.1, 32.2,
- 32.3,    1, 32.4,
- 32.5, 32.6, 32.7,
- 32.8, 32.9,   33,
- 33.1, 33.2, 33.3,
- 33.4, 33.5, 33.6,
- 33.7, 33.8, 33.9,
-   34, 34.1, 34.2,
-   -1, 34.3, 34.4,
- 34.5, 34.6, 34.7,
- 34.8, 34.9,   35,
- 35.1, 35.2, 35.3,
- 35.4, 35.5,    1,
- 35.6, 35.7, 35.8,
- 35.9,   36, 36.1,
- 36.2, 36.3, 36.4,
- 36.5, 36.6, 36.7,
- 36.8, 36.9,   37,
- 37.1, 37.2, 37.3,
- 37.4,   -1, 37.5,
- 37.6, 37.7, 37.8,
- 37.9,   38, 38.1,
- 38.2, 38.3, 38.4,
- 38.5, 38.6, 38.7,
-    1, 38.8, 38.9,
-   39, 39.1, 39.2,
- 39.3, 39.4, 39.5,
- 39.6, 39.7, 39.8,
- 39.9,   40, 40.1,
- 40.2, 40.3, 40.4,
- 40.5, 40.6, 40.7,
- 40.8, 40.9,   41,
- 41.1, 41.2, 41.3,
- 41.4, 41.5, 41.6,
- 41.7, 41.8, 41.9,
-   42,    1, 42.1,
- 42.2, 42.3, 42.4,
- 42.5, 42.6, 42.7,
- 42.8, 42.9,   43,
- 43.1, 43.2, 43.3,
- 43.4, 43.5, 43.6,
- 43.7, 43.8, 43.9,
-   44, 44.1, 44.2,
- 44.3, 44.4, 44.5,
- 44.6, 44.7, 44.8,
- 44.9,   45, 45.1,
- 45.2, 45.3,    1,
- 45.4, 45.5, 45.6,
- 45.7, 45.8, 45.9,
-   46, 46.1, 46.2,
- 46.3, 46.4, 46.5,
- 46.6, 46.7, 46.8,
- 46.9,   47, 47.1,
- 47.2, 47.3, 47.4,
- 47.5, 47.6, 47.7,
- 47.8, 47.9,   48,
- 48.1, 48.2, 48.3,
- 48.4, 48.5, 48.6,
-    1, 48.7, 48.8,
- 48.9,   49, 49.1,
- 49.2, 49.3, 49.4,
- 49.5, 49.6,    1,
- 49.7, 49.8, 49.9,
-   50, 50.1, 50.2,
- 50.3, 50.4, 50.5,
- 50.6, 50.7, 50.8,
- 50.9,   51, 51.1,
- 51.2, 51.3, 51.4,
- 51.5, 51.6, 51.7,
- 51.8,    1, 51.9,
-   52, 52.1, 52.2,
- 52.3, 52.4, 52.5,
-    1, 52.6, 52.7,
- 52.8, 52.9,   53,
- 53.1, 53.2, 53.3,
- 53.4, 53.5, 53.6,
- 53.7, 53.8, 53.9,
-   54, 54.1, 54.2,
- 54.3, 54.4, 54.5,
- 54.6, 54.7, 54.8,
- 54.9,   55,    1,
- 55.1, 55.2, 55.3,
- 55.4, 55.5, 55.6,
- 55.7,    1, 55.8,
- 55.9,   56, 56.1,
- 56.2, 56.3, 56.4,
- 56.5, 56.6, 56.7,
- 56.8, 56.9,   57,
- 57.1, 57.2, 57.3,
- 57.4, 57.5, 57.6,
- 57.7, 57.8, 57.9,
-   58, 58.1, 58.2,
-    1, 58.3, 58.4,
- 58.5, 58.6, 58.7,
- 58.8, 58.9,   59,
- 59.1, 59.2,    1,
- 59.3, 59.4, 59.5,
- 59.6, 59.7, 59.8,
- 59.9,   60, 60.1,
- 60.2, 60.3, 60.4,
- 60.5, 60.6, 60.7,
- 60.8, 60.9,   61,
- 61.1, 61.2, 61.3,
- 61.4,    1, 61.5,
- 61.6, 61.7, 61.8,
- 61.9,   62, 62.1,
-    1, 62.2, 62.3,
- 62.4, 62.5, 62.6,
- 62.7, 62.8, 62.9,
-   63, 63.1, 63.2,
- 63.3, 63.4, 63.5,
- 63.6, 63.7, 63.8,
- 63.9,   64, 64.1,
- 64.2, 64.3, 64.4,
- 64.5, 64.6,    1,
- 64.7, 64.8, 64.9,
-   65, 65.1, 65.2,
- 65.3,    1, 65.4,
- 65.5, 65.6, 65.7,
- 65.8, 65.9,   66,
- 66.1, 66.2, 66.3,
- 66.4, 66.5, 66.6,
- 66.7, 66.8, 66.9,
-   67, 67.1, 67.2,
- 67.3, 67.4, 67.5,
- 67.6, 67.7, 67.8,
-    1, 67.9,   68,
- 68.1, 68.2, 68.3,
- 68.4, 68.5, 68.6,
- 68.7, 68.8,    1,
- 68.9,   69, 69.1,
- 69.2, 69.3, 69.4,
- 69.5, 69.6, 69.7,
- 69.8, 69.9,   70,
- 70.1, 70.2, 70.3,
- 70.4, 70.5, 70.6,
- 70.7, 70.8, 70.9,
-   71,    1, 71.1,
- 71.2, 71.3, 71.4,
- 71.5, 71.6, 71.7,
-    1, 71.8, 71.9,
-   72, 72.1, 72.2,
- 72.3, 72.4, 72.5,
- 72.6, 72.7, 72.8,
- 72.9,   73, 73.1,
- 73.2, 73.3, 73.4,
- 73.5, 73.6, 73.7,
- 73.8, 73.9,   74,
- 74.1, 74.2,    1,
- 74.3, 74.4, 74.5,
- 74.6, 74.7, 74.8,
- 74.9,    1,   75,
- 75.1, 75.2, 75.3,
- 75.4,   -1, 75.5,
- 75.6, 75.7, 75.8,
- 75.9,   76, 76.1,
- 76.2, 76.3, 76.4,
- 76.5,    1, 76.6,
- 76.7, 76.8, 76.9,
-   77, 77.1, 77.2,
- 77.3, 77.4, 77.5,
- 77.6, 77.7, 77.8,
- 77.9,   78, 78.1,
- 78.2, 78.3, 78.4,
- 78.5, 78.6,   -1,
- 78.7, 78.8, 78.9,
-   79, 79.1, 79.2,
- 79.3, 79.4, 79.5,
- 79.6, 79.7,    1,
- 79.8, 79.9,   80,
- 80.1, 80.2, 80.3,
- 80.4, 80.5, 80.6,
- 80.7, 80.8, 80.9,
-   81, 81.1, 81.2,
- 81.3, 81.4, 81.5,
-   -1, 81.6, 81.7,
- 81.8, 81.9,   82,
- 82.1, 82.2, 82.3,
- 82.4, 82.5, 82.6,
-    1, 82.7, 82.8,
- 82.9,   83, 83.1,
- 83.2, 83.3, 83.4,
- 83.5, 83.6, 83.7,
- 83.8, 83.9,   84,
- 84.1, 84.2, 84.3,
- 84.4, 84.5, 84.6,
- 84.7, 84.8, 84.9,
-   85,   -1, 85.1,
- 85.2, 85.3, 85.4,
- 85.5, 85.6, 85.7,
- 85.8, 85.9,   86,
- 86.1,    1, 86.2,
- 86.3, 86.4, 86.5,
- 86.6, 86.7, 86.8,
- 86.9,   87, 87.1,
- 87.2, 87.3, 87.4,
- 87.5, 87.6, 87.7,
- 87.8, 87.9,   88,
- 88.1, 88.2,   -1,
- 88.3, 88.4, 88.5,
- 88.6, 88.7, 88.8,
- 88.9,   89, 89.1,
- 89.2, 89.3,    1,
- 89.4, 89.5, 89.6,
- 89.7, 89.8, 89.9,
-   90, 90.1, 90.2,
- 90.3, 90.4, 90.5,
- 90.6, 90.7, 90.8,
- 90.9,   91, 91.1,
-   -1, 91.2, 91.3,
- 91.4, 91.5, 91.6,
- 91.7, 91.8, 91.9,
-   92, 92.1, 92.2,
-    1, 92.3, 92.4,
- 92.5, 92.6, 92.7,
- 92.8, 92.9,   93,
- 93.1, 93.2, 93.3,
- 93.4, 93.5, 93.6,
- 93.7, 93.8, 93.9,
-   94, 94.1, 94.2,
- 94.3, 94.4, 94.5,
- 94.6,   -1, 94.7,
- 94.8, 94.9,   95,
- 95.1, 95.2, 95.3,
- 95.4, 95.5, 95.6,
- 95.7,    1, 95.8,
- 95.9,   96, 96.1,
- 96.2, 96.3, 96.4,
- 96.5, 96.6, 96.7,
- 96.8, 96.9,   97,
- 97.1, 97.2, 97.3,
- 97.4, 97.5, 97.6,
- 97.7, 97.8,   -1,
- 97.9,   98, 98.1,
- 98.2, 98.3, 98.4,
- 98.5, 98.6, 98.7,
- 98.8, 98.9,    1,
-   99, 99.1, 99.2,
- 99.3, 99.4, 99.5,
- 99.6, 99.7, 99.8,
- 99.9,  100,100.1,
-100.2,100.3,100.4,
-100.5,100.6,100.7,
-   -1,100.8,100.9,
-  101,101.1,101.2,
-101.3,101.4,101.5,
-101.6,101.7,101.8,
-    1,101.9,  102,
-102.1,102.2,102.3,
-102.4,102.5,102.6,
-102.7,102.8,102.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 2y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 2z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 3x
+ +4.0, -1.1, -1.2, // 3
+ -1.3, -1.4, -1.5, // 4
+ -1.6, -1.7, -1.8, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 3y
+ -1.1, +4.1, -2.3, // 3
+ -2.4, -2.5, -2.6, // 4
+ -2.7, -2.8, -2.9, // 5
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 3z
+ -1.2, -2.3, +4.2, // 3
+ -1.0, -1.1, -1.2, // 4
+ -1.3, -1.4, -1.5, // 5
+  1.5,  7.6,  2.7,
+  1.3,  7.4,  2.5,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 4x
+ -1.3, -2.4, -1.0, // 3
+ +4.3, -0.2, -0.3, // 4
+ -0.4, -0.5, -0.6, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 4y
+ -1.4, -2.5, -1.1, // 3
+ -0.2, +4.4, -0.9, // 4
+ -0.8, -0.7, -0.5, // 5
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 4z
+ -1.5, -2.6, -1.2, // 3
+ -0.3, -0.9, +4.5, // 4
+ -1.1, -1.2, -1.3, // 5
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 5x
+ -1.6, -2.7, -1.3, // 3
+ -0.4, -0.8, -1.1, // 4
+ +4.6, -1.8, -1.5, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  1.0,  0.1,  0.2, // 5y
+ -1.7, -2.8, -1.4, // 3
+ -0.5, -0.7, -1.2, // 4
+ -1.8, +4.7, -1.1, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  1.0,  7.1,  2.2, // 5z
+ -1.8, -2.9, -1.5, // 3
+ -0.6, -0.5, -1.3, // 4
+ -1.5, -1.1, +4.8, // 5
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 6x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 6y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 6z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 7x
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+ +5.0, -1.1, -1.2, // 3
+ -1.3, -1.4, -1.5, // 4
+ -1.6, -1.7, -1.8, // 5
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 7y
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+ -1.1, +5.1, -2.3, // 7
+ -2.4, -2.5, -2.6, // 8
+ -2.7, -2.8, -2.9, // 9
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 7z
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.3,  7.4,  2.5,
+ -1.2, -2.3, +5.2, // 7
+ -1.0, -1.1, -1.2, // 8
+ -1.3, -1.4, -1.5, // 9
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 8x
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+ -1.3, -2.4, -1.0, // 7
+ +5.3, -0.2, -0.3, // 8
+ -0.4, -0.5, -0.6, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 8y
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+ -1.4, -2.5, -1.1, // 7
+ -0.2, +5.4, -0.9, // 8
+ -0.8, -0.7, -0.5, // 9
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 8z
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+ -1.5, -2.6, -1.2, // 7
+ -0.3, -0.9, +5.5, // 8
+ -1.1, -1.2, -1.3, // 9
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 9x
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+ -1.6, -2.7, -1.3, // 7
+ -0.4, -0.8, -1.1, // 8
+ +5.6, -1.8, -1.5, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 9y
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+ -1.7, -2.8, -1.4, // 7
+ -0.5, -0.7, -1.2, // 8
+ -1.8, +5.7, -1.1, // 9
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 9z
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+ -1.8, -2.9, -1.5, // 7
+ -0.6, -0.5, -1.3, // 8
+ -1.5, -1.1, +5.8, // 9
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 10x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 10y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 10z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 11x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 11y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 11z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 12x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 12y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 12z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
 };
 
 // ----------------------------------------------------------------------
@@ -514,38 +512,38 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataTet4::_fieldIncrSlip[] = {
-  8.1, 9.1, 10.1,
-  8.2, 9.2, 10.2, // 3
-  8.3, 9.3, 10.3, // 4
-  8.4, 9.4, 10.4, // 5
-  8.5, 9.5, 10.5,
-  8.6, 9.6, 10.6, // 7
-  8.8, 9.8, 10.8, // 8
-  8.0, 9.0, 10.0, // 9
-  8.7, 9.7, -10.7, // 10
-  8.9, 9.9, -10.9, // 11
-  8.1, 9.1, -10.1, // 12
+  1.1, 2.1, 3.1,
+  1.2, 2.2, 3.2, // 3
+  1.3, 2.3, 3.3, // 4
+  1.4, 2.4, 3.4, // 5
+  1.5, 2.5, 3.5,
+  1.6, 2.6, 3.6, // 7
+  1.8, 2.8, 3.8, // 8
+  1.0, 2.0, 3.0, // 9
+  9.7, 2.7, 3.7, // 10
+  9.9, 2.9, 3.9, // 11
+  9.1, 2.1, 3.1, // 12
 };
 
 // Output
 const double pylith::faults::CohesiveDynDataTet4::_fieldIncrSlipE[] = {
-   8.100000000000,   9.100000000000,  10.100000000000,
-   8.200000000000,   8.391727731714,  10.956284985259,
-   8.300000000000,   8.791277340217,  10.815192651071,
-   8.400000000000,   9.060755249362,  10.758883268626,
-   8.500000000000,   9.500000000000,  10.500000000000,
-   8.600000000000,  10.408272268286,   9.843715014741,
-   8.800000000000,  10.308722659783,  10.284807348929,
-   8.000000000000,   9.339244750638,   9.641116731374,
-  -7.300777685147,  -8.252092036995, -10.700000000000,
-  -7.500201409882,  -8.452606339630, -10.900000000000,
-  -6.702681322117,  -7.650402548711, -10.100000000000,
+   1.100000000000,   2.100000000000,   3.100000000000,
+   1.200000000000,   2.433903699854,   3.235410526853,
+   1.300000000000,   2.308933719863,   3.314292166303,
+   1.400000000000,   2.517316497418,   3.471580524964,
+   1.500000000000,   2.500000000000,   3.500000000000,
+   1.600000000000,   2.366096300146,   3.564589473147,
+   1.800000000000,   2.791066280137,   3.785707833697,
+   1.000000000000,   1.882683502582,   2.928419475036,
+   9.700000000000,  -1.935106067360,  -1.748282570405,
+   9.900000000000,  -1.959241090539,  -1.782841275376,
+   9.100000000000,  -1.865391385620,  -1.642919108291,
 };
 
 const double pylith::faults::CohesiveDynDataTet4::_slipSlipE[] = {
-  -1.616544536572,  -1.512569970519,   0.000000000000,
-  -1.017445319566,  -1.030385302142,   0.000000000000,
-  -0.678489501275,  -0.717766537252,   0.000000000000,
+   0.467807399707,  -0.070821053706,   0.000000000000,
+   0.017867439727,  -0.028584332606,   0.000000000000,
+   0.234632994837,  -0.143161049929,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
@@ -553,38 +551,38 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataTet4::_fieldIncrOpen[] = {
-  8.1, 9.1, 10.1,
-  8.2, 9.2, 10.2, // 3
-  8.3, 9.3, 10.3, // 4
-  8.4, 9.4, 10.4, // 5
-  8.5, 9.5, 10.5,
-  8.6, 9.6, 10.6, // 7
-  8.8, 9.8, 10.8, // 8
-  8.0, 9.0, 10.0, // 9
-  8.7, 9.7, 10.7, // 10
-  8.9, 9.9, 10.9, // 11
-  8.1, 9.1, 10.1, // 12
+  1.1, 2.1, 3.1,
+  1.2, 2.2, 3.2, // 3
+  1.3, 2.3, 3.3, // 4
+  1.4, 2.4, 3.4, // 5
+  1.5, 2.5, 3.5,
+  1.6, 2.6, 3.6, // 7
+  1.8, 2.8, 3.8, // 8
+  1.0, 2.0, 3.0, // 9
+ -20.7, 2.7, 3.7, // 10
+ -20.9, 2.9, 3.9, // 11
+ -20.1, 2.1, 3.1, // 12
 };
 
 // Output
 const double pylith::faults::CohesiveDynDataTet4::_fieldIncrOpenE[] = {
-   8.100000000000,   9.100000000000,  10.100000000000,
-   8.200000000000,   8.707485448105,  11.300792216319,
-   8.300000000000,   9.089936432069,  11.135493258511,
-   8.400000000000,   9.353421152116,  11.068689140292,
-   8.500000000000,   9.500000000000,  10.500000000000,
-   8.600000000000,  10.092514551895,   9.499207783681,
-   8.800000000000,  10.010063567931,   9.964506741489,
-   8.000000000000,   9.046578847884,   9.331310859708,
+   1.100000000000,   2.100000000000,   3.100000000000,
+   2.475088478561,   2.213019936374,   2.881149654501,
+   2.516111596990,   1.955359213432,   2.906382357903,
+   2.454638633592,   2.326073874055,   3.211721621635,
+   1.500000000000,   2.500000000000,   3.500000000000,
+   0.324911521439,   2.586980063626,   3.918850345499,
+   0.583888403010,   3.144640786568,   4.193617642097,
+  -0.054638633592,   2.073926125945,   3.188278378365,
   -7.700000000000,  -8.700000000000,  -9.700000000000,
   -7.900000000000,  -8.900000000000,  -9.900000000000,
   -7.100000000000,  -8.100000000000,  -9.100000000000,
 };
 
 const double pylith::faults::CohesiveDynDataTet4::_slipOpenE[] = {
-  -0.985029103789,  -2.201584432637,   0.000000000000,
-  -0.420127135861,  -1.670986517021,   0.000000000000,
-  -0.093157695768,  -1.337378280584,   0.000000000000,
+   0.026039872749,   0.637700690999,   2.550176957122,
+  -0.689281573136,   0.787235284195,   2.432223193980,
+  -0.147852251890,   0.376556756729,   2.109277267185,
 };
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3.cc	2011-10-04 00:25:12 UTC (rev 19003)
+++ short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3.cc	2011-10-04 00:54:54 UTC (rev 19004)
@@ -103,10 +103,8 @@
   8.8, 9.8, // 9
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
 const double pylith::faults::CohesiveDynDataTri3::_jacobian[] = {
-  1.0, 1.1, // 2x (values for row associated with vertex with label 2, x DOF)
+  1.0, 1.1, // 2x
   0.1, 1.2,
   0.2, 1.3,
   0.3, 1.4,
@@ -122,86 +120,86 @@
   2.6, 3.5,
   2.7, 3.6,
   2.8, 3.7,
-  4.1, 5.1, // 3x (values for row associated with vertex label 3, x DOF)
-  1.0, 5.2,
-  4.2, 5.3,
+  4.1, 5.1, // 3x
+ +4.0,-1.2, // 3
+ -2.2,-2.3, // 4
   4.3, 5.4,
   4.4, 5.5,
   4.5, 5.6,
-  4.6,+1.0, // 8 (column for DOF associated with vertex label 8)
+  4.6,+1.0, 
   4.7, 5.7,
   6.1, 7.1, // 3y
-  6.2, 1.0,
-  6.3, 7.2,
+ -1.2,+5.0, // 3
+ -1.3,-3.2, // 4
   6.4, 7.3,
   6.5, 7.4,
   6.6, 7.5,
- +1.0, 7.6, //  8
+  1.0, 7.6,
   6.7, 7.7,
   8.1, 9.1, // 4x
-  8.2, 9.2,
-  1.0, 9.3,
+ -2.2,-1.3, // 3
+ +4.1,-4.3, // 4
   8.3, 9.4,
   8.4, 9.5,
   8.5, 9.6,
   8.6, 9.7,
-  8.7,+1.0, //  9
-  10.1, 11.1, // 4y
-  10.2, 11.2,
-  10.3, 1.0,
-  10.4, 11.3,
-  10.5, 11.4,
-  10.6, 11.5,
-  10.7, 11.6,
- +1.0, 11.7, //  9
-  12.1, 13.1, // 5x
-  12.2, 13.2,
-  12.3, 13.3,
-  1.0, 13.4,
-  12.4, 13.5,
-  12.5, 13.6,
-  12.6, 13.7,
-  12.7, 13.8,
-  14.1, 15.1, // 5y
-  14.2, 15.2,
-  14.3, 15.3,
-  14.4, 1.0,
-  14.5, 15.4,
-  14.6, 15.5,
-  14.7, 15.6,
-  14.8, 15.7,
-  16.1, 17.1, // 6x
-  16.2, 17.2,
-  16.3, 17.3,
-  16.4, 17.4,
-  1.0, 17.5,
-  16.5, 17.6,
-  16.6,-1.0, //  8
-  16.7, 17.7,
-  18.1, 19.1, // 6y
-  18.2, 19.2,
-  18.3, 19.3,
-  18.4, 19.4,
-  18.5, 1.0,
-  18.6, 19.5,
- -1.0, 19.6, //  8
-  18.7, 19.7,
-  20.1, 21.1, // 7x
-  20.2, 21.2,
-  20.3, 21.3,
-  20.4, 21.4,
-  20.5, 21.5,
-  1.0, 21.6,
-  20.6, 21.7,
-  20.7,-1.0, //  9
-  22.1, 23.1, // 7y
-  22.2, 23.2,
-  22.3, 23.3,
-  22.4, 23.4,
-  22.5, 23.5,
-  22.6, 1.0,
-  22.7, 23.6,
- -1.0, 23.7, //  9
+  8.7,+1.0,
+  1.1, 1.1, // 4y
+ -2.3,-3.2, // 3
+ -4.3,+5.1, // 4
+  1.4, 1.3,
+  1.5, 1.4,
+  1.6, 1.5,
+  1.7, 1.6,
+  1.0, 1.7,
+  2.1, 3.1, // 5x
+  2.2, 3.2,
+  2.3, 3.3,
+  1.0, 3.4,
+  2.4, 3.5,
+  2.5, 3.6,
+  2.6, 3.7,
+  2.7, 3.8,
+  4.1, 5.1, // 5y
+  4.2, 5.2,
+  4.3, 5.3,
+  4.4, 1.0,
+  4.5, 5.4,
+  4.6, 5.5,
+  4.7, 5.6,
+  4.8, 5.7,
+  6.1, 7.1, // 6x
+  6.2, 7.2,
+  6.3, 7.3,
+  6.4, 7.4,
+ +5.0,-1.2, // 6
+ -2.2,-2.3, // 7
+  6.6, 1.0,
+  6.7, 7.7,
+  8.1, 9.1, // 6y
+  8.2, 9.2,
+  8.3, 9.3,
+  8.4, 9.4,
+ -1.2,+4.0, // 6
+ -1.3,-3.2, // 7
+  1.0, 9.6,
+  8.7, 9.7,
+  0.1, 1.1, // 7x
+  0.2, 1.2,
+  0.3, 1.3,
+  0.4, 1.4,
+ -2.2,-1.3, // 6
+ +5.1,-4.3, // 7
+  0.6, 1.7,
+  0.7, 1.0,
+  2.1, 3.1, // 7y
+  2.2, 3.2,
+  2.3, 3.3,
+  2.4, 3.4,
+ -2.3,-3.2, // 6
+ -4.3,+4.1, // 7
+  2.7, 3.6,
+  1.0, 3.7, //  9
 
   24.1, 25.1, // 8x (rows associated with Lagrange multiplier vertex label 8)
   24.2,+1.0, //  3
@@ -286,31 +284,31 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataTri3::_fieldIncrSlip[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 3
-  9.3, 10.3, // 4
-  9.4, 10.4,
-  9.5, 10.5, // 6
-  9.7, 10.7, // 7
-  9.6, -10.6, // 8
-  9.8, -10.8, // 9
+  9.1, 7.1,
+  9.2, 7.2, // 3
+  9.3, 7.3, // 4
+  9.4, 7.4,
+  9.5, 7.5, // 6
+  9.7, 7.7, // 7
+  1.6, 2.6, // 8
+  1.8, 2.8, // 9
 };
 
 // Output
 const double pylith::faults::CohesiveDynDataTri3::_fieldIncrSlipE[] = {
-  9.1,  10.100000000000,
-  9.2,   9.304186565683,
-  9.3,  10.066643380561,
-  9.4,  10.400000000000,
-  9.5,  11.395813434317,
-  9.7,  10.933356619439,
- -8.0, -10.600000000000,
- -8.2, -10.800000000000,
+   9.100000000000,   7.100000000000,
+   9.200000000000,   7.375196378327,
+   9.300000000000,   8.288777189348,
+   9.400000000000,   7.400000000000,
+   9.500000000000,   7.324803621673,
+   9.700000000000,   6.711222810652,
+   1.600000000000,  -3.480000000000,
+   1.800000000000,  -3.440000000000,
 };
 
 const double pylith::faults::CohesiveDynDataTri3::_slipSlipE[] = {
-  -1.791626868633122,                   0.0,
-  -0.466713238878134,                   0.0,
+   0.350392756653,   0.000000000000,
+   1.977554378695,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
@@ -318,31 +316,31 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataTri3::_fieldIncrOpen[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 3
-  9.3, 10.3, // 4
-  9.4, 10.4,
-  9.5, 10.5, // 6
-  9.7, 10.7, // 7
-  9.6, 10.6, // 8
-  9.8, 10.8, // 9
+  9.1, 7.1,
+  9.2, 7.2, // 3
+  9.3, 7.3, // 4
+  9.4, 7.4,
+  9.5, 7.5, // 6
+  9.7, 7.7, // 7
+  -10.6, 2.6, // 8
+  -10.8, 2.8, // 9
 };
 
 // Output
 const double pylith::faults::CohesiveDynDataTri3::_fieldIncrOpenE[] = {
- 9.100000000000,  10.100000000000,
- 9.200000000000,  10.851688943849,
-10.191208845155,  11.487449638489,
- 9.400000000000,  10.400000000000,
- 9.500000000000,   9.848311056151,
- 8.808791154845,   9.512550361511,
--8.600000000000,  -9.600000000000,
--8.800000000000,  -9.800000000000,
+   9.100000000000,   7.100000000000,
+  11.868906669946,   7.109969358633,
+  12.354802377535,   8.769332161050,
+   9.400000000000,   7.400000000000,
+   6.831093330054,   7.590030641367,
+   6.645197622465,   6.230667838950,
+  -8.600000000000,  -9.600000000000,
+  -8.800000000000,  -9.800000000000,
 };
 
 const double pylith::faults::CohesiveDynDataTri3::_slipOpenE[] = {
-  1.303377887698464,  0.0,
-  2.374899276978848,  1.782417690310881,
+  -0.180061282734,   5.337813339891,
+   2.938664322101,   6.109604755069,
 };
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc	2011-10-04 00:25:12 UTC (rev 19003)
+++ short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc	2011-10-04 00:54:54 UTC (rev 19004)
@@ -117,13 +117,11 @@
   6.7, 8.7, // 10
   6.9, 8.9, // 11
   7.1, 9.1, // 12
-  6.8, 8.8, // 13
-  6.0, 8.0, // 14
-  7.2, 9.2, // 15
+ -3.8, 4.8, // 13
+  3.0, 4.0, // 14
+  3.2, 4.2, // 15
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
 const double pylith::faults::CohesiveDynDataTri3d::_jacobian[] = {
   1.0, 1.1, // 4x
   1.1, 2.1,
@@ -150,78 +148,54 @@
   3.1, 4.0,
   3.2, 4.1,
   6.1, 7.2, // 5x
-  6.0, 7.3,
-  6.9, 7.4,
+ +6.0,-1.0, // 5
+ -1.1,-1.2, // 6
   6.8, 7.5,
-  6.7, 7.6,
+ -1.3,-1.4, // 8
   6.6, 7.7,
   6.5, 7.8,
   6.4, 7.9,
   6.3, 7.0,
- -0.70710678118654757, +0.70710678118654757, // 13
+  6.5, 6.6,
   6.2, 7.1,
   6.1, 7.2,
   3.0, 5.1, // 5y
-  3.1, 5.2,
-  3.2, 5.2,
+ -1.0,+6.1, // 5
+ -0.9,-0.8, // 6
   3.3, 5.1,
-  3.4, 5.3,
+ -0.7,-0.6, // 8
   3.5, 5.0,
   3.6, 5.4,
   3.7, 5.9,
   3.8, 5.5,
- +0.70710678118654757, +0.70710678118654757, // 13
+  3.9, 5.5,
   4.2, 5.6,
   4.1, 5.8,
   3.0, 2.7, // 6x
-  3.9, 2.7,
-  3.8, 2.8,
+ -1.1,-0.9, // 5
+ +6.2,-2.1, // 6
   3.7, 2.6,
-  3.6, 2.9,
+ -2.2,-2.3, // 8
   3.5, 2.5,
   3.4, 2.1,
   3.3, 2.4,
   3.2, 2.2,
   3.1, 2.3,
-  0.0,+1.0, // 14
+  2.0, 2.0,
   3.0, 2.4,
   4.1, 6.1, // 6y
-  4.1, 6.6,
-  4.2, 6.2,
-  4.2, 6.5,
+ -1.2,-0.8, // 5
+ -2.1,+6.3, // 6
   4.3, 6.3,
+ -1.4,-1.5, // 8
   4.3, 6.4,
   4.4, 6.4,
   4.4, 6.3,
   4.5, 6.5,
   4.5, 6.2,
- +1.0, 0.0, // 14
+  4.6, 7.0,
   4.6, 6.1,
-  4.6, 6.6, // 7x
-  5.7, 9.7,
-  5.7, 9.9,
-  5.8, 9.8,
-  5.8, 9.8,
-  5.9, 9.9,
-  5.1, 9.7,
-  5.2, 9.1,
-  5.3, 9.6,
-  5.1, 9.2,
-  5.4, 9.5,
-  5.2, 9.3,
-  5.5, 9.4, // 7y
-  6.3, 9.4,
-  6.6, 9.3,
-  6.4, 9.5,
-  6.7, 9.2,
-  6.5, 9.6,
-  6.8, 9.1,
-  6.6, 9.7,
-  7.9, 8.9,
-  7.7, 8.8,
-  7.1, 8.8,
-  7.8, 8.9,
-  7.2, 8.7, // 8x
+  7.2, 8.7, // 7x
   7.9, 8.1,
   7.3, 8.6,
   7.1, 8.2,
@@ -232,8 +206,8 @@
   7.6, 8.3,
   7.4, 8.5,
   7.7, 8.6,
- -1.0, 0.0, // 15
-  6.5, 3.3, // 8y
+  7.8, 8.7,
+  6.5, 3.3, // 7y
   6.4, 3.4,
   6.3, 3.8,
   6.2, 3.9,
@@ -244,7 +218,31 @@
   5.6, 3.4,
   5.5, 3.3,
   5.4, 3.2,
-  0.0,+1.0, // 15
+  5.5, 3.3,
+  4.6, 6.6, // 8x
+ -1.3,-0.7, // 5
+ -2.2,-1.4, // 6
+  5.8, 9.8,
+ +6.4,-1.1, // 8
+  5.9, 9.9,
+  5.1, 9.7,
+  5.2, 9.1,
+  5.3, 9.6,
+  5.1, 9.2,
+  5.4, 9.5,
+  5.2, 9.3,
+  5.5, 9.4, // 8y
+ -1.4,-0.6, // 5
+ -2.3,-1.5, // 6
+  6.4, 9.5,
+ -1.1,+6.5, // 8
+  6.5, 9.6,
+  6.8, 9.1,
+  6.6, 9.7,
+  7.9, 8.9,
+  7.7, 8.8,
+  7.1, 8.8,
+  7.8, 8.9,
   4.4, 2.0, // 9x
   4.3, 2.1,
   4.2, 2.2,
@@ -269,97 +267,97 @@
   2.7, 3.8,
   2.8, 3.7,
   2.9, 3.6,
-  1.0, 3.5, // 10x
-  1.1, 4.4,
-  1.2, 4.3,
-  1.3, 4.2,
-  1.4, 4.1,
-  1.5, 4.0,
-  1.6, 4.1,
-  1.7, 4.2,
-  1.8, 4.3,
- +0.70710678118654757, -0.70710678118654757, // 13
-  1.9, 5.4,
-  9.0, 5.5,
-  8.0, 4.7, // 10y
-  7.1, 4.5,
-  6.2, 4.4,
-  6.3, 4.6,
-  6.4, 4.7,
-  6.5, 4.4,
-  4.6, 4.8,
-  4.7, 4.4,
-  4.8, 4.2,
- -0.70710678118654757, -0.70710678118654757, // 13
-  6.1, 4.8,
-  6.2, 4.7,
-  6.3, 5.6, // 11x
-  6.4, 5.5,
-  6.5, 5.4,
-  6.6, 5.3,
-  6.7, 5.1,
-  6.8, 5.2,
-  6.9, 5.3,
-  7.0, 5.9,
-  7.7, 5.8,
-  7.6, 5.7,
-  0.0,-1.0, // 14
-  7.5, 5.5,
-  7.4, 6.4, // 11y
-  7.3, 6.2,
-  7.2, 6.0,
-  7.2, 6.9,
-  7.1, 6.8,
-  7.0, 6.7,
-  7.2, 6.6,
-  7.3, 6.5,
-  7.4, 6.3,
-  7.5, 6.2,
- -1.0, 0.0, // 14
-  8.6, 6.2,
-  8.7, 6.3, // 12x
-  8.8, 6.3,
-  8.9, 7.4,
-  8.0, 7.5,
-  8.6, 7.6,
-  8.5, 7.7,
-  8.4, 7.8,
-  8.0, 7.9,
-  8.3, 7.1,
-  8.0, 7.2,
-  8.2, 7.3,
- +1.0, 0.0, // 15
-  7.2, 8.6, // 12y
-  6.6, 8.5,
-  6.7, 8.4,
-  6.9, 8.2,
-  6.5, 8.3,
-  6.4, 8.5,
-  6.3, 8.6,
-  6.5, 8.8,
-  4.7, 8.7,
-  4.9, 8.5,
-  7.5, 8.3,
-  6.0,-1.0, // 15
+  6.1, 7.2, // 10x
+  6.8, 7.5,
+  6.6, 7.7,
+  6.5, 7.8,
+  6.4, 7.9,
+  6.3, 7.0,
+ +5.0,-1.0, // 10
+ -1.1,-1.2, // 11
+ -1.3,-1.4, // 12
+  6.5, 6.6,
+  6.2, 7.1,
+  6.1, 7.2,
+  3.0, 5.1, // 10y
+  3.3, 5.1,
+  3.5, 5.0,
+  3.6, 5.4,
+  3.7, 5.9,
+  3.8, 5.5,
+ -1.0,+5.1, // 10
+ -0.9,-0.8, // 11
+ -0.7,-0.6, // 12
+  3.9, 5.5,
+  4.2, 5.6,
+  4.1, 5.8,
+  3.0, 2.7, // 11x
+  3.7, 2.6,
+  3.5, 2.5,
+  3.4, 2.1,
+  3.3, 2.4,
+  3.2, 2.2,
+ -1.1,-0.9, // 10
+ +5.2,-2.1, // 11
+ -2.2,-2.3, // 12
+  3.1, 2.3,
+  2.0, 2.0,
+  3.0, 2.4,
+  4.1, 6.1, // 11y
+  4.3, 6.3,
+  4.3, 6.4,
+  4.4, 6.4,
+  4.4, 6.3,
+  4.5, 6.5,
+ -1.2,-0.8, // 10
+ -2.1,+5.3, // 11
+ -1.4,-1.5, // 12
+  4.5, 6.2,
+  4.6, 7.0,
+  4.6, 6.1,
+  4.6, 6.6, // 12x
+  5.8, 9.8,
+  5.9, 9.9,
+  5.1, 9.7,
+  5.2, 9.1,
+  5.3, 9.6,
+ -1.3,-0.7, // 10
+ -2.2,-1.4, // 11
+ +5.4,-1.1, // 12
+  5.1, 9.2,
+  5.4, 9.5,
+  5.2, 9.3,
+  5.5, 9.4, // 12y
+  6.4, 9.5,
+  6.5, 9.6,
+  6.8, 9.1,
+  6.6, 9.7,
+  7.9, 8.9,
+ -1.4,-0.6, // 10
+ -2.3,-1.5, // 11
+ -1.1,+5.5, // 12
+  7.7, 8.8,
+  7.1, 8.8,
+  7.8, 8.9,
   3.2, 8.3, // 13x
- -0.70710678118654757, +0.70710678118654757, // 5
+  3.3, 8.4,
   5.4, 9.3,
   5.6, 9.7,
   3.7, 9.0,
   5.9, 9.9,
- +0.70710678118654757, -0.70710678118654757, // 10
+  6.0, 9.8,
   4.4, 4.8,
   4.6, 4.7,
   4.8, 4.6,
   4.9, 4.4,
   4.0, 4.2,
   4.2, 4.3, // 13y
- +0.70710678118654757, +0.70710678118654757, // 5
+  4.3, 4.4,
   7.5, 3.4,
   6.7, 3.5,
   6.4, 3.6,
   4.6, 3.9,
- -0.70710678118654757, -0.70710678118654757, // 10
+  4.7, 4.0,
   8.9, 2.8,
   7.6, 2.7,
   6.4, 2.6,
@@ -367,24 +365,24 @@
   3.8, 2.3,
   4.5, 2.2, // 14x
   8.5, 2.4,
-  0.0,+1.0, // 6
+  0.0, 1.0,
   7.4, 3.6,
   6.6, 3.5,
   4.7, 3.4,
   3.8, 3.5,
-  0.0,-1.0, // 11
+  0.0, 1.0,
   5.9, 3.7,
   8.7, 4.6,
   7.6, 4.5,
   6.5, 4.4,
   5.5, 4.3, // 14y
   4.3, 4.8,
- +1.0, 0.0, // 6
+  1.0, 0.0,
   4.3, 4.7,
   6.5, 4.6,
   9.6, 4.5,
   8.7, 4.3,
- -1.0, 0.0, // 11
+  1.0, 0.0,
   7.9, 4.5,
   6.7, 5.3,
   5.6, 5.8,
@@ -393,11 +391,11 @@
   3.3, 5.5,
   4.2, 5.3,
   5.4, 5.6,
- -1.0, 6.0, // 8
+  1.0, 6.0,
   0.8, 6.6,
   9.8, 6.5,
   8.5, 6.5,
- +1.0, 0.0, // 12
+  1.0, 0.0,
   7.5, 7.3,
   6.4, 7.6,
   5.2, 7.8,
@@ -405,11 +403,11 @@
   3.7, 8.6,
   3.8, 8.5,
   2.9, 8.3,
-  0.0,+1.0, // 8
+  0.0, 1.0,
   2.0, 9.9,
   2.7, 9.8,
   1.6, 9.7,
-  0.0,-1.0, // 12
+  0.0, 1.0,
   1.5, 5.5,
   1.2, 5.4,
   1.1, 5.3,
@@ -472,41 +470,40 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlip[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 5
-  9.3, 10.3, // 6
-  9.4, 10.4,
-  9.5, 10.5, // 8
-  9.6, 10.6,
-  9.7, 10.7, // 10
-  9.9, 10.9, // 11
-  9.1, 10.1, // 12
-  9.8, -10.8, // 13
-  9.0, -10.0, // 14
-  9.2, -10.2, // 15
+  1.1, 2.1,
+  1.2, 2.2, // 5
+  1.3, 2.3, // 6
+  1.4, 2.4,
+  1.5, 2.5, // 8
+  1.6, 2.6,
+  1.7, 2.7, // 10
+  1.9, 2.9, // 11
+  1.1, 2.1, // 12
+  1.8, 0.8, // 13
+  1.0, 0.1, // 14
+  1.2, 0.2, // 15
 };
 
 // Output
-// TODO Update
 const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlipE[] = {
-  9.100000000000,  10.100000000000,
-  4.178047263424,  15.221952736576,
-  9.300000000000,  10.050098043990,
-  9.400000000000,  10.400000000000,
-  9.655679817715,  10.500000000000,
-  9.600000000000,  10.600000000000,
- 14.721952736576,   5.678047263424,
-  9.900000000000,  11.149901956010,
-  8.944320182285,  10.100000000000,
- -5.600000000000, -10.800000000000,
- -4.800000000000, -10.000000000000,
- -6.600000000000, -10.200000000000,
+   1.100000000000,   2.100000000000,
+   1.563917511528,   1.836082488472,
+   1.300000000000,   1.726466384513,
+   1.400000000000,   2.400000000000,
+   1.389619276805,   2.500000000000,
+   1.600000000000,   2.600000000000,
+   1.336082488472,   3.063917511528,
+   1.900000000000,   3.473533615487,
+   1.210380723195,   2.100000000000,
+   4.520000000000,  -1.920000000000,
+   1.000000000000,  -1.600000000000,
+  -0.560000000000,   0.200000000000,
 };
 
 const double pylith::faults::CohesiveDynDataTri3d::_slipSlipE[] = {
-  14.204227339325,   0.0,
-  -0.499803912020,   0.0,
-  -0.311359635429,   0.0,
+  -1.029314160777,   0.000000000000,
+  -1.147067230974,   0.000000000000,
+   0.220761446391,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
@@ -514,41 +511,40 @@
 // ----------------------------------------------------------------------
 // Input
 const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpen[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 5
-  9.3, 10.3, // 6
-  9.4, 10.4,
-  9.5, 10.5, // 8
-  9.6, 10.6,
-  9.7, 10.7, // 10
-  9.9, 10.9, // 11
-  9.1, 10.1, // 12
-  9.8, 10.8, // 13
-  9.0, 10.0, // 14
-  9.2, 10.2, // 15
+  1.1, 2.1,
+  1.2, 2.2, // 5
+  1.3, 2.3, // 6
+  1.4, 2.4,
+  1.5, 2.5, // 8
+  1.6, 2.6,
+  1.7, 2.7, // 10
+  1.9, 2.9, // 11
+  1.1, 2.1, // 12
+-10.8, 0.8, // 13
+-10.0, 0.1, // 14
+  1.2,-10.2, // 15
 };
 
 // Output
 const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpenE[] = {
-   9.100000000000,  10.100000000000,
-  17.946141606808,   1.453858393192,
-   9.300000000000,  16.358051491522,
-   9.400000000000,  10.400000000000,
-   1.376240123890,  19.299429217321,
-   9.600000000000,  10.600000000000,
-   0.953858393192,  19.446141606808,
-   9.900000000000,   4.841948508478,
-  17.223759876110,   1.300570782679,
-  -6.800000000000,  -8.800000000000,
-  -6.000000000000,  -8.000000000000,
-  -7.200000000000,  -9.200000000000,
+   1.100000000000,   2.100000000000,
+   7.276939399405,   4.204545518954,
+   5.678082695935,   4.684667319277,
+   1.400000000000,   2.400000000000,
+   4.440285622520,   4.762452035962,
+   1.600000000000,   2.600000000000,
+  -4.376939399405,   0.695454481046,
+  -2.478082695935,   0.515332680723,
+  -1.840285622520,  -0.162452035962,
+   3.800000000000,  -4.800000000000,
+  -3.000000000000,  -4.000000000000,
+  -3.200000000000,  -4.200000000000,
 };
 
 const double pylith::faults::CohesiveDynDataTri3d::_slipOpenE[] = {
--24.737824157567,  0.0,
- 12.116102983044,  0.0,
- 16.247519752219,  17.598858434641,
-
+  -5.759234657059,  11.428945575657,
+   4.769334638554,   8.756165391870,
+  -5.880571245040,   4.524904071924,
 };
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/cohesivedyn.py
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/cohesivedyn.py	2011-10-04 00:25:12 UTC (rev 19003)
+++ short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/data/cohesivedyn.py	2011-10-04 00:54:54 UTC (rev 19004)
@@ -1,6 +1,6 @@
-cell = "tri3"
+cell = "tri3d"
 dim = "2d"
-testCase = "slip"
+testCase = "open"
 
 import numpy
 
@@ -22,6 +22,28 @@
 
 
 # ----------------------------------------------------------------------
+def globalToFault(v, R):
+    """
+    Convert vector from global coordinate system to fault coordinate system.
+    """
+    (m,ndof) = v.shape
+
+    vF = numpy.dot(C, v.reshape(m*ndof,1))
+    return vF.reshape((m, ndof))
+
+
+# ----------------------------------------------------------------------
+def faultToGlobal(v, R):
+    """
+    Convert vector from fault coordinate system to global coordinate system.
+    """
+    (m,ndof) = v.shape
+
+    vG = numpy.dot(C.transpose(), v.reshape(m*ndof,1))
+    return vG.reshape((m, ndof))
+
+
+# ----------------------------------------------------------------------
 if dim == "2d":
     if cell == "tri3":
         dlagrange1 = numpy.zeros(2)
@@ -34,25 +56,28 @@
 
         fieldT = numpy.array([[8.6, 9.6],
                               [8.8, 9.8]])
-        fieldIncr = numpy.array([[9.6, -10.6],
-                                 [9.8, -10.8]])
-        area = numpy.array([1.0, 1.0])
+        fieldIncr = numpy.array([[1.6, 2.6],
+                                 [1.8, 2.8]])
+        L = numpy.array([[0.5, 0.0, 0.5, 0.0,],
+                         [0.0, 0.5, 0.0, 0.5,],
+                         [0.5, 0.0, 0.5, 0.0,],
+                         [0.0, 0.5, 0.0, 0.5,],]);
         C = numpy.array([[0.0, -1.0, 0.0, 0.0,],
                          [-1.0, 0.0, 0.0, 0.0,],
                          [0.0, 0.0, 0.0, -1.0,],
                          [0.0, 0.0, -1.0, 0.0,],]);
     
         jacobianN = numpy.array(
-            [[  1.0,  5.2,  4.2,  5.3,],
-             [  6.2,  1.0,  6.3,  7.2,],
-             [  8.2,  9.2,  1.0,  9.3,],
-             [ 10.2, 11.2, 10.3,  1.0,],])
+            [[  4.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  5.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  4.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  5.1,],])
 
         jacobianP = numpy.array(
-            [[  1.0, 17.5, 16.5, 17.6,],
-             [ 18.5,  1.0, 18.6, 19.5,],
-             [ 20.5, 21.5,  1.0, 21.6,],
-             [ 22.5, 23.5, 22.6,  1.0,],])
+            [[  5.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  4.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  5.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  4.1,],])
 
         disp = numpy.array([[ 8.1, 9.1,],
                             [ 8.2, 9.2,],
@@ -64,23 +89,23 @@
                             [ 8.8, 9.8,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.6, -10.6,],
-                                    [ 9.8, -10.8,],])            
+            dispIncr = numpy.array([[ 9.1, 7.1,],
+                                    [ 9.2, 7.2,],
+                                    [ 9.3, 7.3,],
+                                    [ 9.4, 7.4,],
+                                    [ 9.5, 7.5,],
+                                    [ 9.7, 7.7,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.8, 2.8,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.8, 10.8,],])
+            dispIncr = numpy.array([[ 9.1, 7.1,],
+                                    [ 9.2, 7.2,],
+                                    [ 9.3, 7.3,],
+                                    [ 9.4, 7.4,],
+                                    [ 9.5, 7.5,],
+                                    [ 9.7, 7.7,],
+                                    [ -10.6, 2.6,],
+                                    [ -10.8, 2.8,],])            
 
 
     elif cell == "tri3d":
@@ -92,13 +117,20 @@
         m = 6
         DOF = 2
 
-        fieldT = numpy.array([[6.8, 8.8],
-                              [6.0, 8.0],
-                              [7.2, 9.2]])
-        fieldIncr = numpy.array([[9.8, -10.8],
-                                 [9.0, -10.0],
-                                 [9.2, -10.2]])
-        area = numpy.array([2.0, 1.0, 1.0])
+        fieldT = numpy.array([[-3.8, 4.8],
+                              [3.0, 4.0],
+                              [3.2, 4.2]])
+        fieldIncr = numpy.array([[1.8, 0.8],
+                                 [1.0, 0.1],
+                                 [1.2, 0.2]])
+
+        L = numpy.array([[1.0, 0.0, 0.5, 0.0, 0.5, 0.0],
+                         [0.0, 1.0, 0.0, 0.5, 0.0, 0.5],
+                         [0.5, 0.0, 0.5, 0.0, 0.0, 0.0],
+                         [0.0, 0.5, 0.0, 0.5, 0.0, 0.0],
+                         [0.5, 0.0, 0.0, 0.0, 0.5, 0.0],
+                         [0.0, 0.5, 0.0, 0.0, 0.0, 0.5]])
+
         C = numpy.array([[+0.70710678118654757, -0.70710678118654757, 0.0, 0.0, 0.0, 0.0,],
                          [-0.70710678118654757, -0.70710678118654757, 0.0, 0.0, 0.0, 0.0,],
                          [0.0, 0.0, 0.0, -1.0, 0.0, 0.0,],
@@ -107,20 +139,20 @@
                          [0.0, 0.0, 0.0, 0.0, 0.0, -1.0,],])
     
         jacobianN = numpy.array(
-            [[6.0, 7.3, 6.9, 7.4, 6.7, 7.6],
-             [3.1, 5.2, 3.2, 5.2, 3.4, 5.3],
-             [3.9, 2.7, 3.8, 2.8, 0.0, 0.0],
-             [4.1, 6.6, 4.2, 6.2, 0.0, 0.0],
-             [7.9, 8.1, 0.0, 0.0, 7.4, 8.5],
-             [6.4, 3.4, 0.0, 0.0, 6.1, 3.8]])
+            [[+6.0, -1.0, -1.1, -1.2, -1.3, -1.4],
+             [-1.0, +6.1, -0.9, -0.8, -0.7, -0.6],
+             [-1.1, -0.9, +6.2, -2.1,  0.0,  0.0],
+             [-1.2, -0.8, -2.1, +6.3,  0.0,  0.0],
+             [-1.3, -0.7,  0.0,  0.0, +6.4, -1.1],
+             [-1.4, -0.6,  0.0,  0.0, -1.1, +6.5]])
 
         jacobianP = numpy.array(
-            [[1.6, 4.1, 1.7, 4.2, 1.8, 4.3],
-             [4.6, 4.8, 4.7, 4.4, 4.8, 4.2],
-             [6.9, 5.3, 7.0, 5.9, 0.0, 0.0],
-             [7.2, 6.6, 7.3, 6.5, 0.0, 0.0],
-             [8.4, 7.8, 0.0, 0.0, 8.3, 7.1],
-             [6.3, 8.6, 0.0, 0.0, 4.7, 8.7]])
+            [[+5.0, -1.0, -1.1, -1.2, -1.3, -1.4],
+             [-1.0, +5.1, -0.9, -0.8, -0.7, -0.6],
+             [-1.1, -0.9, +5.2, -2.1,  0.0,  0.0],
+             [-1.2, -0.8, -2.1, +5.3,  0.0,  0.0],
+             [-1.3, -0.7,  0.0,  0.0, +5.4, -1.1],
+             [-1.4, -0.6,  0.0,  0.0, -1.1, +5.5]])
 
         disp = numpy.array([[ 6.1, 8.1,],
                             [ 6.2, 8.2,],
@@ -131,36 +163,36 @@
                             [ 6.7, 8.7,],
                             [ 6.9, 8.9,],
                             [ 7.1, 9.1,],
-                            [ 6.8, 8.8,],
-                            [ 6.0, 8.0,],
-                            [ 7.2, 9.2,],])
+                            [-3.8, 4.8,],
+                            [ 3.0, 4.0,],
+                            [ 3.2, 4.2,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ 9.1, 10.1,],
-                                    [ 9.8, -10.8,],
-                                    [ 9.0, -10.0,],
-                                    [ 9.2, -10.2,],])            
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.7, 2.7,],
+                                    [ 1.9, 2.9,],
+                                    [ 1.1, 2.1,],
+                                    [ 1.8, 0.8,],
+                                    [ 1.0, 0.1,],
+                                    [ 1.2, 0.2,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ 9.1, 10.1,],
-                                    [ 9.8, 10.8,],
-                                    [ 9.0, 10.0,],
-                                    [ 9.2, 10.2,],])            
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.7, 2.7,],
+                                    [ 1.9, 2.9,],
+                                    [ 1.1, 2.1,],
+                                    [-10.8, 0.8,],
+                                    [-10.0, 0.1,],
+                                    [ 1.2, -10.2,],])            
 
 
     elif cell == "quad4":
@@ -174,25 +206,28 @@
 
         fieldT = numpy.array([[8.8, 9.8],
                               [8.0, 9.0]])
-        fieldIncr = numpy.array([[-9.8, -10.8],
-                                 [-9.0, -10.0]])
-        area = numpy.array([1.0, 1.0])
+        fieldIncr = numpy.array([[1.8, 2.8],
+                                 [1.0, 2.0]])
+        L = numpy.array([[0.5, 0.0, 0.5, 0.0,],
+                         [0.0, 0.5, 0.0, 0.5,],
+                         [0.5, 0.0, 0.5, 0.0,],
+                         [0.0, 0.5, 0.0, 0.5,],]);
         C = numpy.array([[0.0, -1.0, 0.0, 0.0,],
                          [-1.0, 0.0, 0.0, 0.0,],
                          [0.0, 0.0, 0.0, -1.0,],
                          [0.0, 0.0, -1.0, 0.0,],]);
     
         jacobianN = numpy.array(
-            [[  1.0,  8.1,  8.2,  8.3,],
-             [  9.9,  1.0, 10.0, 10.1,],
-             [ 11.7, 11.8,  1.0, 11.9,],
-             [ 13.5, 13.6, 13.7,  1.0,],])
+            [[  4.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  5.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  4.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  5.1,],])
 
         jacobianP = numpy.array(
-            [[  1.0, 23.7, 23.8, 23.9,],
-             [ 25.5,  1.0, 25.6, 25.7,],
-             [ 27.3, 27.4,  1.0, 27.5,],
-             [ 29.1, 29.2, 29.3,  1.0,],])
+            [[  5.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  4.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  5.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  4.1,],])
 
         disp = numpy.array([[ 8.1, 9.1,],
                             [ 8.2, 9.2,],
@@ -200,41 +235,43 @@
                             [ 8.4, 9.4,],
                             [ 8.5, 9.5,],
                             [ 8.6, 9.6,],
+                            [ 8.9, 9.9,],
                             [ 8.7, 9.7,],
-                            [ 8.9, 9.9,],
                             [ 8.8, 9.8,],
                             [ 8.0, 9.0,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ -9.8, -10.8,],
-                                    [ -9.0, -10.0,],])
-          
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.7, 2.7,],
+                                    [ 1.9, 2.9,],
+                                    [ 1.8, 2.8,],
+                                    [ 1.0, 2.0,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ 9.8, 10.8,],
-                                    [ 9.0, 10.0,],])
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.7, 2.7,],
+                                    [ 1.9, 2.9,],
+                                    [ -10.8, 2.8,],
+                                    [ -10.0, 2.0,],])            
 
+
     # ------------------------------------------------------------------
     fieldTpdt = fieldT + fieldIncr
 
-    tractionShear = abs(fieldTpdt[:,0]) / area
-    tractionNormal = fieldTpdt[:,1] / area
+    fieldTpdt = globalToFault(fieldTpdt, C)
 
+    tractionShear = abs(fieldTpdt[:,0])
+    tractionNormal = fieldTpdt[:,1]
+
     print "tractionShear",tractionShear
     print "tractionNormal",tractionNormal
 
@@ -242,38 +279,35 @@
 
     print "friction",friction
 
-    lagrangeTpdt0 = friction * fieldTpdt[:,0] / tractionShear
-
-    lagrangeIncr0 = lagrangeTpdt0 - fieldT[:,0]
-
-    print "lagrangeIncr0",lagrangeIncr0
-
-    dlagrange0 = (tractionShear - friction) * fieldTpdt[:,0] / tractionShear
-    
+    dlagrange0 = (friction - tractionShear) * fieldTpdt[:,0] / tractionShear
+                           
     print "dlagrange0",dlagrange0
 
     if testCase == "slip": 
         dLagrange = numpy.vstack((dlagrange0, dlagrange1))
         dLagrange = numpy.transpose(dLagrange)
-        dLagrange = numpy.reshape(dLagrange, m)
+        dLagrange = faultToGlobal(dLagrange, C).reshape(m)
     elif testCase == "open":
         dLagrange = numpy.reshape(disp+dispIncr, n)
-        dLagrange = dLagrange[indexL]
+        dLagrange = -dLagrange[indexL]
 
     print "dLagrange \n", dLagrange
 
-    RHS = numpy.dot(numpy.transpose(C),dLagrange)
-    duN = -numpy.dot(inv(jacobianN),RHS)
-    duP = numpy.dot(inv(jacobianP),RHS)
+    RHS = numpy.dot(numpy.transpose(L),dLagrange)
+    print "RHS",RHS
+    duN = numpy.dot(inv(jacobianN),RHS)
+    duP = -numpy.dot(inv(jacobianP),RHS)
     
     dispRel = duP - duN
 
-    slipVertex = numpy.dot(C,dispRel)
+    slipVertex = dispRel
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
     if testCase == "slip":
         slipVertex[:,1] = 0
     mask = slipVertex[:,1] < 0.0
     slipVertex[mask,1] = 0
+    slipVertex = faultToGlobal(slipVertex, C)
     slipVertex = numpy.reshape(slipVertex, m)
 
     print "duN \n", duN
@@ -282,14 +316,13 @@
     dispIncrE = dispIncr
     dispIncrE = numpy.reshape(dispIncrE, n)
 
-    dispIncrE[indexL] = dispIncrE[indexL] - dLagrange
-    dispIncrE[indexN] = dispIncrE[indexN] - \
-        0.5*numpy.dot(C.transpose(), slipVertex)
-    dispIncrE[indexP] = dispIncrE[indexP] + \
-        0.5*numpy.dot(C.transpose(), slipVertex)
+    dispIncrE[indexL] = dispIncrE[indexL] + dLagrange
+    dispIncrE[indexN] = dispIncrE[indexN] - 0.5*slipVertex
+    dispIncrE[indexP] = dispIncrE[indexP] + 0.5*slipVertex
+    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
 
-    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
 
     print "dispIncrE\n", printdata(dispIncrE)
     print "slipVertexE\n", printdata(slipVertex)
@@ -310,32 +343,50 @@
         fieldT = numpy.array([[7.7, 8.7, 9.7],
                               [7.9, 8.9, 9.9],
                               [7.1, 8.1, 9.1]])
-        fieldIncr = numpy.array([[8.7, 9.7, -10.7],
-                                 [8.9, 9.9, -10.9],
-                                 [8.1, 9.1, -10.1]])
+        fieldIncr = numpy.array([[9.7, 2.7, 3.7],
+                                 [9.9, 2.9, 3.9],
+                                 [9.1, 2.1, 3.1]])
         area = numpy.array([1.0/3.0, 1.0/3.0, 1.0/3.0])
         
+        L = numpy.array([[1.0/9.0,0,0, 1.0/9.0,0,0, 1.0/9.0,0,0,],
+                         [0,1.0/9.0,0, 0,1.0/9.0,0, 0,1.0/9.0,0,],
+                         [0,0,1.0/9.0, 0,0,1.0/9.0, 0,0,1.0/9.0,],
+                         [1.0/9.0,0,0, 1.0/9.0,0,0, 1.0/9.0,0,0,],
+                         [0,1.0/9.0,0, 0,1.0/9.0,0, 0,1.0/9.0,0,],
+                         [0,0,1.0/9.0, 0,0,1.0/9.0, 0,0,1.0/9.0,],
+                         [1.0/9.0,0,0, 1.0/9.0,0,0, 1.0/9.0,0,0,],
+                         [0,1.0/9.0,0, 0,1.0/9.0,0, 0,1.0/9.0,0,],
+                         [0,0,1.0/9.0, 0,0,1.0/9.0, 0,0,1.0/9.0,]])
+
+        Cv = numpy.array([[ 0, -1, 0,],
+                          [ 0, 0, +1,],
+                          [ -1, 0, 0,],])
+        Zv = numpy.zeros([3,3])
+        C = numpy.vstack( (numpy.hstack((Cv, Zv, Zv)),
+                           numpy.hstack((Zv, Cv, Zv)),
+                           numpy.hstack((Zv, Zv, Cv)) ) )
+
         jacobianN = numpy.array(
-            [[1.0, 10.0, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7],
-             [13.1, 1.0, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8], 
-             [16.2, 16.3, 1.0, 16.4, 16.5, 16.6, 16.7, 16.8, 16.9],
-             [19.3, 19.4, 19.5, 1.0, 19.6, 19.7, 19.8, 19.9, 20.0],
-             [22.4, 22.5, 22.6, 22.7, 1.0, 22.8, 22.9, 23.0, 23.1],
-             [25.5, 25.6, 25.7, 25.8, 25.9, 1.0, 26.0, 26.1, 26.2],
-             [28.6, 28.7, 28.8, 28.9, 29.0, 29.1, 1.0, 29.2, 29.3],
-             [31.7, 31.8, 31.9, 32.0, 32.1, 32.2, 32.3, 1.0, 32.4],
-             [34.8, 34.9, 35.0, 35.1, 35.2, 35.3, 35.4, 35.5, 1.0]])
+            [[ 4.0, -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8],
+             [-1.1,  4.1, -2.3, -2.4, -2.5, -2.6, -2.7, -2.8, -2.9], 
+             [-1.2, -2.3,  4.2, -1.0, -1.1, -1.2, -1.3, -1.4, -1.5],
+             [-1.3, -2.4, -1.0,  4.3, -0.2, -0.3, -0.4, -0.5, -0.6],
+             [-1.4, -2.5, -1.1, -0.2,  4.4, -0.9, -0.8, -0.7, -0.5],
+             [-1.5, -2.6, -1.2, -0.3, -0.9,  4.5, -1.1, -1.2, -1.3],
+             [-1.6, -2.7, -1.3, -0.4, -0.8, -1.1,  4.6, -1.8, -1.5],
+             [-1.7, -2.8, -1.4, -0.5, -0.7, -1.2, -1.8,  4.7, -1.1],
+             [-1.8, -2.9, -1.5, -0.6, -0.5, -1.3, -1.5, -1.1,  4.8]])
 
         jacobianP = numpy.array(
-            [[  1.0, 48.7, 48.8, 48.9, 49.0, 49.1, 49.2, 49.3, 49.4,],
-             [ 51.8,  1.0, 51.9, 52.0, 52.1, 52.2, 52.3, 52.4, 52.5,],
-             [ 54.9, 55.0,  1.0, 55.1, 55.2, 55.3, 55.4, 55.5, 55.6,],
-             [ 58.0, 58.1, 58.2,  1.0, 58.3, 58.4, 58.5, 58.6, 58.7,],
-             [ 61.1, 61.2, 61.3, 61.4,  1.0, 61.5, 61.6, 61.7, 61.8,],
-             [ 64.2, 64.3, 64.4, 64.5, 64.6,  1.0, 64.7, 64.8, 64.9,],
-             [ 67.3, 67.4, 67.5, 67.6, 67.7, 67.8,  1.0, 67.9, 68.0,],
-             [ 70.4, 70.5, 70.6, 70.7, 70.8, 70.9, 71.0,  1.0, 71.1,],
-             [ 73.5, 73.6, 73.7, 73.8, 73.9, 74.0, 74.1, 74.2,  1.0,],])
+            [[ 5.0, -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8],
+             [-1.1,  5.1, -2.3, -2.4, -2.5, -2.6, -2.7, -2.8, -2.9], 
+             [-1.2, -2.3,  5.2, -1.0, -1.1, -1.2, -1.3, -1.4, -1.5],
+             [-1.3, -2.4, -1.0,  5.3, -0.2, -0.3, -0.4, -0.5, -0.6],
+             [-1.4, -2.5, -1.1, -0.2,  5.4, -0.9, -0.8, -0.7, -0.5],
+             [-1.5, -2.6, -1.2, -0.3, -0.9,  5.5, -1.1, -1.2, -1.3],
+             [-1.6, -2.7, -1.3, -0.4, -0.8, -1.1,  5.6, -1.8, -1.5],
+             [-1.7, -2.8, -1.4, -0.5, -0.7, -1.2, -1.8,  5.7, -1.1],
+             [-1.8, -2.9, -1.5, -0.6, -0.5, -1.3, -1.5, -1.1,  5.8]])
 
         disp = numpy.array([[ 7.1, 8.1, 9.1,],
                             [ 7.2, 8.2, 9.2,],
@@ -350,29 +401,29 @@
                             [ 7.1, 8.1, 9.1,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 8.1, 9.1, 10.1,],
-                                    [ 8.2, 9.2, 10.2,],
-                                    [ 8.3, 9.3, 10.3,],
-                                    [ 8.4, 9.4, 10.4,],
-                                    [ 8.5, 9.5, 10.5,],
-                                    [ 8.6, 9.6, 10.6,],
-                                    [ 8.8, 9.8, 10.8,],
-                                    [ 8.0, 9.0, 10.0,],
-                                    [ 8.7, 9.7, -10.7,],
-                                    [ 8.9, 9.9, -10.9,],
-                                    [ 8.1, 9.1, -10.1,],])            
+            dispIncr = numpy.array([[ 1.1, 2.1, 3.1,],
+                                    [ 1.2, 2.2, 3.2,],
+                                    [ 1.3, 2.3, 3.3,],
+                                    [ 1.4, 2.4, 3.4,],
+                                    [ 1.5, 2.5, 3.5,],
+                                    [ 1.6, 2.6, 3.6,],
+                                    [ 1.8, 2.8, 3.8,],
+                                    [ 1.0, 2.0, 3.0,],
+                                    [ 9.7, 2.7, 3.7,],
+                                    [ 9.9, 2.9, 3.9,],
+                                    [ 9.1, 2.1, 3.1,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 8.1, 9.1, 10.1,],
-                                    [ 8.2, 9.2, 10.2,],
-                                    [ 8.3, 9.3, 10.3,],
-                                    [ 8.4, 9.4, 10.4,],
-                                    [ 8.5, 9.5, 10.5,],
-                                    [ 8.6, 9.6, 10.6,],
-                                    [ 8.8, 9.8, 10.8,],
-                                    [ 8.0, 9.0, 10.0,],
-                                    [ 8.7, 9.7, 10.7,],
-                                    [ 8.9, 9.9, 10.9,],
-                                    [ 8.1, 9.1, 10.1,],])
+            dispIncr = numpy.array([[ 1.1, 2.1, 3.1,],
+                                    [ 1.2, 2.2, 3.2,],
+                                    [ 1.3, 2.3, 3.3,],
+                                    [ 1.4, 2.4, 3.4,],
+                                    [ 1.5, 2.5, 3.5,],
+                                    [ 1.6, 2.6, 3.6,],
+                                    [ 1.8, 2.8, 3.8,],
+                                    [ 1.0, 2.0, 3.0,],
+                                    [-20.7,  2.7, 3.7,],
+                                    [-20.9,  2.9, 3.9,],
+                                    [-20.1,  2.1, 3.1,],])            
 
 
     elif cell == "hex8":
@@ -490,9 +541,11 @@
     # ------------------------------------------------------------------
     fieldTpdt = fieldT + fieldIncr
 
-    tractionShear = (fieldTpdt[:,0]**2 + fieldTpdt[:,1]**2)**0.5 / area
-    tractionNormal = fieldTpdt[:,2] / area
+    fieldTpdt = globalToFault(fieldTpdt, C)
 
+    tractionShear = (fieldTpdt[:,0]**2 + fieldTpdt[:,1]**2)**0.5
+    tractionNormal = fieldTpdt[:,2]
+
     print "tractionShear",tractionShear
     print "tractionNormal",tractionNormal
 
@@ -500,61 +553,37 @@
 
     print "friction",friction
 
-    lagrangeTpdt0 = friction * fieldTpdt[:,0] / tractionShear
-    lagrangeTpdt1 = friction * fieldTpdt[:,1] / tractionShear
-
-    lagrangeIncr0 = lagrangeTpdt0 - fieldT[:,0]
-    lagrangeIncr1 = lagrangeTpdt1 - fieldT[:,1]
-
-    print "lagrangeIncr0",lagrangeIncr0
-    print "lagrangeIncr1",lagrangeIncr1
-
-    dlagrange0 = (tractionShear - friction) * fieldTpdt[:,0] / tractionShear
-    dlagrange1 = (tractionShear - friction) * fieldTpdt[:,1] / tractionShear
-    
+    dlagrange0 = (friction - tractionShear) * fieldTpdt[:,0] / tractionShear
+    dlagrange1 = (friction - tractionShear) * fieldTpdt[:,1] / tractionShear
+                           
     print "dlagrange0",dlagrange0
     print "dlagrange1",dlagrange1
 
-    D = numpy.array([[ 0, -1, 0,],
-                     [ 0, 0, +1,],
-                     [ -1, 0, 0,],])
-
-    Z = numpy.zeros([3,3])
-
-    if cell == "tet4":
-        C1 = numpy.hstack((D, Z, Z))
-        C2 = numpy.hstack((Z, D, Z))
-        C3 = numpy.hstack((Z, Z, D))
-        C = numpy.vstack((C1, C2, C3))
-    elif cell == "hex8":
-        C1 = numpy.hstack((D, Z, Z, Z))
-        C2 = numpy.hstack((Z, D, Z, Z))
-        C3 = numpy.hstack((Z, Z, D, Z))
-        C4 = numpy.hstack((Z, Z, Z, D))        
-        C = numpy.vstack((C1, C2, C3, C4))
-
     if testCase == "slip": 
         dLagrange = numpy.vstack((dlagrange0, dlagrange1, dlagrange2))
         dLagrange = numpy.transpose(dLagrange)
-        dLagrange = numpy.reshape(dLagrange, m)
+        dLagrange = faultToGlobal(dLagrange, C).reshape(m)
     elif testCase == "open":
         dLagrange = numpy.reshape(disp+dispIncr, n)
-        dLagrange = dLagrange[indexL]
+        dLagrange = -dLagrange[indexL]
 
     print "dLagrange \n", dLagrange
 
-    RHS = numpy.dot(numpy.transpose(C),dLagrange)
-    duN = -numpy.dot(inv(jacobianN),RHS)
-    duP = numpy.dot(inv(jacobianP),RHS)
+    RHS = numpy.dot(numpy.transpose(L),dLagrange)
+    print "RHS",RHS
+    duN = numpy.dot(inv(jacobianN),RHS)
+    duP = -numpy.dot(inv(jacobianP),RHS)
     
     dispRel = duP - duN
 
-    slipVertex = numpy.dot(C,dispRel)
+    slipVertex = dispRel
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
     if testCase == "slip":
-        slipVertex[:,2] = 0    
+        slipVertex[:,2] = 0
     mask = slipVertex[:,2] < 0.0
     slipVertex[mask,2] = 0
+    slipVertex = faultToGlobal(slipVertex, C)
     slipVertex = numpy.reshape(slipVertex, m)
 
     print "duN \n", duN
@@ -563,15 +592,13 @@
     dispIncrE = dispIncr
     dispIncrE = numpy.reshape(dispIncrE, n)
 
-    dispIncrE[indexL] = dispIncrE[indexL] - dLagrange
-    dispIncrE[indexN] = dispIncrE[indexN] - \
-        0.5*numpy.dot(C.transpose(), slipVertex)
-    dispIncrE[indexP] = dispIncrE[indexP] + \
-        0.5*numpy.dot(C.transpose(), slipVertex)
+    dispIncrE[indexL] = dispIncrE[indexL] + dLagrange
+    dispIncrE[indexN] = dispIncrE[indexN] - 0.5*slipVertex
+    dispIncrE[indexP] = dispIncrE[indexP] + 0.5*slipVertex
+    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
 
-    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
 
     print "dispIncrE\n", printdata(dispIncrE)
     print "slipVertexE\n", printdata(slipVertex)
-



More information about the CIG-COMMITS mailing list