[cig-commits] r8284 - in short/3D/PyLith/trunk: . libsrc/faults pylith/problems tests/1d/line2 unittests/libtests/faults unittests/libtests/faults/data

brad at geodynamics.org brad at geodynamics.org
Mon Nov 12 16:56:31 PST 2007


Author: brad
Date: 2007-11-12 16:56:30 -0800 (Mon, 12 Nov 2007)
New Revision: 8284

Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
   short/3D/PyLith/trunk/pylith/problems/Explicit.py
   short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn.cfg
   short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn_sliprate.spatialdb
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.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/CohesiveKinDataTri3.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/slipth.py
Log:
Fixed bug in FaultCohesiveKin- we don't want internal forces in the residual unless we are solving for the displacement increment. Updated unit tests so that we test the residuals for each case. This didn't show up before because the internal forces were always zero in the elastic quasi-static solution.

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/TODO	2007-11-13 00:56:30 UTC (rev 8284)
@@ -6,10 +6,12 @@
 
   1. Fix memory imbalance associated with distribution.
 
-  2. Fix problems with buildbot on darwin.
+  2. Fix cohesive cell creation (hex8 and tet4).
 
-  3. Add check to make sure every material in mesh has a material model.
+  3. Fix problems with buildbot on darwin? (is binary ok?)
 
+  4. Add check to make sure every material in mesh has a material model.
+
     Add check for overlapping of material ids for bulk and cohesive
     cells.
 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -424,7 +424,7 @@
     // Get slip at cells vertices (only valid at constraint vertices)
     mesh->restrict(slip, *c_iter, &cellSlip[0], cellSlip.size());
 
-    // Get slip at cells vertices (valid at all cohesive vertices)
+    // Get solution at cells vertices (valid at all cohesive vertices)
     mesh->restrict(solution, *c_iter, &cellSoln[0], cellSoln.size());
     
     for (int iConstraint=0; iConstraint < numConstraintVert; ++iConstraint) {
@@ -446,23 +446,25 @@
 	cellResidual[indexK*spaceDim+iDim] = 
 	  cellSlip[iConstraint*spaceDim+iDim];
       
-      // Get orientation at constraint vertex
-      const real_section_type::value_type* constraintOrient = 
-	&cellOrientation[iConstraint*orientationSize];
-
-      // Entries associated with constraint forces applied at node i
-      for (int iDim=0; iDim < spaceDim; ++iDim)
-	for (int kDim=0; kDim < spaceDim; ++kDim)
-	  cellResidual[indexI*spaceDim+iDim] -=
-	    cellSoln[indexK*spaceDim+kDim] * 
-	    -constraintOrient[kDim*spaceDim+iDim] * pseudoStiffness;
-
-      // Entries associated with constraint forces applied at node j
-      for (int jDim=0; jDim < spaceDim; ++jDim)
-	for (int kDim=0; kDim < spaceDim; ++kDim)
-	  cellResidual[indexJ*spaceDim+jDim] -=
-	    cellSoln[indexK*spaceDim+kDim] * 
-	    constraintOrient[kDim*spaceDim+jDim] * pseudoStiffness;
+      if (_useSolnIncr) {
+	// Get orientation at constraint vertex
+	const real_section_type::value_type* constraintOrient = 
+	  &cellOrientation[iConstraint*orientationSize];
+	
+	// Entries associated with constraint forces applied at node i
+	for (int iDim=0; iDim < spaceDim; ++iDim)
+	  for (int kDim=0; kDim < spaceDim; ++kDim)
+	    cellResidual[indexI*spaceDim+iDim] -=
+	      cellSoln[indexK*spaceDim+kDim] * 
+	      -constraintOrient[kDim*spaceDim+iDim] * pseudoStiffness;
+	
+	// Entries associated with constraint forces applied at node j
+	for (int jDim=0; jDim < spaceDim; ++jDim)
+	  for (int kDim=0; kDim < spaceDim; ++kDim)
+	    cellResidual[indexJ*spaceDim+jDim] -=
+	      cellSoln[indexK*spaceDim+kDim] * 
+	      constraintOrient[kDim*spaceDim+jDim] * pseudoStiffness;
+      } // if
     } // for
 
 #if 0

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -24,8 +24,8 @@
  * one side of the fault, the corresponding entries on the other side
  * of the fault, and then the corresponding constraint vertices.
  *
- * [ K  aC^T ] [ U  ] = [ Fe ]
- * [ C   0   ] [ Fi ] = [ D  ]
+ * [ K  aC^T ] [ U    ] = [ Fe ]
+ * [ C   0   ] [ Fi/a ] = [ D  ]
  *
  * where K is the stiffness matrix, C is the matrix of Lagrange
  * constraints, U is the displacement field, Fe is the vector of

Modified: short/3D/PyLith/trunk/pylith/problems/Explicit.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/Explicit.py	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/pylith/problems/Explicit.py	2007-11-13 00:56:30 UTC (rev 8284)
@@ -135,6 +135,14 @@
     bindings.completeSection(self.mesh.cppHandle, residual)
     self._info.log("Solving equations.")
     self.solver.solve(self.fields.getReal("dispTpdt"), self.jacobian, residual)
+
+    # BEGIN TEMPORARY
+    #bindings.sectionView(residual, "RHS");
+    #bindings.sectionView(self.fields.getReal("dispTpdt"), "SOLUTION");
+    #import pylith.utils.petsc as petscbindings
+    #print "JACOBIAN"
+    #petscbindings.mat_view(self.jacobian)
+    # END TEMPORARY
     return
 
 

Modified: short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn.cfg
===================================================================
--- short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn.cfg	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn.cfg	2007-11-13 00:56:30 UTC (rev 8284)
@@ -32,7 +32,7 @@
 # ----------------------------------------------------------------------
 [pylithapp.timedependent]
 total_time = 0.0175*s
-default_dt = 0.000175*s
+default_dt = 0.0001*s
 dimension = 1
 formulation = pylith.problems.Explicit
 bc = pylith.bc.BCSingle
@@ -50,16 +50,17 @@
 db.iohandler.filename = matprops.spatialdb
 quadrature = pylith.feassemble.quadrature.Quadrature1D
 quadrature.cell.shape = line
+quadrature.cell.quad_order = 2
 
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
 [pylithapp.timedependent.bc.bc]
-fixed_dof = [0]
-id = 10
-label = end points
-db.label = Dirichlet BC
-db.iohandler.filename = dislocation_disp.spatialdb
+#fixed_dof = [0]
+#id = 10
+#label = end points
+#db.label = Dirichlet BC
+#db.iohandler.filename = dislocation_disp.spatialdb
 
 # ----------------------------------------------------------------------
 # faults
@@ -84,9 +85,11 @@
 # PETSc
 # ----------------------------------------------------------------------
 [pylithapp.petsc]
+ksp_type = gmres
 pc_type = jacobi
 ksp_rtol = 1.0e-8
-ksp_max_it = 500
+ksp_max_it = 50
+ksp_gmres_restart = 10
 
 #ksp_type = preonly
 #pc_jacobi_rowsum = 1

Modified: short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn_sliprate.spatialdb
===================================================================
--- short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn_sliprate.spatialdb	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/tests/1d/line2/dislocation_dyn_sliprate.spatialdb	2007-11-13 00:56:30 UTC (rev 8284)
@@ -11,4 +11,4 @@
     space-dim = 1
   }
 }
-0.0   1.0e+3
+0.0   5.0e+2

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -217,38 +217,77 @@
     solution->updatePoint(*v_iter, &_data->fieldT[iVertex*spaceDim]);
   } // for
   
-  // Call integrateResidual()
   const double t = 2.134;
-  fault.integrateResidual(residual, t, &fields, mesh);
+  const double dt = 0.01;
+  fault.timeStep(dt);
+  { // Integrate residual with solution (as opposed to solution increment).
+    fault.useSolnIncr(false);
+    fault.integrateResidual(residual, t, &fields, mesh);
 
-  //residual->view("RESIDUAL");
+    //residual->view("RESIDUAL");
 
-  // Check values
-  const double* valsE = _data->valsResidual;
-  iVertex = 0;
-  const int fiberDimE = spaceDim;
-  const double tolerance = 1.0e-06;
-  for (Mesh::label_sequence::iterator v_iter=vBegin;
-       v_iter != vEnd;
-       ++v_iter, ++iVertex) {
-    const int fiberDim = residual->getFiberDimension(*v_iter);
-    CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-    const real_section_type::value_type* vals = 
-      residual->restrictPoint(*v_iter);
-    
-    const bool isConstraint = 
-      (fault._constraintVert.end() != fault._constraintVert.find(*v_iter));
-    const double pseudoStiffness = 
-      (!isConstraint) ? _data->pseudoStiffness : 1.0;
-    for (int i=0; i < fiberDimE; ++i) {
-      const int index = iVertex*spaceDim+i;
-      const double valE = valsE[index] * pseudoStiffness;
-      if (valE > tolerance)
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
-      else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
+    // Check values
+    const double* valsE = _data->valsResidual;
+    iVertex = 0;
+    const int fiberDimE = spaceDim;
+    const double tolerance = 1.0e-06;
+    for (Mesh::label_sequence::iterator v_iter=vBegin;
+	 v_iter != vEnd;
+	 ++v_iter, ++iVertex) {
+      const int fiberDim = residual->getFiberDimension(*v_iter);
+      CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
+      const real_section_type::value_type* vals = 
+	residual->restrictPoint(*v_iter);
+      
+      const bool isConstraint = 
+	(fault._constraintVert.end() != fault._constraintVert.find(*v_iter));
+      const double pseudoStiffness = 
+	(!isConstraint) ? _data->pseudoStiffness : 1.0;
+      for (int i=0; i < fiberDimE; ++i) {
+	const int index = iVertex*spaceDim+i;
+	const double valE = valsE[index] * pseudoStiffness;
+	if (valE > tolerance)
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
+	else
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
+      } // for
     } // for
-  } // for
+  } // Integrate residual with solution (as opposed to solution increment).
+
+  residual->zero();
+  { // Integrate residual with solution increment.
+    fault.useSolnIncr(true);
+    fault.integrateResidual(residual, t, &fields, mesh);
+
+    //residual->view("RESIDUAL");
+
+    // Check values
+    const double* valsE = _data->valsResidualIncr;
+    iVertex = 0;
+    const int fiberDimE = spaceDim;
+    const double tolerance = 1.0e-06;
+    for (Mesh::label_sequence::iterator v_iter=vBegin;
+	 v_iter != vEnd;
+	 ++v_iter, ++iVertex) {
+      const int fiberDim = residual->getFiberDimension(*v_iter);
+      CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
+      const real_section_type::value_type* vals = 
+	residual->restrictPoint(*v_iter);
+      
+      const bool isConstraint = 
+	(fault._constraintVert.end() != fault._constraintVert.find(*v_iter));
+      const double pseudoStiffness = 
+	(!isConstraint) ? _data->pseudoStiffness : 1.0;
+      for (int i=0; i < fiberDimE; ++i) {
+	const int index = iVertex*spaceDim+i;
+	const double valE = valsE[index] * pseudoStiffness;
+	if (valE > tolerance)
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
+	else
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
+      } // for
+    } // for
+  } // Integrate residual with solution increment.
 } // testIntegrateResidual
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -36,6 +36,7 @@
   constraintVertices(0),
   constraintCells(0),
   valsResidual(0),
+  valsResidualIncr(0),
   valsJacobian(0),
   pseudoStiffness(0),
   numConstraintVert(0)

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -70,6 +70,10 @@
   int* constraintVertices; ///< Expected points for constraint vertices
   int* constraintCells; ///< Expected cells for constraint vertices
   double* valsResidual; ///< Expected values from residual calculation.
+
+  /// Expected values from residual calculation using solution increment.
+  double* valsResidualIncr;
+
   double* valsJacobian; ///< Expected values from Jacobian calculation.
   double pseudoStiffness; ///< Fake stiffness for conditioning
   int numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -149,6 +149,29 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  1.07974939836, -0.32861938211, 0.04694562602, // 15 (constraint)
+  0.0, 0.0, 0.0,
+  1.00381374723, -0.33460458241, 0.08365114560, // 17 (constraint)
+  0.0, 0.0, 0.0,
+  0.90493237602, -0.32577565537, 0.10859188512, // 19 (constraint)
+  0.0, 0.0, 0.0,
+  0.78469841324, -0.30180708202, 0.12072283281, // 21 (constraint)
+};
+
+const double pylith::faults::CohesiveKinDataHex8::_valsResidualIncr[] = {
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0,
  -9.4,-5.4,-7.4, // 6
  -9.6,-5.6,-7.6, // 7
  -9.8,-5.8,-7.8, // 8
@@ -158,13 +181,13 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
  +9.4,+5.4,+7.4, // 14
-  1.07974939836, -0.32861938211, 0.04694562602, // 15 (constraint)
+  0.01271057284, -0.00386843521, 0.00055263360, // 15 (constraint)
  +9.6,+5.6,+7.6, // 16
-  1.00381374723, -0.33460458241, 0.08365114560, // 17 (constraint)
+  0.01411467401, -0.00470489134, 0.00117622283, // 17 (constraint)
  +9.8,+5.8,+7.8, // 18
-  0.90493237602, -0.32577565537, 0.10859188512, // 19 (constraint)
+  0.01544188788, -0.00555907964, 0.00185302655, // 19 (constraint)
  +9.0,+5.0,+7.0, // 20
-  0.78469841324, -0.30180708202, 0.12072283281, // 21 (constraint)
+  0.01656103940, -0.00636963054, 0.00254785222, // 21 (constraint)
 };
 
 const double pylith::faults::CohesiveKinDataHex8::_valsJacobian[] = {
@@ -1395,6 +1418,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -92,11 +92,19 @@
   7
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_valsResidual[] = {
+const double pylith::faults::CohesiveKinDataLine2::_valsResidualIncr[] = {
    0.0,
    7.5,
    0.0,
   -7.5,
+   0.01257664078
+};
+
+const double pylith::faults::CohesiveKinDataLine2::_valsResidual[] = {
+   0.0,
+   0.0,
+   0.0,
+   0.0,
    1.05168389458
 };
 
@@ -132,6 +140,7 @@
   orientation = const_cast<double*>(_orientation);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation with solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -124,14 +124,27 @@
 const double pylith::faults::CohesiveKinDataQuad4::_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.989535448086, 0.0824612873405, // 9
+  0.0,  0.0,
+  1.05057813143, 0.0456773100622, // 11
+};
+
+const double pylith::faults::CohesiveKinDataQuad4::_valsResidualIncr[] = {
+  0.0,  0.0,
+  0.0,  0.0,
   9.8,  8.8, // 4
   9.0,  8.0, // 5
   0.0,  0.0,
   0.0,  0.0,
  -9.8, -8.8, // 8
-  0.989535448086, 0.0824612873405, // 9
+  0.01401378019, 0.00116781502, // 9
   -9.0, -8.0, // 10
-  1.05057813143, 0.0456773100622, // 11
+  0.01257113624, 0.00054657114, // 11
 };
 
 const double pylith::faults::CohesiveKinDataQuad4::_valsJacobian[] = {
@@ -362,6 +375,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -149,6 +149,24 @@
 const double pylith::faults::CohesiveKinDataQuad4e::_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,
+  0.0,  0.0,
+  0.989535448086, 0.0824612873405, // 14
+  0.0,  0.0,
+  1.05057813143, 0.0456773100622, // 16
+  0.0,  0.0,
+  0.90435792846,  0.10852295130, // 18
+};
+
+const double pylith::faults::CohesiveKinDataQuad4e::_valsResidualIncr[] = {
+  0.0,  0.0,
+  0.0,  0.0,
  -6.1, -4.1, // 6
  -6.3, -4.3, // 7
   0.0,  0.0,
@@ -157,11 +175,11 @@
  -6.5, -4.5, // 11
   0.0,  0.0,
  +6.1, +4.1, // 13
-  0.989535448086, 0.0824612873405, // 14
+  0.01401378019, 0.00116781502, // 14
  +6.3, +4.3, // 15
-  1.05057813143, 0.0456773100622, // 16
+  0.01257113624, 0.00054657114, // 16
  +6.5, +4.5, // 17
-  0.90435792846,  0.10852295130, // 18
+  0.01543608228, 0.00185232987, // 18
 };
 
 const double pylith::faults::CohesiveKinDataQuad4e::_valsJacobian[] = {
@@ -642,6 +660,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -112,16 +112,30 @@
 
 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.00381374723, -0.33460458241, 0.08365114560, // 10
+  0.0,  0.0,  0.0,
+  0.90493237602, -0.32577565537, 0.10859188512, // 12
+};
+
+const double pylith::faults::CohesiveKinDataTet4::_valsResidualIncr[] = {
+  0.0,  0.0,  0.0,
   9.7,  7.7,  8.7, // 3
   9.9,  7.9,  8.9, // 4
   9.1,  7.1,  8.1, // 5
   0.0,  0.0,  0.0,
  -9.7, -7.7, -8.7, // 7
-  1.07974939836, -0.32861938211, 0.04694562602, // 8
+  0.01271057284, -0.00386843521, 0.00055263360, // 8
  -9.9, -7.9, -8.9, // 4
-  1.00381374723, -0.33460458241, 0.08365114560, // 10
+  0.01411467401, -0.00470489134, 0.00117622283, // 10
  -9.1, -7.1, -8.1, // 5
-  0.90493237602, -0.32577565537, 0.10859188512, // 12
+  0.01544188788, -0.00555907964, 0.00185302655, // 12
 };
 
 const double pylith::faults::CohesiveKinDataTet4::_valsJacobian[] = {
@@ -515,6 +529,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -116,19 +116,36 @@
 
 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,
+  0.0,  0.0,  0.0,
+  1.07974939836, -0.32861938211, 0.04694562602, // 11
+  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
+};
+
+const double pylith::faults::CohesiveKinDataTet4e::_valsResidualIncr[] = {
+  0.0,  0.0,  0.0,
   7.8,  3.8,  5.8, // 5
   7.0,  3.0,  5.0, // 6
   8.2,  4.2,  6.2, // 7
   8.4,  4.4,  6.4, // 8
   0.0,  0.0,  0.0,
  -7.8, -3.8, -5.8, // 10
-  1.07974939836, -0.32861938211, 0.04694562602, // 11
+  0.01271057284, -0.00386843521, 0.00055263360, // 11
  -7.0, -3.0, -5.0, // 12
-  1.00381374723, -0.33460458241, 0.08365114560, // 13
+  0.01411467401, -0.00470489134, 0.00117622283, // 13
  -8.2, -4.2, -6.2, // 14
-  0.90493237602, -0.32577565537, 0.10859188512, // 15
+  0.01544188788, -0.00555907964, 0.00185302655, // 15
  -8.4, -4.4, -6.4, // 16
-  0.78469841324, -0.30180708202, 0.12072283281, // 17
+  0.01656103940, -0.00636963054, 0.00254785222, // 17
 };
 
 const double pylith::faults::CohesiveKinDataTet4e::_valsJacobian[] = {
@@ -747,6 +764,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -112,16 +112,30 @@
 
 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::_valsResidualIncr[] = {
+  0.0,  0.0,  0.0,
  -9.7, -7.7, -8.7, // 3
  -9.9, -7.9, -8.9, // 4
  -9.1, -7.1, -8.1, // 5
   0.0,  0.0,  0.0,
  +9.7, +7.7, +8.7, // 7
-  1.07974939836, -0.32861938211, 0.04694562602, // 8
+  0.01271057284, -0.00386843521, 0.00055263360, // 8
  +9.9, +7.9, +8.9, // 4
-  1.00381374723, -0.33460458241, 0.08365114560, // 10
+  0.01411467401, -0.00470489134, 0.00117622283, // 10
  +9.1, +7.1, +8.1, // 5
-  0.90493237602, -0.32577565537, 0.10859188512, // 12
+  0.01544188788, -0.00555907964, 0.00185302655, // 12
 };
 
 const double pylith::faults::CohesiveKinDataTet4f::_valsJacobian[] = {
@@ -515,6 +529,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -123,13 +123,24 @@
 
 const double pylith::faults::CohesiveKinDataTri3::_valsResidual[] = {
   0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  0.0,  0.0,
+  1.05057813143, 0.0456773100622, // 7
+  0.0,  0.0,
+  0.989535448086, 0.0824612873405, // 9
+};
+
+const double pylith::faults::CohesiveKinDataTri3::_valsResidualIncr[] = {
+  0.0,  0.0,
  -9.6, -8.6, // 3
  -9.8, -8.8, // 4
   0.0,  0.0,
  +9.6, +8.6, // 6
-  1.05057813143, 0.0456773100622, // 7
+  0.01257113624, 0.00054657114, // 7
  +9.8, +8.8, // 8
-  0.989535448086, 0.0824612873405, // 9
+  0.01401378019, 0.00116781502, // 9
 };
 
 const double pylith::faults::CohesiveKinDataTri3::_valsJacobian[] = {
@@ -288,6 +299,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc	2007-11-13 00:56:30 UTC (rev 8284)
@@ -144,17 +144,32 @@
 
 const double pylith::faults::CohesiveKinDataTri3d::_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,
+  1.05057813143, 0.0456773100622, // 11
+  0.0, 0.0,
+  0.989535448086, 0.0824612873405, // 13
+  0.0, 0.0,
+  0.90435792846,  0.10852295130, // 15
+};
+
+const double pylith::faults::CohesiveKinDataTri3d::_valsResidualIncr[] = {
+  0.0,  0.0,
  -1.4142135623730949, -11.030865786510143, // 5
  -8.0,  -6.0, // 6
   0.0,  0.0,
  +7.2,  -9.2, // 8
   0.0,  0.0,
  +1.4142135623730949, +11.030865786510143, // 10
-  1.05057813143, 0.0456773100622, // 11
+  0.01257113624, 0.00054657114, // 11
  +8.0, +6.0, // 12
-  0.989535448086, 0.0824612873405, // 13
+  0.01401378019, 0.00116781502, // 13
  -7.2, +9.2, // 14
-  0.90435792846,  0.10852295130, // 15
+  0.01543608228, 0.00185232987, // 15
 };
 
 const double pylith::faults::CohesiveKinDataTri3d::_valsJacobian[] = {
@@ -473,6 +488,7 @@
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);
+  valsResidualIncr = const_cast<double*>(_valsResidualIncr);
   valsJacobian = const_cast<double*>(_valsJacobian);
   pseudoStiffness = _pseudoStiffness;
   numConstraintVert = _numConstraintVert;  

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh	2007-11-13 00:56:30 UTC (rev 8284)
@@ -63,6 +63,7 @@
   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 _valsResidualIncr[]; ///< Expected values from residual calculation using solution increment.
   static const double _valsJacobian[]; ///< Expected values from Jacobian calculation.
   static const double _pseudoStiffness; ///< Fake stiffness for conditioning
   static const int _numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/slipth.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/slipth.py	2007-11-12 23:03:09 UTC (rev 8283)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/slipth.py	2007-11-13 00:56:30 UTC (rev 8284)
@@ -1,15 +1,20 @@
 from math import *
 
-finalSlip = (2.5,  0.0, 0.3)
+finalSlip = (2.6,  -1.0, 0.4)
 
 slipMag = (finalSlip[0]**2+finalSlip[1]**2+finalSlip[2]**2)**0.5
-peakRate = 1.6
-slipTime = 1.4
+peakRate = 1.8
+slipTime = 1.5
 t = 2.134
+dt = 0.01
 
 tau = slipMag / (exp(1.0) * peakRate)
 t0 = slipTime
 slipN = 1.0 - exp(-(t-t0)/tau) * (1.0 + (t-t0)/tau)
+slipNp = 1.0 - exp(-(t-dt-t0)/tau) * (1.0 + (t-dt-t0)/tau)
+slipNincr = slipN - slipNp
+print "%13.11f, %13.11f, %13.11f" % \
+      (slipN*finalSlip[0], slipN*finalSlip[1], slipN*finalSlip[2])
 
 print "%13.11f, %13.11f, %13.11f" % \
-      (slipN*finalSlip[0], slipN*finalSlip[1], slipN*finalSlip[2])
+      (slipNincr*finalSlip[0], slipNincr*finalSlip[1], slipNincr*finalSlip[2])



More information about the cig-commits mailing list