[cig-commits] r19399 - in short/3D/PyLith/branches/pylith-scecdynrup: libsrc/pylith libsrc/pylith/faults libsrc/pylith/feassemble libsrc/pylith/friction libsrc/pylith/problems modulesrc/bc modulesrc/faults modulesrc/feassemble modulesrc/friction modulesrc/materials modulesrc/meshio modulesrc/mpi modulesrc/problems modulesrc/topology pylith pylith/friction unittests/libtests/faults unittests/libtests/friction unittests/libtests/friction/data unittests/pytests/friction

brad at geodynamics.org brad at geodynamics.org
Fri Jan 20 08:15:29 PST 2012


Author: brad
Date: 2012-01-20 08:15:29 -0800 (Fri, 20 Jan 2012)
New Revision: 19399

Added:
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.hh
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningTime.i
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningTime.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningTime.py
Modified:
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakening.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/__init__.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakening.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestStaticFriction.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestTimeWeakening.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py
Log:
Merge from trunk.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -102,6 +102,7 @@
 	friction/FrictionModel.cc \
 	friction/StaticFriction.cc \
 	friction/SlipWeakening.cc \
+	friction/SlipWeakeningTime.cc \
 	friction/RateStateAgeing.cc \
 	friction/TimeWeakening.cc \
 	materials/Metadata.cc \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -464,14 +464,16 @@
       const PylithScalar slipMag = 0.0;
       const PylithScalar slipRateMag = 0.0;
       const PylithScalar tractionNormal = tractionTpdtVertex[0];
-      _friction->updateStateVars(slipMag, slipRateMag, tractionNormal, v_fault);
+      _friction->updateStateVars(t, slipMag, slipRateMag, tractionNormal, 
+				 v_fault);
       break;
     } // case 1
     case 2: { // case 2
       const PylithScalar slipMag = fabs(slipVertex[0]);
       const PylithScalar slipRateMag = fabs(slipRateVertex[0]);
       const PylithScalar tractionNormal = tractionTpdtVertex[1];
-      _friction->updateStateVars(slipMag, slipRateMag, tractionNormal, v_fault);
+      _friction->updateStateVars(t, slipMag, slipRateMag, tractionNormal, 
+				 v_fault);
       break;
     } // case 2
     case 3: { // case 3
@@ -481,7 +483,8 @@
 	sqrt(slipRateVertex[0]*slipRateVertex[0] + 
 	     slipRateVertex[1]*slipRateVertex[1]);
       const PylithScalar tractionNormal = tractionTpdtVertex[2];
-      _friction->updateStateVars(slipMag, slipRateMag, tractionNormal, v_fault);
+      _friction->updateStateVars(t, slipMag, slipRateMag, tractionNormal, 
+				 v_fault);
       break;
     } // case 3
     default:
@@ -503,6 +506,7 @@
   /// Member prototype for _constrainSolnSpaceXD()
   typedef void (pylith::faults::FaultCohesiveDyn::*constrainSolnSpace_fn_type)
     (scalar_array*,
+     const PylithScalar,
      const scalar_array&,
      const scalar_array&,
      const scalar_array&,
@@ -700,7 +704,7 @@
     const bool iterating = true; // Iterating to get friction
     CALL_MEMBER_FN(*this,
 		   constrainSolnSpaceFn)(&dLagrangeTpdtVertex,
-					 slipVertex, slipRateVertex,
+					 t, slipVertex, slipRateVertex,
 					 tractionTpdtVertex,
 					 iterating);
 
@@ -998,11 +1002,13 @@
 void
 pylith::faults::FaultCohesiveDyn::adjustSolnLumped(
 			 topology::SolutionFields* const fields,
+			 const PylithScalar t,
 			 const topology::Field<topology::Mesh>& jacobian)
 { // adjustSolnLumped
   /// Member prototype for _constrainSolnSpaceXD()
   typedef void (pylith::faults::FaultCohesiveDyn::*constrainSolnSpace_fn_type)
     (scalar_array*,
+     const PylithScalar,
      const scalar_array&,
      const scalar_array&,
      const scalar_array&,
@@ -1229,7 +1235,7 @@
     const bool iterating = false; // No iteration for friction in lumped soln
     CALL_MEMBER_FN(*this,
 		   constrainSolnSpaceFn)(&dLagrangeTpdtVertex,
-					 slipVertex, slipRateVertex,
+					 t, slipVertex, slipRateVertex,
 					 tractionTpdtVertex,
 					 iterating);
 
@@ -2154,6 +2160,7 @@
 // Constrain solution space in 1-D.
 void
 pylith::faults::FaultCohesiveDyn::_constrainSolnSpace1D(scalar_array* dLagrangeTpdt,
+	 const PylithScalar t,
          const scalar_array& slip,
          const scalar_array& sliprate,
 	 const scalar_array& tractionTpdt,
@@ -2177,6 +2184,7 @@
 // Constrain solution space in 2-D.
 void
 pylith::faults::FaultCohesiveDyn::_constrainSolnSpace2D(scalar_array* dLagrangeTpdt,
+	 const PylithScalar t,
          const scalar_array& slip,
          const scalar_array& slipRate,
 	 const scalar_array& tractionTpdt,
@@ -2194,8 +2202,8 @@
   if (fabs(slip[1]) < _zeroTolerance && tractionNormal < -_zeroTolerance) {
 #endif
     // if in compression and no opening
-    const PylithScalar frictionStress = _friction->calcFriction(slipMag, slipRateMag,
-							  tractionNormal);
+    const PylithScalar frictionStress = 
+      _friction->calcFriction(t, slipMag, slipRateMag, tractionNormal);
     if (tractionShearMag > frictionStress || (iterating && slipRateMag > 0.0)) {
       // traction is limited by friction, so have sliding OR
       // friction exceeds traction due to overshoot in slip
@@ -2233,6 +2241,7 @@
 // Constrain solution space in 3-D.
 void
 pylith::faults::FaultCohesiveDyn::_constrainSolnSpace3D(scalar_array* dLagrangeTpdt,
+	 const PylithScalar t,
          const scalar_array& slip,
          const scalar_array& slipRate,
 	 const scalar_array& tractionTpdt,
@@ -2255,7 +2264,7 @@
 #endif
     // if in compression and no opening
     const PylithScalar frictionStress = 
-      _friction->calcFriction(slipShearMag, slipRateMag, tractionNormal);
+      _friction->calcFriction(t, slipShearMag, slipRateMag, tractionNormal);
     if (tractionShearMag > frictionStress || (iterating && slipRateMag > 0.0)) {
       // traction is limited by friction, so have sliding OR
       // friction exceeds traction due to overshoot in slip

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -122,10 +122,12 @@
    *  multiplier constraints.
    *
    * @param fields Solution fields.
+   * @param t Current time.
    * @param jacobian Jacobian of the system.
    */
   void adjustSolnLumped(topology::SolutionFields* fields,
-      const topology::Field<topology::Mesh>& jacobian);
+			const PylithScalar t,
+			const topology::Field<topology::Mesh>& jacobian);
 
   /** Get vertex field associated with integrator.
    *
@@ -202,11 +204,13 @@
   /** Constrain solution space with lumped Jacobian in 1-D.
    *
    * @param dLagrangeTpdt Adjustment to Lagrange multiplier.
+   * @param t Current time.
    * @param slip Slip assoc. w/Lagrange multiplier vertex.
    * @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
    * @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
    */
   void _constrainSolnSpace1D(scalar_array* dLagrangeTpdt,
+			     const PylithScalar t,
 			     const scalar_array& slip,
 			     const scalar_array& slipRate,
 			     const scalar_array& tractionTpdt,
@@ -215,11 +219,13 @@
   /** Constrain solution space with lumped Jacobian in 2-D.
    *
    * @param dLagrangeTpdt Adjustment to Lagrange multiplier.
+   * @param t Current time.
    * @param slip Slip assoc. w/Lagrange multiplier vertex.
    * @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
    * @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
    */
   void _constrainSolnSpace2D(scalar_array* dLagrangeTpdt,
+			     const PylithScalar t,
 			     const scalar_array& slip,
 			     const scalar_array& slipRate,
 			     const scalar_array& tractionTpdt,
@@ -228,11 +234,13 @@
   /** Constrain solution space with lumped Jacobian in 3-D.
    *
    * @param dLagrangeTpdt Adjustment to Lagrange multiplier.
+   * @param t Current time.
    * @param slip Slip assoc. w/Lagrange multiplier vertex.
    * @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
    * @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
    */
   void _constrainSolnSpace3D(scalar_array* dLagrangeTpdt,
+			     const PylithScalar t,
 			     const scalar_array& slip,
 			     const scalar_array& slipRate,
 			     const scalar_array& tractionTpdt,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -762,6 +762,7 @@
 // multiplier constraints.
 void
 pylith::faults::FaultCohesiveLagrange::adjustSolnLumped(topology::SolutionFields* const fields,
+							const PylithScalar t,
                                                         const topology::Field<
 							topology::Mesh>& jacobian)
 { // adjustSolnLumped

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -174,10 +174,12 @@
    *  multiplier constraints.
    *
    * @param fields Solution fields
+   * @param t Current time.
    * @param jacobian Jacobian of the system.
    */
   virtual
   void adjustSolnLumped(topology::SolutionFields* fields,
+			const PylithScalar t,
 			const topology::Field<topology::Mesh>& jacobian);
 
   /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -227,10 +227,12 @@
    *  multiplier constraints.
    *
    * @param fields Solution fields.
+   * @param t Current time.
    * @param jacobian Jacobian of the system.
    */
   virtual
   void adjustSolnLumped(topology::SolutionFields* fields,
+			const PylithScalar t,
 			const topology::Field<topology::Mesh>& jacobian);
 
   /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -148,6 +148,7 @@
 void
 pylith::feassemble::Integrator<quadrature_type>::adjustSolnLumped(
 			topology::SolutionFields* fields,
+			const PylithScalar t,
 			const topology::Field<topology::Mesh>& jacobian) {
 } // adjustSolnLumped
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -304,7 +304,8 @@
 // ----------------------------------------------------------------------
 // Compute friction at vertex.
 PylithScalar
-pylith::friction::FrictionModel::calcFriction(const PylithScalar slip,
+pylith::friction::FrictionModel::calcFriction(const PylithScalar t,
+					      const PylithScalar slip,
                                               const PylithScalar slipRate,
                                               const PylithScalar normalTraction)
 { // calcFriction
@@ -316,7 +317,7 @@
     &_propsStateVarsVertex[_propsFiberDim] : 0;
 
   const PylithScalar friction =
-    _calcFriction(slip, slipRate, normalTraction,
+    _calcFriction(t, slip, slipRate, normalTraction,
 		  propertiesVertex, _propsFiberDim,
 		  stateVarsVertex, _varsFiberDim);
   
@@ -326,7 +327,8 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::FrictionModel::updateStateVars(const PylithScalar slip,
+pylith::friction::FrictionModel::updateStateVars(const PylithScalar t,
+						 const PylithScalar slip,
 						 const PylithScalar slipRate,
 						 const PylithScalar normalTraction,
 						 const int vertex)
@@ -343,7 +345,7 @@
   const PylithScalar* propertiesVertex = &_propsStateVarsVertex[0];
   PylithScalar* stateVarsVertex = &_propsStateVarsVertex[_propsFiberDim];
   
-  _updateStateVars(slip, slipRate, normalTraction,
+  _updateStateVars(t, slip, slipRate, normalTraction,
 		   &stateVarsVertex[0], _varsFiberDim,
 		   &propertiesVertex[0], _propsFiberDim);
 
@@ -355,13 +357,15 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::FrictionModel::_updateStateVars(const PylithScalar slip,
-    const PylithScalar slipRate,
-    const PylithScalar normalTraction,
-    PylithScalar* const stateVars,
-    const int numStateVars,
-    const PylithScalar* properties,
-    const int numProperties)
+pylith::friction::FrictionModel::_updateStateVars(
+				const PylithScalar t,
+				const PylithScalar slip,
+				const PylithScalar slipRate,
+				const PylithScalar normalTraction,
+				PylithScalar* const stateVars,
+				const int numStateVars,
+				const PylithScalar* properties,
+				const int numProperties)
 { // _updateStateVars
 } // _updateStateVars
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -156,27 +156,31 @@
    * @pre Must call retrievePropsAndVars for cell before calling
    * calcFriction().
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
    *
    * @returns Friction (magnitude of shear traction) at vertex.
    */
-  PylithScalar calcFriction(const PylithScalar slip,
-                      const PylithScalar slipRate,
-                      const PylithScalar normalTraction);
+  PylithScalar calcFriction(const PylithScalar t,
+			    const PylithScalar slip,
+			    const PylithScalar slipRate,
+			    const PylithScalar normalTraction);
   
   /** Compute friction at vertex.
    *
    * @pre Must call retrievePropsAndVars for cell before calling
    * calcFriction().
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
    * @param vertex Finite-element vertex on friction interface.
    */
-  void updateStateVars(const PylithScalar slip,
+  void updateStateVars(const PylithScalar t,
+		       const PylithScalar slip,
 		       const PylithScalar slipRate,
 		       const PylithScalar normalTraction,
 		       const int vertex);
@@ -242,6 +246,7 @@
 
   /** Compute friction from properties and state variables.
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -251,16 +256,18 @@
    * @param numStateVars Number of state variables.
    */
   virtual
-  PylithScalar _calcFriction(const PylithScalar slip,
-		       const PylithScalar slipRate,
-		       const PylithScalar normalTraction,
-		       const PylithScalar* properties,
-		       const int numProperties,
-		       const PylithScalar* stateVars,
-		       const int numStateVars) = 0;
-
+  PylithScalar _calcFriction(const PylithScalar t,
+			     const PylithScalar slip,
+			     const PylithScalar slipRate,
+			     const PylithScalar normalTraction,
+			     const PylithScalar* properties,
+			     const int numProperties,
+			     const PylithScalar* stateVars,
+			     const int numStateVars) = 0;
+  
   /** Update state variables (for next time step).
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -270,7 +277,8 @@
    * @param numProperties Number of properties.
    */
   virtual
-  void _updateStateVars(const PylithScalar slip,
+  void _updateStateVars(const PylithScalar t,
+			const PylithScalar slip,
 			const PylithScalar slipRate,
 			const PylithScalar normalTraction,
 			PylithScalar* const stateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -24,6 +24,7 @@
 	FrictionModel.icc \
 	StaticFriction.hh \
 	SlipWeakening.hh \
+	SlipWeakeningTime.hh \
 	RateStateAgeing.hh \
 	TimeWeakening.hh \
 	frictionfwd.hh

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -293,13 +293,14 @@
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
 PylithScalar
-pylith::friction::RateStateAgeing::_calcFriction(const PylithScalar slip,
-						const PylithScalar slipRate,
-						const PylithScalar normalTraction,
-						const PylithScalar* properties,
-						const int numProperties,
-						const PylithScalar* stateVars,
-						const int numStateVars)
+pylith::friction::RateStateAgeing::_calcFriction(const PylithScalar t,
+						 const PylithScalar slip,
+						 const PylithScalar slipRate,
+						 const PylithScalar normalTraction,
+						 const PylithScalar* properties,
+						 const int numProperties,
+						 const PylithScalar* stateVars,
+						 const int numStateVars)
 { // _calcFriction
   assert(properties);
   assert(_RateStateAgeing::numProperties == numProperties);
@@ -342,13 +343,14 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::RateStateAgeing::_updateStateVars(const PylithScalar slip,
-						  const PylithScalar slipRate,
-						  const PylithScalar normalTraction,
-						  PylithScalar* const stateVars,
-						  const int numStateVars,
-						  const PylithScalar* properties,
-						  const int numProperties)
+pylith::friction::RateStateAgeing::_updateStateVars(const PylithScalar t,
+						    const PylithScalar slip,
+						    const PylithScalar slipRate,
+						    const PylithScalar normalTraction,
+						    PylithScalar* const stateVars,
+						    const int numStateVars,
+						    const PylithScalar* properties,
+						    const int numProperties)
 { // _updateStateVars
   assert(properties);
   assert(_RateStateAgeing::numProperties == numProperties);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -125,6 +125,7 @@
 
   /** Compute friction from properties and state variables.
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -133,16 +134,18 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  PylithScalar _calcFriction(const PylithScalar slip,
-		       const PylithScalar slipRate,
-		       const PylithScalar normalTraction,
-		       const PylithScalar* properties,
-		       const int numProperties,
-		       const PylithScalar* stateVars,
-		       const int numStateVars);
+  PylithScalar _calcFriction(const PylithScalar t,
+			     const PylithScalar slip,
+			     const PylithScalar slipRate,
+			     const PylithScalar normalTraction,
+			     const PylithScalar* properties,
+			     const int numProperties,
+			     const PylithScalar* stateVars,
+			     const int numStateVars);
 
   /** Update state variables (for next time step).
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -151,7 +154,8 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _updateStateVars(const PylithScalar slip,
+  void _updateStateVars(const PylithScalar t,
+			const PylithScalar slip,
 			const PylithScalar slipRate,
 			const PylithScalar normalTraction,
 			PylithScalar* const stateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -32,7 +32,6 @@
 #include <cassert> // USES assert()
 #include <sstream> // USES std::ostringstream
 #include <stdexcept> // USES std::runtime_error
-#include <iostream>
 // ----------------------------------------------------------------------
 namespace pylith {
   namespace friction {
@@ -257,13 +256,14 @@
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
 PylithScalar
-pylith::friction::SlipWeakening::_calcFriction(const PylithScalar slip,
-						const PylithScalar slipRate,
-						const PylithScalar normalTraction,
-						const PylithScalar* properties,
-						const int numProperties,
-						const PylithScalar* stateVars,
-						const int numStateVars)
+pylith::friction::SlipWeakening::_calcFriction(const PylithScalar t,
+					       const PylithScalar slip,
+					       const PylithScalar slipRate,
+					       const PylithScalar normalTraction,
+					       const PylithScalar* properties,
+					       const int numProperties,
+					       const PylithScalar* stateVars,
+					       const int numStateVars)
 { // _calcFriction
   assert(properties);
   assert(_SlipWeakening::numProperties == numProperties);
@@ -293,7 +293,8 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::SlipWeakening::_updateStateVars(const PylithScalar slip,
+pylith::friction::SlipWeakening::_updateStateVars(const PylithScalar t,
+						  const PylithScalar slip,
 						  const PylithScalar slipRate,
 						  const PylithScalar normalTraction,
 						  PylithScalar* const stateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -107,6 +107,7 @@
 
   /** Compute friction from properties and state variables.
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -115,16 +116,18 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  PylithScalar _calcFriction(const PylithScalar slip,
-		       const PylithScalar slipRate,
-		       const PylithScalar normalTraction,
-		       const PylithScalar* properties,
-		       const int numProperties,
-		       const PylithScalar* stateVars,
-		       const int numStateVars);
-
+  PylithScalar _calcFriction(const PylithScalar t,
+			     const PylithScalar slip,
+			     const PylithScalar slipRate,
+			     const PylithScalar normalTraction,
+			     const PylithScalar* properties,
+			     const int numProperties,
+			     const PylithScalar* stateVars,
+			     const int numStateVars);
+  
   /** Update state variables (for next time step).
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -133,13 +136,14 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _updateStateVars(const PylithScalar slip,
-      const PylithScalar slipRate,
-      const PylithScalar normalTraction,
-      PylithScalar* const stateVars,
-      const int numStateVars,
-      const PylithScalar* properties,
-      const int numProperties);
+  void _updateStateVars(const PylithScalar t,
+			const PylithScalar slip,
+			const PylithScalar slipRate,
+			const PylithScalar normalTraction,
+			PylithScalar* const stateVars,
+			const int numStateVars,
+			const PylithScalar* properties,
+			const int numProperties);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :

Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.cc (from rev 19390, short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,345 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "SlipWeakeningTime.hh" // implementation of object methods
+
+#include "pylith/materials/Metadata.hh" // USES Metadata
+
+#include "pylith/utils/array.hh" // USES scalar_array
+#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include "petsc.h" // USES PetscLogFlops
+
+#include <cassert> // USES assert()
+#include <sstream> // USES std::ostringstream
+#include <stdexcept> // USES std::runtime_error
+// ----------------------------------------------------------------------
+namespace pylith {
+  namespace friction {
+    namespace _SlipWeakeningTime {
+
+      // Number of physical properties.
+      const int numProperties = 5;
+
+      // Physical properties.
+      const pylith::materials::Metadata::ParamDescription properties[5] = {
+	{ "static_coefficient", 1, pylith::topology::FieldBase::SCALAR },
+	{ "dynamic_coefficient", 1, pylith::topology::FieldBase::SCALAR },
+        { "slip_weakening_parameter", 1, pylith::topology::FieldBase::SCALAR },
+	{ "cohesion", 1, pylith::topology::FieldBase::SCALAR },
+	{ "weakening_time", 1, pylith::topology::FieldBase::SCALAR },
+      };
+
+      // Number of State Variables.
+      const int numStateVars = 2;
+
+      // State Variables.
+      const pylith::materials::Metadata::ParamDescription stateVars[] = {
+	{ "cumulative_slip", 1, pylith::topology::FieldBase::SCALAR },
+	{ "previous_slip", 1, pylith::topology::FieldBase::SCALAR },
+      };
+
+      // Values expected in spatial database
+      const int numDBProperties = 5;
+      const char* dbProperties[5] = { "static-coefficient",
+				      "dynamic-coefficient",
+				      "slip-weakening-parameter",
+				      "cohesion",
+				      "weakening-time",
+      };
+
+      const int numDBStateVars = 2;
+      const char* dbStateVars[2] = { "cumulative-slip",
+				     "previous-slip",
+      };      
+      
+    } // _SlipWeakeningTime
+  } // friction
+} // pylith
+
+// Indices of physical properties
+const int pylith::friction::SlipWeakeningTime::p_coefS = 0;
+const int pylith::friction::SlipWeakeningTime::p_coefD = 
+  pylith::friction::SlipWeakeningTime::p_coefS + 1;
+const int pylith::friction::SlipWeakeningTime::p_d0 = 
+  pylith::friction::SlipWeakeningTime::p_coefD + 1;
+const int pylith::friction::SlipWeakeningTime::p_cohesion =
+  pylith::friction::SlipWeakeningTime::p_d0 + 1;
+const int pylith::friction::SlipWeakeningTime::p_weaktime =
+  pylith::friction::SlipWeakeningTime::p_cohesion + 1;
+
+// Indices of database values (order must match dbProperties)
+const int pylith::friction::SlipWeakeningTime::db_coefS = 0;
+const int pylith::friction::SlipWeakeningTime::db_coefD = 
+  pylith::friction::SlipWeakeningTime::db_coefS + 1;
+const int pylith::friction::SlipWeakeningTime::db_d0 = 
+  pylith::friction::SlipWeakeningTime::db_coefD + 1;
+const int pylith::friction::SlipWeakeningTime::db_cohesion =
+  pylith::friction::SlipWeakeningTime::db_d0 + 1;
+const int pylith::friction::SlipWeakeningTime::db_weaktime =
+  pylith::friction::SlipWeakeningTime::db_cohesion + 1;
+
+// Indices of state variables.
+const int pylith::friction::SlipWeakeningTime::s_slipCum = 0;
+const int pylith::friction::SlipWeakeningTime::s_slipPrev = 
+  pylith::friction::SlipWeakeningTime::s_slipCum + 1;
+
+// Indices of database values (order must match dbProperties)
+const int pylith::friction::SlipWeakeningTime::db_slipCum = 0;
+const int pylith::friction::SlipWeakeningTime::db_slipPrev = 
+  pylith::friction::SlipWeakeningTime::db_slipCum + 1;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::friction::SlipWeakeningTime::SlipWeakeningTime(void) :
+  FrictionModel(materials::Metadata(_SlipWeakeningTime::properties,
+				    _SlipWeakeningTime::numProperties,
+				    _SlipWeakeningTime::dbProperties,
+				    _SlipWeakeningTime::numDBProperties,
+				    _SlipWeakeningTime::stateVars,
+				    _SlipWeakeningTime::numStateVars,
+				    _SlipWeakeningTime::dbStateVars,
+				    _SlipWeakeningTime::numDBStateVars))
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::friction::SlipWeakeningTime::~SlipWeakeningTime(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Compute properties from values in spatial database.
+void
+pylith::friction::SlipWeakeningTime::_dbToProperties(
+					   PylithScalar* const propValues,
+					   const scalar_array& dbValues) const
+{ // _dbToProperties
+  assert(propValues);
+  const int numDBValues = dbValues.size();
+  assert(_SlipWeakeningTime::numDBProperties == numDBValues);
+
+  const PylithScalar db_static = dbValues[db_coefS];
+  const PylithScalar db_dynamic = dbValues[db_coefD];
+  const PylithScalar db_do = dbValues[db_d0];
+  const PylithScalar db_c = dbValues[db_cohesion];
+  const PylithScalar db_t = dbValues[db_weaktime];
+
+  if (db_static < 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned negative value for static coefficient "
+	<< "of friction.\n"
+	<< "static coefficient of friction: " << db_static << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_dynamic < 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned negative value for dynamic coefficient "
+	<< "of friction.\n"
+	<< "dynamic coefficient of friction: " << db_dynamic << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_d0 <= 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned nonpositive value for slip weakening parameter "
+	<< "of friction.\n"
+	<< "slip weakening parameter of friction: " << db_d0 << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_t < 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned negative value for weakening time "
+	<< "of friction.\n"
+	<< "weakening time of friction: " << db_t << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  propValues[p_coefS] = db_static;
+  propValues[p_coefD] = db_dynamic;
+  propValues[p_d0] = db_do;
+  propValues[p_cohesion] = db_c;
+  propValues[p_weaktime] = db_t;
+
+} // _dbToProperties
+
+// ----------------------------------------------------------------------
+// Nondimensionalize properties.
+void
+pylith::friction::SlipWeakeningTime::_nondimProperties(PylithScalar* const values,
+						    const int nvalues) const
+{ // _nondimProperties
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTime::numProperties);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+
+  values[p_d0] /= lengthScale;
+  values[p_cohesion] /= pressureScale;
+  values[p_weaktime] /= timeScale;
+} // _nondimProperties
+
+// ----------------------------------------------------------------------
+// Dimensionalize properties.
+void
+pylith::friction::SlipWeakeningTime::_dimProperties(PylithScalar* const values,
+						      const int nvalues) const
+{ // _dimProperties
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTime::numProperties);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+
+  values[p_d0] *= lengthScale;
+  values[p_cohesion] *= pressureScale;
+  values[p_weaktime] *= timeScale;
+} // _dimProperties
+
+// ----------------------------------------------------------------------
+// Compute state variables from values in spatial database.
+void
+pylith::friction::SlipWeakeningTime::_dbToStateVars(
+					   PylithScalar* const stateValues,
+					   const scalar_array& dbValues) const
+{ // _dbToStateVars
+  assert(stateValues);
+  const int numDBValues = dbValues.size();
+  assert(_SlipWeakeningTime::numDBStateVars == numDBValues);
+
+  const PylithScalar cumulativeSlip = dbValues[db_slipCum];
+  const PylithScalar previousSlip = dbValues[db_slipPrev];
+ 
+  stateValues[s_slipCum] = cumulativeSlip;
+  stateValues[s_slipPrev] = previousSlip;
+} // _dbToStateVars
+
+// ----------------------------------------------------------------------
+// Nondimensionalize state variables.
+void
+pylith::friction::SlipWeakeningTime::_nondimStateVars(PylithScalar* const values,
+						  const int nvalues) const
+{ // _nondimStateVars
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTime::numStateVars);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+
+  values[s_slipCum] /= lengthScale;
+  values[s_slipPrev] /= lengthScale;
+} // _nondimStateVars
+
+// ----------------------------------------------------------------------
+// Dimensionalize state variables.
+void
+pylith::friction::SlipWeakeningTime::_dimStateVars(PylithScalar* const values,
+					       const int nvalues) const
+{ // _dimStateVars
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTime::numStateVars);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+
+  values[s_slipCum] *= lengthScale;
+  values[s_slipPrev] *= lengthScale;
+} // _dimStateVars
+
+// ----------------------------------------------------------------------
+// Compute friction from properties and state variables.
+PylithScalar
+pylith::friction::SlipWeakeningTime::_calcFriction(const PylithScalar t,
+						   const PylithScalar slip,
+						   const PylithScalar slipRate,
+						   const PylithScalar normalTraction,
+						   const PylithScalar* properties,
+						   const int numProperties,
+						   const PylithScalar* stateVars,
+						   const int numStateVars)
+{ // _calcFriction
+  assert(properties);
+  assert(_SlipWeakeningTime::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakeningTime::numStateVars == numStateVars);
+
+  PylithScalar friction = 0.0;
+  PylithScalar mu_f = 0.0;
+  if (normalTraction <= 0.0) {
+    // if fault is in compression
+    if (stateVars[s_slipCum] < properties[p_d0] &&
+	t < properties[p_weaktime]) {
+	// if/else linear slip-weakening form of mu_f 
+	mu_f = properties[p_coefS] -
+	  (properties[p_coefS] - properties[p_coefD]) * 
+	  stateVars[s_slipCum] / properties[p_d0];
+      } else {
+	mu_f = properties[p_coefD];
+      } // if/else
+    friction = - mu_f * normalTraction + properties[p_cohesion];
+  } // if
+
+  PetscLogFlops(6);
+
+  return friction;
+} // _calcFriction
+
+// ----------------------------------------------------------------------
+// Update state variables (for next time step).
+void
+pylith::friction::SlipWeakeningTime::_updateStateVars(const PylithScalar t,
+						      const PylithScalar slip,
+						      const PylithScalar slipRate,
+						      const PylithScalar normalTraction,
+						      PylithScalar* const stateVars,
+						      const int numStateVars,
+						      const PylithScalar* properties,
+						      const int numProperties)
+{ // _updateStateVars
+  assert(properties);
+  assert(_SlipWeakeningTime::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakeningTime::numStateVars == numStateVars);
+
+  const PylithScalar tolerance = 1.0e-12;
+  if (slipRate > tolerance) {
+    const PylithScalar slipPrev = stateVars[s_slipPrev];
+
+    stateVars[s_slipPrev] = stateVars[s_slipCum];
+    stateVars[s_slipCum] += fabs(slip - slipPrev);
+  } else {
+    // Sliding has stopped, so reset state variables.
+    stateVars[s_slipPrev] = slip;
+    stateVars[s_slipCum] = 0.0;
+  } // else
+} // _updateStateVars
+
+
+// End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.hh (from rev 19390, short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningTime.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,182 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/friction/SlipWeakeningTime.hh
+ *
+ * @brief C++ slip weakening fault constitutive model.
+ */
+
+#if !defined(pylith_friction_slipweakeningtime_hh)
+#define pylith_friction_slipweakeningtime_hh
+
+// Include directives ---------------------------------------------------
+#include "FrictionModel.hh" // ISA FrictionModel
+
+// SlipWeakeningTime -------------------------------------------------------
+/** @brief C++ slip weakening fault constitutive model.
+ *
+ * Friction is equal to the product of a coefficient of friction (function
+ * of slip path length) and the normal traction.
+ */
+
+class pylith::friction::SlipWeakeningTime : public FrictionModel
+{ // class SlipWeakeningTime
+  friend class TestSlipWeakeningTime; // unit testing
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  SlipWeakeningTime(void);
+
+  /// Destructor.
+  ~SlipWeakeningTime(void);
+
+  // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+  /// These methods should be implemented by every constitutive model.
+
+  /** Compute properties from values in spatial database.
+   *
+   * @param propValues Array of property values.
+   * @param dbValues Array of database values.
+   */
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) const;
+
+  /** Nondimensionalize properties.
+   *
+   * @param values Array of property values.
+   * @param nvalues Number of values.
+   */
+  void _nondimProperties(PylithScalar* const values,
+			 const int nvalues) const;
+
+  /** Dimensionalize properties.
+   *
+   * @param values Array of property values.
+   * @param nvalues Number of values.
+   */
+  void _dimProperties(PylithScalar* const values,
+		      const int nvalues) const;
+
+  /** Compute friction from properties and state variables.
+   *
+   * @param slip Current slip at location.
+   * @param slipRate Current slip rate at location.
+   * @param normalTraction Normal traction at location.
+   * @param properties Properties at location.
+   * @param numProperties Number of properties.
+   * @param stateVars State variables at location.
+   * @param numStateVars Number of state variables.
+   */
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues) const;
+
+  /** Nondimensionalize state variables.
+   *
+   * @param values Array of initial state values.
+   * @param nvalues Number of values.
+   */
+  void _nondimStateVars(PylithScalar* const values,
+			   const int nvalues) const;
+  
+  /** Dimensionalize state variables.
+   *
+   * @param values Array of initial state values.
+   * @param nvalues Number of values.
+   */
+  void _dimStateVars(PylithScalar* const values,
+			const int nvalues) const;
+
+  /** Compute friction from properties and state variables.
+   *
+   * @param t Time in simulation.
+   * @param slip Current slip at location.
+   * @param slipRate Current slip rate at location.
+   * @param normalTraction Normal traction at location.
+   * @param properties Properties at location.
+   * @param numProperties Number of properties.
+   * @param stateVars State variables at location.
+   * @param numStateVars Number of state variables.
+   */
+  PylithScalar _calcFriction(const PylithScalar t,
+			     const PylithScalar slip,
+			     const PylithScalar slipRate,
+			     const PylithScalar normalTraction,
+			     const PylithScalar* properties,
+			     const int numProperties,
+			     const PylithScalar* stateVars,
+			     const int numStateVars);
+
+  /** Update state variables (for next time step).
+   *
+   * @param t Time in simulation.
+   * @param slip Current slip at location.
+   * @param slipRate Current slip rate at location.
+   * @param normalTraction Normal traction at location.
+   * @param stateVars State variables at location.
+   * @param numStateVars Number of state variables.
+   * @param properties Properties at location.
+   * @param numProperties Number of properties.
+   */
+  void _updateStateVars(const PylithScalar t,
+			const PylithScalar slip,
+			const PylithScalar slipRate,
+			const PylithScalar normalTraction,
+			PylithScalar* const stateVars,
+			const int numStateVars,
+			const PylithScalar* properties,
+			const int numProperties);
+
+  // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+  /// Indices for properties in section and spatial database.
+  static const int p_coefS;
+  static const int p_coefD;
+  static const int p_d0;
+  static const int p_cohesion;
+  static const int p_weaktime;
+
+  static const int db_coefS;
+  static const int db_coefD;
+  static const int db_d0;
+  static const int db_cohesion;
+  static const int db_weaktime;
+
+  /// Indices for state variables in section and spatial database.
+  static const int s_slipCum;
+  static const int s_slipPrev;
+
+  static const int db_slipCum;
+  static const int db_slipPrev;
+
+  // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+  SlipWeakeningTime(const SlipWeakeningTime&); ///< Not implemented.
+  const SlipWeakeningTime& operator=(const SlipWeakeningTime&); ///< Not implemented
+
+}; // class SlipWeakeningTime
+
+#endif // pylith_friction_slipweakeningtime_hh
+
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -144,7 +144,8 @@
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
 PylithScalar
-pylith::friction::StaticFriction::_calcFriction(const PylithScalar slip,
+pylith::friction::StaticFriction::_calcFriction(const PylithScalar t,
+						const PylithScalar slip,
 						const PylithScalar slipRate,
 						const PylithScalar normalTraction,
 						const PylithScalar* properties,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -78,6 +78,7 @@
 
   /** Compute friction from properties and state variables.
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -86,13 +87,14 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  PylithScalar _calcFriction(const PylithScalar slip,
-		       const PylithScalar slipRate,
-		       const PylithScalar normalTraction,
-		       const PylithScalar* properties,
-		       const int numProperties,
-		       const PylithScalar* stateVars,
-		       const int numStateVars);
+  PylithScalar _calcFriction(const PylithScalar t,
+			     const PylithScalar slip,
+			     const PylithScalar slipRate,
+			     const PylithScalar normalTraction,
+			     const PylithScalar* properties,
+			     const int numProperties,
+			     const PylithScalar* stateVars,
+			     const int numStateVars);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -247,13 +247,14 @@
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
 PylithScalar
-pylith::friction::TimeWeakening::_calcFriction(const PylithScalar slip,
-						const PylithScalar slipRate,
-						const PylithScalar normalTraction,
-						const PylithScalar* properties,
-						const int numProperties,
-						const PylithScalar* stateVars,
-						const int numStateVars)
+pylith::friction::TimeWeakening::_calcFriction(const PylithScalar t,
+					       const PylithScalar slip,
+					       const PylithScalar slipRate,
+					       const PylithScalar normalTraction,
+					       const PylithScalar* properties,
+					       const int numProperties,
+					       const PylithScalar* stateVars,
+					       const int numStateVars)
 { // _calcFriction
   assert(properties);
   assert(_TimeWeakening::numProperties == numProperties);
@@ -285,7 +286,8 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::TimeWeakening::_updateStateVars(const PylithScalar slip,
+pylith::friction::TimeWeakening::_updateStateVars(const PylithScalar t,
+						  const PylithScalar slip,
 						  const PylithScalar slipRate,
 						  const PylithScalar normalTraction,
 						  PylithScalar* const stateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -107,6 +107,7 @@
 
   /** Compute friction from properties and state variables.
    *
+   * @param t Time in simulation.
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
@@ -115,14 +116,15 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  PylithScalar _calcFriction(const PylithScalar slip,
-		       const PylithScalar slipRate,
-		       const PylithScalar normalTraction,
-		       const PylithScalar* properties,
-		       const int numProperties,
-		       const PylithScalar* stateVars,
-		       const int numStateVars);
-
+  PylithScalar _calcFriction(const PylithScalar t,
+			     const PylithScalar slip,
+			     const PylithScalar slipRate,
+			     const PylithScalar normalTraction,
+			     const PylithScalar* properties,
+			     const int numProperties,
+			     const PylithScalar* stateVars,
+			     const int numStateVars);
+  
   /** Update state variables (for next time step).
    *
    * @param slip Current slip at location.
@@ -133,13 +135,14 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _updateStateVars(const PylithScalar slip,
-      const PylithScalar slipRate,
-      const PylithScalar normalTraction,
-      PylithScalar* const stateVars,
-      const int numStateVars,
-      const PylithScalar* properties,
-      const int numProperties);
+  void _updateStateVars(const PylithScalar t,
+			const PylithScalar slip,
+			const PylithScalar slipRate,
+			const PylithScalar normalTraction,
+			PylithScalar* const stateVars,
+			const int numStateVars,
+			const PylithScalar* properties,
+			const int numProperties);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -33,11 +33,9 @@
     class FrictionModel;
 
     class StaticFriction;
-
     class SlipWeakening;
-    
+    class SlipWeakeningTime;
     class RateStateAgeing;
-
     class TimeWeakening;
 
   } // friction

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -415,11 +415,11 @@
 
   int numIntegrators = _meshIntegrators.size();
   for (int i=0; i < numIntegrators; ++i)
-    _meshIntegrators[i]->adjustSolnLumped(_fields, *_jacobianLumped);
+    _meshIntegrators[i]->adjustSolnLumped(_fields, _t, *_jacobianLumped);
 
   numIntegrators = _submeshIntegrators.size();
   for (int i=0; i < numIntegrators; ++i)
-    _submeshIntegrators[i]->adjustSolnLumped(_fields, *_jacobianLumped);
+    _submeshIntegrators[i]->adjustSolnLumped(_fields, _t, *_jacobianLumped);
 
   adjust.complete();
   solution += adjust;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -51,7 +51,7 @@
 _bcmodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if ENABLE_CUBIT
   _bcmodule_la_LIBADD += -lnetcdf_c++ -lnetcdf
 endif

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -108,9 +108,11 @@
        *  multiplier constraints.
        *
        * @param fields Solution fields.
+       * @param t Current time.
        * @param jacobian Jacobian of the system.
        */
       void adjustSolnLumped(pylith::topology::SolutionFields* fields,
+			    const PylithScalar t,
 			    const pylith::topology::Field<pylith::topology::Mesh>& jacobian);
 
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -98,10 +98,12 @@
        *  multiplier constraints.
        *
        * @param fields Solution fields
+       * @param t Current time.
        * @param jacobian Jacobian of the system.
        */
       virtual
       void adjustSolnLumped(pylith::topology::SolutionFields* fields,
+			    const PylithScalar t,
 			    const pylith::topology::Field<pylith::topology::Mesh>& jacobian);
 
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -54,7 +54,7 @@
 _faultsmodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if ENABLE_CUBIT
   _faultsmodule_la_LIBADD += -lnetcdf_c++ -lnetcdf
 endif

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -63,7 +63,7 @@
 _feassemblemodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if ENABLE_CUBIT
   _feassemblemodule_la_LIBADD += -lnetcdf_c++ -lnetcdf
 endif

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -136,15 +136,17 @@
        * @pre Must call retrievePropsAndVars for cell before calling
        * calcFriction().
        *
+       * @param t Current time.
        * @param slip Current slip at location.
        * @param slipRate Current slip rate at location.
        * @param normalTraction Normal traction at location.
        *
        * @returns Friction (magnitude of shear traction) at vertex.
        */
-      PylithScalar calcFriction(const PylithScalar slip,
-			  const PylithScalar slipRate,
-			  const PylithScalar normalTraction);
+      PylithScalar calcFriction(const PylithScalar t,
+				const PylithScalar slip,
+				const PylithScalar slipRate,
+				const PylithScalar normalTraction);
   
 
       /** Compute friction at vertex.
@@ -152,12 +154,14 @@
        * @pre Must call retrievePropsAndVars for cell before calling
        * calcFriction().
        *
+       * @param t Current time.
        * @param slip Current slip at location.
        * @param slipRate Current slip rate at location.
        * @param normalTraction Normal traction at location.
        * @param vertex Finite-element vertex on friction interface.
        */
-      void updateStateVars(const PylithScalar slip,
+      void updateStateVars(const PylithScalar t,
+			   const PylithScalar slip,
 			   const PylithScalar slipRate,
 			   const PylithScalar normalTraction,
 			   const int vertex);
@@ -223,6 +227,7 @@
 
       /** Compute friction from properties and state variables.
        *
+       * @param t Current time.
        * @param slip Current slip at location.
        * @param slipRate Current slip rate at location.
        * @param normalTraction Normal traction at location.
@@ -232,23 +237,26 @@
        * @param numStateVars Number of state variables.
        */
       virtual
-      PylithScalar _calcFriction(const PylithScalar slip,
-			   const PylithScalar slipRate,
-			   const PylithScalar normalTraction,
-			   const PylithScalar* properties,
-			   const int numProperties,
-			   const PylithScalar* stateVars,
-			   const int numStateVars) = 0;
+      PylithScalar _calcFriction(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction,
+				 const PylithScalar* properties,
+				 const int numProperties,
+				 const PylithScalar* stateVars,
+				 const int numStateVars) = 0;
 
       /** Update state variables (for next time step).
        *
+       * @param t Current time.
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
       virtual
-      void _updateStateVars(const PylithScalar slip,
+      void _updateStateVars(const PylithScalar t,
+			    const PylithScalar slip,
 			    const PylithScalar slipRate,
 			    PylithScalar* const stateVars,
 			    const int numStateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -28,6 +28,7 @@
 	FrictionModel.i \
 	StaticFriction.i \
 	SlipWeakening.i \
+	SlipWeakeningTime.i \
 	RateStateAgeing.i \
 	TimeWeakening.i
 
@@ -47,7 +48,7 @@
 _frictionmodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if ENABLE_CUBIT
   _frictionmodule_la_LIBADD += -lnetcdf_c++ -lnetcdf
 endif

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -72,6 +72,7 @@
 
       /** Compute friction from properties and state variables.
        *
+       * @param t Current time.
        * @param slip Current slip at location.
        * @param slipRate Current slip rate at location.
        * @param normalTraction Normal traction at location.
@@ -80,13 +81,14 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      PylithScalar _calcFriction(const PylithScalar slip,
-			   const PylithScalar slipRate,
-			   const PylithScalar normalTraction,
-			   const PylithScalar* properties,
-			   const int numProperties,
-			   const PylithScalar* stateVars,
-			   const int numStateVars);
+      PylithScalar _calcFriction(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction,
+				 const PylithScalar* properties,
+				 const int numProperties,
+				 const PylithScalar* stateVars,
+				 const int numStateVars);
 
     }; // class RateStateAgeing
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -65,6 +65,7 @@
 
       /** Compute friction from properties and state variables.
        *
+       * @param t Current time.
        * @param slip Current slip at location.
        * @param slipRate Current slip rate at location.
        * @param normalTraction Normal traction at location.
@@ -73,13 +74,14 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      PylithScalar _calcFriction(const PylithScalar slip,
-			   const PylithScalar slipRate,
-			   const PylithScalar normalTraction,
-			   const PylithScalar* properties,
-			   const int numProperties,
-			   const PylithScalar* stateVars,
-			   const int numStateVars);
+      PylithScalar _calcFriction(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction,
+				 const PylithScalar* properties,
+				 const int numProperties,
+				 const PylithScalar* stateVars,
+				 const int numStateVars);
 
     }; // class SlipWeakening
 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningTime.i (from rev 19390, short/3D/PyLith/trunk/modulesrc/friction/SlipWeakeningTime.i)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningTime.i	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningTime.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file modulesrc/friction/SlipWeakeningTime.i
+ *
+ * Python interface to C++ SlipWeakeningTime object.
+ */
+
+namespace pylith {
+  namespace friction {
+
+    class SlipWeakeningTime : public FrictionModel
+    { // class SlipWeakeningTime
+
+      // PUBLIC METHODS /////////////////////////////////////////////////
+    public :
+
+      /// Default constructor.
+      SlipWeakeningTime(void);
+
+      /// Destructor.
+      ~SlipWeakeningTime(void);
+
+      // PROTECTED METHODS //////////////////////////////////////////////
+    protected :
+
+      /** Compute properties from values in spatial database.
+       *
+       * @param propValues Array of property values.
+       * @param dbValues Array of database values.
+       */
+      void _dbToProperties(PylithScalar* const propValues,
+			   const scalar_array& dbValues) const;
+
+      /** Nondimensionalize properties.
+       *
+       * @param values Array of property values.
+       * @param nvalues Number of values.
+       */
+      void _nondimProperties(PylithScalar* const values,
+			     const int nvalues) const;
+
+      /** Dimensionalize properties.
+       *
+       * @param values Array of property values.
+       * @param nvalues Number of values.
+       */
+      void _dimProperties(PylithScalar* const values,
+			  const int nvalues) const;
+
+      /** Compute friction from properties and state variables.
+       *
+       * @param t Current time.
+       * @param slip Current slip at location.
+       * @param slipRate Current slip rate at location.
+       * @param normalTraction Normal traction at location.
+       * @param properties Properties at location.
+       * @param numProperties Number of properties.
+       * @param stateVars State variables at location.
+       * @param numStateVars Number of state variables.
+       */
+      PylithScalar _calcFriction(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction,
+				 const PylithScalar* properties,
+				 const int numProperties,
+				 const PylithScalar* stateVars,
+				 const int numStateVars);
+
+    }; // class SlipWeakeningTime
+
+  } // friction
+} // pylith
+
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -65,6 +65,7 @@
 
       /** Compute friction from properties and state variables.
        *
+       * @param t Current time.
        * @param slip Current slip at location.
        * @param slipRate Current slip rate at location.
        * @param normalTraction Normal traction at location.
@@ -73,13 +74,14 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      PylithScalar _calcFriction(const PylithScalar slip,
-			   const PylithScalar slipRate,
-			   const PylithScalar normalTraction,
-			   const PylithScalar* properties,
-			   const int numProperties,
-			   const PylithScalar* stateVars,
-			   const int numStateVars);
+      PylithScalar _calcFriction(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction,
+				 const PylithScalar* properties,
+				 const int numProperties,
+				 const PylithScalar* stateVars,
+				 const int numStateVars);
 
     }; // class StaticFriction
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -65,6 +65,7 @@
 
       /** Compute friction from properties and state variables.
        *
+       * @param t Current time.
        * @param slip Current slip at location.
        * @param slipRate Current slip rate at location.
        * @param normalTraction Normal traction at location.
@@ -73,13 +74,14 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      PylithScalar _calcFriction(const PylithScalar slip,
-			   const PylithScalar slipRate,
-			   const PylithScalar normalTraction,
-			   const PylithScalar* properties,
-			   const int numProperties,
-			   const PylithScalar* stateVars,
-			   const int numStateVars);
+      PylithScalar _calcFriction(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction,
+				 const PylithScalar* properties,
+				 const int numProperties,
+				 const PylithScalar* stateVars,
+				 const int numStateVars);
 
     }; // class TimeWeakening
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i	2012-01-20 16:15:29 UTC (rev 19399)
@@ -29,6 +29,7 @@
 #include "pylith/friction/FrictionModel.hh"
 #include "pylith/friction/StaticFriction.hh"
 #include "pylith/friction/SlipWeakening.hh"
+#include "pylith/friction/SlipWeakeningTime.hh"
 #include "pylith/friction/RateStateAgeing.hh"
 #include "pylith/friction/TimeWeakening.hh"
 
@@ -64,6 +65,7 @@
 %include "FrictionModel.i"
 %include "StaticFriction.i"
 %include "SlipWeakening.i"
+%include "SlipWeakeningTime.i"
 %include "RateStateAgeing.i"
 %include "TimeWeakening.i"
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -57,7 +57,7 @@
 _materialsmodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if ENABLE_CUBIT
   _materialsmodule_la_LIBADD += -lnetcdf_c++ -lnetcdf
 endif

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -51,7 +51,7 @@
 _meshiomodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if ENABLE_CUBIT
   _meshiomodule_la_LIBADD += -lnetcdf_c++ -lnetcdf
 endif

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -40,7 +40,7 @@
 _mpimodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if NO_UNDEFINED
 _mpimodule_la_LIBADD += \
 	$(PYTHON_BLDLIBRARY) $(PYTHON_LIBS) $(PYTHON_SYSLIBS)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -46,7 +46,7 @@
 _problemsmodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if ENABLE_CUBIT
   _problemsmodule_la_LIBADD += -lnetcdf_c++ -lnetcdf
 endif

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -50,7 +50,7 @@
 _topologymodule_la_LIBADD = \
 	$(top_builddir)/libsrc/pylith/libpylith.la \
 	-lspatialdata \
-	$(PETSC_LIBS)
+	$(PETSC_LIB)
 if NO_UNDEFINED
 _topologymodule_la_LIBADD += \
 	$(PYTHON_BLDLIBRARY) $(PYTHON_LIBS) $(PYTHON_SYSLIBS)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -67,6 +67,7 @@
 	friction/FrictionModel.py \
 	friction/StaticFriction.py \
 	friction/SlipWeakening.py \
+	friction/SlipWeakeningTime.py \
 	friction/RateStateAgeing.py \
 	friction/TimeWeakening.py \
 	materials/__init__.py \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py	2012-01-20 16:15:29 UTC (rev 19399)
@@ -76,7 +76,7 @@
          'cell': \
            {'info': [],
             'data': []}}
-    self._loggingPrefix = "FrStat "
+    self._loggingPrefix = "FrRSA "
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakening.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakening.py	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakening.py	2012-01-20 16:15:29 UTC (rev 19399)
@@ -51,7 +51,7 @@
          'cell': \
            {'info': [],
             'data': []}}
-    self._loggingPrefix = "FrStat "
+    self._loggingPrefix = "FrSW "
     return
 
 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningTime.py (from rev 19390, short/3D/PyLith/trunk/pylith/friction/SlipWeakeningTime.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningTime.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningTime.py	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/friction/SlipWeakeningTime.py
+##
+## @brief Python object implementing slip weakening with forced
+## weakening at a give time (sometimes used for nucleation).
+##
+## Factory: friction_model.
+
+from FrictionModel import FrictionModel
+from friction import SlipWeakeningTime as ModuleSlipWeakeningTime
+
+# SlipWeakeningTime class
+class SlipWeakeningTime(FrictionModel, ModuleSlipWeakeningTime):
+  """
+  Python object implementing Slip Weakening.
+
+  Factory: friction_model.
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="slipweakening"):
+    """
+    Constructor.
+    """
+    FrictionModel.__init__(self, name)
+    self.availableFields = \
+        {'vertex': \
+           {'info': ["static_coefficient",
+                     "dynamic_coefficient",
+                     "slip_weakening_parameter",
+                     "cohesion",
+                     "weakening_time"],
+            'data': ["cumulative_slip",
+                     "previous_slip"]},
+         'cell': \
+           {'info': [],
+            'data': []}}
+    self._loggingPrefix = "FrSWT "
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _createModuleObj(self):
+    """
+    Call constructor for module object for access to C++ object.
+    """
+    ModuleSlipWeakeningTime.__init__(self)
+    return
+  
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def friction_model():
+  """
+  Factory associated with SlipWeakeningTime.
+  """
+  return SlipWeakeningTime()
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/__init__.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/__init__.py	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/__init__.py	2012-01-20 16:15:29 UTC (rev 19399)
@@ -23,6 +23,7 @@
 __all__ = ['FrictionModel',
            'StaticFriction',
            'SlipWeakening',
+           'SlipWeakeningTime',
            'RateStateAgeing',
            'TimeWeakening',
            ]

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -597,7 +597,7 @@
   jacobian.complete();
 
   topology::Field<topology::Mesh>& solution = fields.get("dispIncr(t->t+dt)");
-  fault.adjustSolnLumped(&fields, jacobian);
+  fault.adjustSolnLumped(&fields, t, jacobian);
   const topology::Field<topology::Mesh>& dispIncrAdj = 
     fields.get("dispIncr adjust");
   solution += dispIncrAdj;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am	2012-01-20 16:15:29 UTC (rev 19399)
@@ -31,6 +31,7 @@
 	TestFrictionModel.cc \
 	TestStaticFriction.cc \
 	TestSlipWeakening.cc \
+	TestSlipWeakeningTime.cc \
 	TestRateStateAgeing.cc \
 	TestTimeWeakening.cc
 
@@ -39,6 +40,7 @@
 	TestFrictionModel.hh \
 	TestStaticFriction.hh \
 	TestSlipWeakening.hh \
+	TestSlipWeakeningTime.hh \
 	TestRateStateAgeing.hh \
 	TestTimeWeakening.hh
 
@@ -47,6 +49,7 @@
 	data/FrictionModelData.cc \
 	data/StaticFrictionData.cc \
 	data/SlipWeakeningData.cc \
+	data/SlipWeakeningTimeData.cc \
 	data/RateStateAgeingData.cc \
 	data/TimeWeakeningData.cc
 
@@ -55,6 +58,7 @@
 	data/FrictionModelData.hh \
 	data/StaticFrictionData.hh \
 	data/SlipWeakeningData.hh \
+	data/SlipWeakeningTimeData.hh \
 	data/RateStateAgeingData.hh \
 	data/TimeWeakeningData.hh
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -277,6 +277,7 @@
 void
 pylith::friction::TestFrictionModel::testCalcFriction(void)
 { // testCalcFriction
+  const PylithScalar t = 1.5;
   const PylithScalar slip = 1.2;
   const PylithScalar slipRate = -2.3;
   const PylithScalar normalTraction = -2.4;
@@ -293,7 +294,8 @@
 
   friction.timeStep(data.dt);
   friction.retrievePropsStateVars(vertex);
-  const PylithScalar frictionV = friction.calcFriction(slip, slipRate, normalTraction);
+  const PylithScalar frictionV = 
+    friction.calcFriction(t, slip, slipRate, normalTraction);
 
   const PylithScalar tolerance = 1.0e-6;
   if (0.0 != frictionE)
@@ -314,6 +316,7 @@
     StaticFrictionData data;
     _initialize(&mesh, &fault, &friction, &data);
     
+    const PylithScalar t = 1.5;
     const PylithScalar slip = 1.2;
     const PylithScalar slipRate = -2.3;
     const PylithScalar normalTraction = -2.4;
@@ -322,7 +325,7 @@
     
     friction.timeStep(data.dt);
     friction.retrievePropsStateVars(vertex);
-    friction.updateStateVars(slip, slipRate, normalTraction, vertex);
+    friction.updateStateVars(t, slip, slipRate, normalTraction, vertex);
     
     // no outcome to test
   } // Test with friction model without state variables
@@ -349,6 +352,7 @@
     fault.initialize(mesh, upDir);
     const int vertex = 2;
 
+    const PylithScalar t = 1.5;
     const PylithScalar slip = 0.25;
     const PylithScalar slipRate = 0.64;
     const PylithScalar normalTraction = -2.3;
@@ -367,7 +371,7 @@
       friction._propsStateVarsVertex[friction._propsFiberDim+i] = stateVars[i];
 
     friction.timeStep(dt);
-    friction.updateStateVars(slip, slipRate, normalTraction, vertex);
+    friction.updateStateVars(t, slip, slipRate, normalTraction, vertex);
     
     const PylithScalar tolerance = 1.0e-06;
     CPPUNIT_ASSERT(0 != friction._fieldsPropsStateVars);
@@ -657,15 +661,16 @@
       properties[i] = _data->properties[iLoc*numPropsVertex+i];
     for (int i=0; i < numVarsVertex; ++i)
       stateVars[i] = _data->stateVars[iLoc*numVarsVertex+i];
+    const PylithScalar t = 1.5;
     const PylithScalar slip = _data->slip[iLoc];
     const PylithScalar slipRate = _data->slipRate[iLoc];
     const PylithScalar normalTraction = _data->normalTraction[iLoc];
 
     _friction->timeStep(_data->dt);
-    const PylithScalar friction = _friction->_calcFriction(
-					slip, slipRate, normalTraction,
-					&properties[0], properties.size(),
-					&stateVars[0], stateVars.size());
+    const PylithScalar friction = 
+      _friction->_calcFriction(t, slip, slipRate, normalTraction,
+			       &properties[0], properties.size(),
+			       &stateVars[0], stateVars.size());
 
 #if !defined(NO_FAULT_OPENING)
     const PylithScalar frictionE = _data->friction[iLoc];
@@ -702,6 +707,7 @@
   scalar_array stateVars(numVarsVertex);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    const PylithScalar t = 1.5;
     const PylithScalar slip = _data->slip[iLoc];
     const PylithScalar slipRate = _data->slipRate[iLoc];
     const PylithScalar normalTraction = _data->normalTraction[iLoc];
@@ -711,7 +717,7 @@
       stateVars[i] = _data->stateVars[iLoc*numVarsVertex+i];
 
     _friction->timeStep(_data->dt);
-    _friction->_updateStateVars(slip, slipRate, normalTraction,
+    _friction->_updateStateVars(t, slip, slipRate, normalTraction,
 				&stateVars[0], stateVars.size(),
 				&properties[0], properties.size());
     

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -24,8 +24,8 @@
  * C++ unit testing for RateStateAgeing.
  */
 
-#if !defined(pylith_friction_testelasticisotropic3d_hh)
-#define pylith_friction_testelasticisotropic3d_hh
+#if !defined(pylith_friction_testslipweakeningtime_hh)
+#define pylith_friction_testslipweakeningtime_hh
 
 #include "TestFrictionModel.hh"
 
@@ -78,7 +78,7 @@
 
 }; // class TestRateStateAgeing
 
-#endif // pylith_friction_testelasticisotropic3d_hh
+#endif // pylith_friction_testslipweakeningtime_hh
 
 
 // End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakening.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakening.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakening.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -24,8 +24,8 @@
  * C++ unit testing for SlipWeakening.
  */
 
-#if !defined(pylith_friction_testelasticisotropic3d_hh)
-#define pylith_friction_testelasticisotropic3d_hh
+#if !defined(pylith_friction_testslipweakening_hh)
+#define pylith_friction_testslipweakening_hh
 
 #include "TestFrictionModel.hh"
 
@@ -74,7 +74,7 @@
 
 }; // class TestSlipWeakening
 
-#endif // pylith_friction_testelasticisotropic3d_hh
+#endif // pylith_friction_testslipweakening_hh
 
 
 // End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.cc (from rev 19390, short/3D/PyLith/trunk/unittests/libtests/friction/TestSlipWeakeningTime.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,94 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestSlipWeakeningTime.hh" // Implementation of class methods
+
+#include "data/SlipWeakeningTimeData.hh" // USES SlipWeakeningTimeData
+
+#include "pylith/friction/SlipWeakeningTime.hh" // USES SlipWeakeningTime
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::friction::TestSlipWeakeningTime );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::friction::TestSlipWeakeningTime::setUp(void)
+{ // setUp
+  _friction = new SlipWeakeningTime();
+  _data = new SlipWeakeningTimeData();
+  setupNormalizer();
+} // setUp
+
+// ----------------------------------------------------------------------
+// Test properties metadata.
+void
+pylith::friction::TestSlipWeakeningTime::testPropertiesMetadata(void)
+{ // testPropertiesMetadata
+  SlipWeakeningTime model;
+
+  CPPUNIT_ASSERT_EQUAL(5, model._metadata.numDBProperties());
+  const char* const* names = model._metadata.dbProperties();
+  CPPUNIT_ASSERT_EQUAL(std::string("static-coefficient"), 
+		       std::string(names[0]));
+  CPPUNIT_ASSERT_EQUAL(std::string("dynamic-coefficient"), 
+		       std::string(names[1]));
+  CPPUNIT_ASSERT_EQUAL(std::string("slip-weakening-parameter"), 
+		       std::string(names[2]));
+  CPPUNIT_ASSERT_EQUAL(std::string("cohesion"),
+		       std::string(names[3]));
+  CPPUNIT_ASSERT_EQUAL(std::string("weakening-time"),
+		       std::string(names[4]));
+} // testPropertiesMetadata
+
+// ----------------------------------------------------------------------
+// Test state variable metadata.
+void
+pylith::friction::TestSlipWeakeningTime::testStateVarsMetadata(void)
+{ // testStateVarsMetadata
+  SlipWeakeningTime model;
+
+  CPPUNIT_ASSERT_EQUAL(2, model._metadata.numDBStateVars());
+  const char* const* names = model._metadata.dbStateVars();
+  CPPUNIT_ASSERT_EQUAL(std::string("cumulative-slip"), 
+		       std::string(names[0]));
+  CPPUNIT_ASSERT_EQUAL(std::string("previous-slip"), 
+		       std::string(names[1]));
+} // testStateVarsMetadata
+
+// ----------------------------------------------------------------------
+// Test hasPropStateVar().
+void
+pylith::friction::TestSlipWeakeningTime::testHasPropStateVar(void)
+{ // testHasPropStateVar
+  SlipWeakeningTime material;
+
+  CPPUNIT_ASSERT(material.hasPropStateVar("static_coefficient"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("dynamic_coefficient"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("slip_weakening_parameter"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("cohesion"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("weakening_time"));
+  CPPUNIT_ASSERT(!material.hasPropStateVar("aaa"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("cumulative_slip"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("previous_slip"));
+} // testHasPropStateVar
+
+
+// End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.hh (from rev 19390, short/3D/PyLith/trunk/unittests/libtests/friction/TestSlipWeakeningTime.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningTime.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,80 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/friction/TestSlipWeakeningTime.hh
+ *
+ * @brief C++ TestSlipWeakeningTime object
+ *
+ * C++ unit testing for SlipWeakeningTime.
+ */
+
+#if !defined(pylith_friction_testslipweakeningtime_hh)
+#define pylith_friction_testslipweakeningtime_hh
+
+#include "TestFrictionModel.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace friction {
+    class TestSlipWeakeningTime;
+  } // friction
+} // pylith
+
+/// C++ unit testing for SlipWeakeningTime
+class pylith::friction::TestSlipWeakeningTime : public TestFrictionModel
+{ // class TestSlipWeakeningTime
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestSlipWeakeningTime );
+
+  CPPUNIT_TEST( testPropertiesMetadata );
+  CPPUNIT_TEST( testStateVarsMetadata );
+  CPPUNIT_TEST( testDBToProperties );
+  CPPUNIT_TEST( testNonDimProperties );
+  CPPUNIT_TEST( testDimProperties );
+  CPPUNIT_TEST( testDBToStateVars );
+  CPPUNIT_TEST( testNonDimStateVars );
+  CPPUNIT_TEST( testDimStateVars );
+  CPPUNIT_TEST( testHasPropStateVar );
+  CPPUNIT_TEST( test_calcFriction );
+  CPPUNIT_TEST( test_updateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Test properties metadata.
+  void testPropertiesMetadata(void);
+
+  /// Test state variable metadata.
+  void testStateVarsMetadata(void);
+
+  /// Test hasPropStateVar().
+  void testHasPropStateVar(void);
+
+}; // class TestSlipWeakeningTime
+
+#endif // pylith_friction_testslipweakeningtime_hh
+
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestStaticFriction.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestStaticFriction.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestStaticFriction.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -24,8 +24,8 @@
  * C++ unit testing for StaticFriction.
  */
 
-#if !defined(pylith_friction_testelasticisotropic3d_hh)
-#define pylith_friction_testelasticisotropic3d_hh
+#if !defined(pylith_friction_teststaticfriction_hh)
+#define pylith_friction_teststaticfriction_hh
 
 #include "TestFrictionModel.hh"
 
@@ -74,7 +74,7 @@
 
 }; // class TestStaticFriction
 
-#endif // pylith_friction_testelasticisotropic3d_hh
+#endif // pylith_friction_teststaticfriction_hh
 
 
 // End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestTimeWeakening.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestTimeWeakening.hh	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestTimeWeakening.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -18,8 +18,8 @@
  * C++ unit testing for TimeWeakening.
  */
 
-#if !defined(pylith_friction_testelasticisotropic3d_hh)
-#define pylith_friction_testelasticisotropic3d_hh
+#if !defined(pylith_friction_testtimeweakening_hh)
+#define pylith_friction_testtimeweakening_hh
 
 #include "TestFrictionModel.hh"
 
@@ -68,7 +68,7 @@
 
 }; // class TestTimeWeakening
 
-#endif // pylith_friction_testelasticisotropic3d_hh
+#endif // pylith_friction_testtimeweakening_hh
 
 
 // End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.cc (from rev 19390, short/3D/PyLith/trunk/unittests/libtests/friction/data/SlipWeakeningTimeData.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.cc	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,193 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ======================================================================
+//
+
+#include "SlipWeakeningTimeData.hh"
+
+const int pylith::friction::SlipWeakeningTimeData::_numLocs = 2;
+
+const int pylith::friction::SlipWeakeningTimeData::_numProperties = 5;
+
+const int pylith::friction::SlipWeakeningTimeData::_numStateVars = 2;
+
+const int pylith::friction::SlipWeakeningTimeData::_numDBProperties = 5;
+
+const int pylith::friction::SlipWeakeningTimeData::_numDBStateVars = 2;
+
+const int pylith::friction::SlipWeakeningTimeData::_numPropsVertex = 5;
+
+const int pylith::friction::SlipWeakeningTimeData::_numVarsVertex = 2;
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_lengthScale =   1.00000000e+03;
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_timeScale =   1.00000000e+01;
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_pressureScale =   2.25000000e+10;
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_densityScale =   1.00000000e+03;
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_dt = 0.01;
+
+const int pylith::friction::SlipWeakeningTimeData::_numPropertyValues[] = {
+  1,
+  1,
+  1,
+  1,
+  1,
+};
+
+const int pylith::friction::SlipWeakeningTimeData::_numStateVarValues[] = {
+  1,
+  1,
+};
+
+const char* pylith::friction::SlipWeakeningTimeData::_dbPropertyValues[] = {
+  "static-coefficient",
+  "dynamic-coefficient",
+  "slip-weakening-parameter",
+  "cohesion",
+  "weakening-time",
+};
+
+const char* pylith::friction::SlipWeakeningTimeData::_dbStateVarValues[] = {
+  "cumulative-slip",
+  "previous-slip",
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_dbProperties[] = {
+  0.6,
+  0.5,
+  0.8,
+  1000000,
+  2.0,
+  0.6,
+  0.5,
+  0.4,
+  1000000,
+  1.0,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_dbStateVars[] = {
+  0.4,
+  0.2,
+  0.5,
+  0.1,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_properties[] = {
+  0.6,
+  0.5,
+  0.8,
+  1000000,
+  2.0,
+  0.6,
+  0.5,
+  0.4,
+  1000000,
+  1.0,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_stateVars[] = {
+  0.4,
+  0.2,
+  0.5,
+  0.1,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_propertiesNondim[] = {
+  0.6,
+  0.5,
+  0.0008,
+  0.000044444444,
+  0.2,
+  0.6,
+  0.5,
+  0.0004,
+  0.000044444444,
+  0.1,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_stateVarsNondim[] = {
+  0.0004,
+  0.0002,
+  0.0005,
+  0.0001,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_friction[] = {
+  1000001.21,
+  1000001.15,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_slip[] = {
+  0.12,
+  0.25,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_slipRate[] = {
+  0.74,
+  0.64,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_normalTraction[] = {
+  -2.2,
+  -2.3,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningTimeData::_stateVarsUpdated[] = {
+  0.48,
+  0.4,
+  0.65,
+  0.5,
+};
+
+pylith::friction::SlipWeakeningTimeData::SlipWeakeningTimeData(void)
+{ // constructor
+  numLocs = _numLocs;
+  numProperties = _numProperties;
+  numStateVars = _numStateVars;
+  numDBProperties = _numDBProperties;
+  numDBStateVars = _numDBStateVars;
+  numPropsVertex = _numPropsVertex;
+  numVarsVertex = _numVarsVertex;
+  lengthScale = _lengthScale;
+  timeScale = _timeScale;
+  pressureScale = _pressureScale;
+  densityScale = _densityScale;
+  numPropertyValues = const_cast<int*>(_numPropertyValues);
+  numStateVarValues = const_cast<int*>(_numStateVarValues);
+  dbPropertyValues = const_cast<char**>(_dbPropertyValues);
+  dbStateVarValues = const_cast<char**>(_dbStateVarValues);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  dt = _dt;
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  friction = const_cast<PylithScalar*>(_friction);
+  slip = const_cast<PylithScalar*>(_slip);
+  slipRate = const_cast<PylithScalar*>(_slipRate);
+  normalTraction = const_cast<PylithScalar*>(_normalTraction);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
+} // constructor
+
+pylith::friction::SlipWeakeningTimeData::~SlipWeakeningTimeData(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh (from rev 19390, short/3D/PyLith/trunk/unittests/libtests/friction/data/SlipWeakeningTimeData.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,101 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ======================================================================
+//
+
+#if !defined(pylith_friction_slipweakeningdata_hh)
+#define pylith_friction_slipweakeningdata_hh
+
+#include "FrictionModelData.hh"
+
+namespace pylith {
+  namespace friction {
+     class SlipWeakeningTimeData;
+  } // pylith
+} // friction
+
+class pylith::friction::SlipWeakeningTimeData : public FrictionModelData
+{
+
+public: 
+
+  /// Constructor
+  SlipWeakeningTimeData(void);
+
+  /// Destructor
+  ~SlipWeakeningTimeData(void);
+
+private:
+
+  static const int _numLocs;
+
+  static const int _numProperties;
+
+  static const int _numStateVars;
+
+  static const int _numDBProperties;
+
+  static const int _numDBStateVars;
+
+  static const int _numPropsVertex;
+
+  static const int _numVarsVertex;
+
+  static const PylithScalar _lengthScale;
+
+  static const PylithScalar _timeScale;
+
+  static const PylithScalar _pressureScale;
+
+  static const PylithScalar _densityScale;
+
+  static const PylithScalar _dt;
+
+  static const int _numPropertyValues[];
+
+  static const int _numStateVarValues[];
+
+  static const char* _dbPropertyValues[];
+
+  static const char* _dbStateVarValues[];
+
+  static const PylithScalar _dbProperties[];
+
+  static const PylithScalar _dbStateVars[];
+
+  static const PylithScalar _properties[];
+
+  static const PylithScalar _stateVars[];
+
+  static const PylithScalar _propertiesNondim[];
+
+  static const PylithScalar _stateVarsNondim[];
+
+  static const PylithScalar _friction[];
+
+  static const PylithScalar _slip[];
+
+  static const PylithScalar _slipRate[];
+
+  static const PylithScalar _normalTraction[];
+
+  static const PylithScalar _stateVarsUpdated[];
+
+};
+
+#endif // pylith_friction_slipweakeningdata_hh
+
+// End of file

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningTime.py (from rev 19390, short/3D/PyLith/trunk/unittests/pytests/friction/TestSlipWeakeningTime.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningTime.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningTime.py	2012-01-20 16:15:29 UTC (rev 19399)
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/friction/TestSlipWeakeningTime.py
+
+## @brief Unit testing of SlipWeakeningTime object.
+
+import unittest
+
+from pylith.friction.SlipWeakeningTime import SlipWeakeningTime
+
+# ----------------------------------------------------------------------
+class TestSlipWeakeningTime(unittest.TestCase):
+  """
+  Unit testing of SlipWeakeningTime object.
+  """
+
+  def setUp(self):
+    """
+    Setup test subject.
+    """
+    self.friction = SlipWeakeningTime()
+    return
+  
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.friction.SlipWeakeningTime import friction_model
+    m = friction_model()
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py	2012-01-20 16:08:34 UTC (rev 19398)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py	2012-01-20 16:15:29 UTC (rev 19399)
@@ -68,6 +68,9 @@
     from TestSlipWeakening import TestSlipWeakening
     suite.addTest(unittest.makeSuite(TestSlipWeakening))
 
+    from TestSlipWeakeningTime import TestSlipWeakeningTime
+    suite.addTest(unittest.makeSuite(TestSlipWeakeningTime))
+
     from TestRateStateAgeing import TestRateStateAgeing
     suite.addTest(unittest.makeSuite(TestRateStateAgeing))
 



More information about the CIG-COMMITS mailing list