[cig-commits] r22169 - in short/3D/PyLith/trunk: libsrc/pylith/friction modulesrc/friction

brad at geodynamics.org brad at geodynamics.org
Thu May 30 18:12:36 PDT 2013


Author: brad
Date: 2013-05-30 18:12:36 -0700 (Thu, 30 May 2013)
New Revision: 22169

Modified:
   short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc
   short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.hh
   short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.cc
   short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.hh
   short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.cc
   short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.hh
   short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.cc
   short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.hh
   short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.cc
   short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.hh
   short/3D/PyLith/trunk/libsrc/pylith/friction/TimeWeakening.cc
   short/3D/PyLith/trunk/libsrc/pylith/friction/TimeWeakening.hh
   short/3D/PyLith/trunk/modulesrc/friction/FrictionModel.i
   short/3D/PyLith/trunk/modulesrc/friction/RateStateAgeing.i
   short/3D/PyLith/trunk/modulesrc/friction/SlipWeakening.i
   short/3D/PyLith/trunk/modulesrc/friction/SlipWeakeningTime.i
   short/3D/PyLith/trunk/modulesrc/friction/StaticFriction.i
   short/3D/PyLith/trunk/modulesrc/friction/TimeWeakening.i
Log:
Started work on improving friction solve (add calcFrictionDeriv for use in log-based Newton).

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.cc	2013-05-31 01:12:36 UTC (rev 22169)
@@ -39,8 +39,6 @@
 #include <sstream> // USES std::ostringstream
 #include <iostream> // USES std::cerr
 
-//#define PRECOMPUTE_GEOMETRY
-
 // ----------------------------------------------------------------------
 // Default constructor.
 pylith::friction::FrictionModel::FrictionModel(const materials::Metadata& metadata) :
@@ -365,6 +363,30 @@
 } // calcFriction
 
 // ----------------------------------------------------------------------
+// Compute derivative of friction with slip at vertex.
+PylithScalar
+pylith::friction::FrictionModel::calcFrictionDeriv(const PylithScalar t,
+						   const PylithScalar slip,
+						   const PylithScalar slipRate,
+						   const PylithScalar normalTraction)
+{ // calcFrictionDeriv
+  PYLITH_METHOD_BEGIN;
+
+  assert(_fieldsPropsStateVars);
+
+  assert(_propsFiberDim+_varsFiberDim == _propsStateVarsVertex.size());
+  const PylithScalar* propertiesVertex = &_propsStateVarsVertex[0];
+  const PylithScalar* stateVarsVertex = (_varsFiberDim > 0) ?
+    &_propsStateVarsVertex[_propsFiberDim] : 0;
+
+  const PylithScalar friction = _calcFrictionDeriv(t, slip, slipRate, normalTraction,
+						   propertiesVertex, _propsFiberDim,
+						   stateVarsVertex, _varsFiberDim);
+  
+  PYLITH_METHOD_RETURN(friction);
+} // calcFrictionDeriv
+
+// ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
 pylith::friction::FrictionModel::updateStateVars(const PylithScalar t,

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.hh	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/FrictionModel.hh	2013-05-31 01:12:36 UTC (rev 22169)
@@ -174,7 +174,7 @@
 			    const PylithScalar slipRate,
 			    const PylithScalar normalTraction);
   
-  /** Compute friction at vertex.
+  /** Compute derivative of friction with slip at vertex.
    *
    * @pre Must call retrievePropsAndVars for cell before calling
    * calcFriction().
@@ -183,6 +183,23 @@
    * @param slip Current slip at location.
    * @param slipRate Current slip rate at location.
    * @param normalTraction Normal traction at location.
+   *
+   * @returns Derivative of friction (magnitude of shear traction).
+   */
+  PylithScalar calcFrictionDeriv(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction);
+  
+  /** Compute update to state variables 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 t,
@@ -273,6 +290,30 @@
 			     const PylithScalar* stateVars,
 			     const int numStateVars) = 0;
   
+  /** Compute derivative friction with slip 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.
+   *
+   * @returns Derivative of friction (magnitude of shear traction) at vertex.
+   */
+  virtual
+  PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.cc	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.cc	2013-05-31 01:12:36 UTC (rev 22169)
@@ -151,9 +151,8 @@
 // ----------------------------------------------------------------------
 // Compute properties from values in spatial database.
 void
-pylith::friction::RateStateAgeing::_dbToProperties(
-					   PylithScalar* const propValues,
-					   const scalar_array& dbValues) const
+pylith::friction::RateStateAgeing::_dbToProperties(PylithScalar* const propValues,
+						   const scalar_array& dbValues) const
 { // _dbToProperties
   assert(propValues);
   const int numDBValues = dbValues.size();
@@ -341,6 +340,47 @@
 
 
 // ----------------------------------------------------------------------
+// Compute derivative of friction with slip from properties and
+// state variables.
+PylithScalar
+pylith::friction::RateStateAgeing::_calcFrictionDeriv(const PylithScalar t,
+						      const PylithScalar slip,
+						      const PylithScalar slipRate,
+						      const PylithScalar normalTraction,
+						      const PylithScalar* properties,
+						      const int numProperties,
+						      const PylithScalar* stateVars,
+						      const int numStateVars)
+{ // _calcFrictionDeriv
+  assert(properties);
+  assert(_RateStateAgeing::numProperties == numProperties);
+  assert(numStateVars);
+  assert(_RateStateAgeing::numStateVars == numStateVars);
+
+  PylithScalar frictionDeriv = 0.0;
+  if (normalTraction <= 0.0) {
+    // if fault is in compression
+
+    const PylithScalar slipRateLinear = _linearSlipRate;
+
+    const PylithScalar a = properties[p_a];
+    const PylithScalar b = properties[p_b];
+    const PylithScalar slipRate0 = properties[p_slipRate0];
+
+    if (slipRate >= slipRateLinear) {
+      frictionDeriv = -normalTraction * a / (slipRate * _dt);
+    } else {
+      frictionDeriv = -normalTraction * a / (slipRateLinear * _dt);
+    } // else
+  } // if    
+
+  PetscLogFlops(12);
+
+  return frictionDeriv;
+} // _calcFrictionDeriv
+
+
+// ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
 pylith::friction::RateStateAgeing::_updateStateVars(const PylithScalar t,

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.hh	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/RateStateAgeing.hh	2013-05-31 01:12:36 UTC (rev 22169)
@@ -134,6 +134,8 @@
    * @param numProperties Number of properties.
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
+   *
+   * @returns Friction (magnitude of shear traction) at vertex.
    */
   PylithScalar _calcFriction(const PylithScalar t,
 			     const PylithScalar slip,
@@ -144,6 +146,29 @@
 			     const PylithScalar* stateVars,
 			     const int numStateVars);
 
+  /** Compute derivative of friction with slip 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.
+   *
+   * @returns Derivative of friction (magnitude of shear traction) at vertex.
+   */
+  PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.cc	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.cc	2013-05-31 01:12:36 UTC (rev 22169)
@@ -305,6 +305,41 @@
 } // _calcFriction
 
 // ----------------------------------------------------------------------
+// Compute derivative of friction with slip from properties and
+// state variables.
+PylithScalar
+pylith::friction::SlipWeakening::_calcFrictionDeriv(const PylithScalar t,
+						    const PylithScalar slip,
+						    const PylithScalar slipRate,
+						    const PylithScalar normalTraction,
+						    const PylithScalar* properties,
+						    const int numProperties,
+						    const PylithScalar* stateVars,
+						    const int numStateVars)
+{ // _calcFrictionDeriv
+  assert(properties);
+  assert(_SlipWeakening::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakening::numStateVars == numStateVars);
+
+  PylithScalar frictionDeriv = 0.0;
+  if (normalTraction <= 0.0) {
+    // if fault is in compression
+    const PylithScalar slipPrev = stateVars[s_slipPrev];
+    const PylithScalar slipCum = stateVars[s_slipCum] + fabs(slip - slipPrev);
+
+    if (slipCum < properties[p_d0]) {
+      frictionDeriv = -normalTraction * (properties[p_coefS] - properties[p_coefD]) / properties[p_d0];
+    } // if
+  } // if
+
+  PetscLogFlops(7);
+
+  return frictionDeriv;
+} // _calcFrictionDeriv
+
+
+// ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
 pylith::friction::SlipWeakening::_updateStateVars(const PylithScalar t,

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.hh	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakening.hh	2013-05-31 01:12:36 UTC (rev 22169)
@@ -131,6 +131,29 @@
 			     const PylithScalar* stateVars,
 			     const int numStateVars);
   
+  /** Compute derivative of friction with slip 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.
+   *
+   * @returns Derivative of friction (magnitude of shear traction) at vertex.
+   */
+  PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.cc	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.cc	2013-05-31 01:12:36 UTC (rev 22169)
@@ -294,12 +294,12 @@
   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]) {
+    const PylithScalar slipPrev = stateVars[s_slipPrev];
+    const PylithScalar slipCum = stateVars[s_slipCum] + fabs(slip - slipPrev);
+
+    if (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];
+	mu_f = properties[p_coefS] - (properties[p_coefS] - properties[p_coefD]) * slipCum / properties[p_d0];
       } else {
 	mu_f = properties[p_coefD];
       } // if/else
@@ -311,7 +311,43 @@
   return friction;
 } // _calcFriction
 
+
 // ----------------------------------------------------------------------
+// Compute derivative of friction with slip from properties and
+// state variables.
+PylithScalar
+pylith::friction::SlipWeakeningTime::_calcFrictionDeriv(const PylithScalar t,
+							const PylithScalar slip,
+							const PylithScalar slipRate,
+							const PylithScalar normalTraction,
+							const PylithScalar* properties,
+							const int numProperties,
+							const PylithScalar* stateVars,
+							const int numStateVars)
+{ // _calcFrictionDeriv
+  assert(properties);
+  assert(_SlipWeakeningTime::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakeningTime::numStateVars == numStateVars);
+
+  PylithScalar frictionDeriv = 0.0;
+  if (normalTraction <= 0.0) {
+    // if fault is in compression
+    const PylithScalar slipPrev = stateVars[s_slipPrev];
+    const PylithScalar slipCum = stateVars[s_slipCum] + fabs(slip - slipPrev);
+
+    if (slipCum < properties[p_d0] && t < properties[p_weaktime]) {
+      frictionDeriv = -normalTraction * (properties[p_coefS] - properties[p_coefD]) / properties[p_d0];
+    } // if
+  } // if
+
+  PetscLogFlops(7);
+
+  return frictionDeriv;
+} // _calcFrictionDeriv
+
+
+// ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
 pylith::friction::SlipWeakeningTime::_updateStateVars(const PylithScalar t,

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.hh	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/SlipWeakeningTime.hh	2013-05-31 01:12:36 UTC (rev 22169)
@@ -125,6 +125,29 @@
 			     const PylithScalar* stateVars,
 			     const int numStateVars);
 
+  /** Compute derivative of friction with slip 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.
+   *
+   * @returns Derivative of friction (magnitude of shear traction) at vertex.
+   */
+  PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.cc	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.cc	2013-05-31 01:12:36 UTC (rev 22169)
@@ -88,9 +88,8 @@
 // ----------------------------------------------------------------------
 // Compute properties from values in spatial database.
 void
-pylith::friction::StaticFriction::_dbToProperties(
-					   PylithScalar* const propValues,
-					   const scalar_array& dbValues) const
+pylith::friction::StaticFriction::_dbToProperties(PylithScalar* const propValues,
+						  const scalar_array& dbValues) const
 { // _dbToProperties
   assert(propValues);
   const int numDBValues = dbValues.size();
@@ -167,4 +166,21 @@
 } // _calcFriction
 
 
+// ----------------------------------------------------------------------
+// Compute derivative of friction with slip from properties and
+// state variables.
+PylithScalar
+pylith::friction::StaticFriction::_calcFrictionDeriv(const PylithScalar t,
+						     const PylithScalar slip,
+						     const PylithScalar slipRate,
+						     const PylithScalar normalTraction,
+						     const PylithScalar* properties,
+						     const int numProperties,
+						     const PylithScalar* stateVars,
+						     const int numStateVars)
+{ // _calcFrictionDeriv
+  return 0.0;
+} // _calcFrictionDeriv
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.hh	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/StaticFriction.hh	2013-05-31 01:12:36 UTC (rev 22169)
@@ -96,6 +96,29 @@
 			     const PylithScalar* stateVars,
 			     const int numStateVars);
 
+  /** Compute derivative of friction with slip 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.
+   *
+   * @returns Derivative of friction (magnitude of shear traction) at vertex.
+   */
+  PylithScalar _calcFrictionDeriv(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/trunk/libsrc/pylith/friction/TimeWeakening.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/TimeWeakening.cc	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/TimeWeakening.cc	2013-05-31 01:12:36 UTC (rev 22169)
@@ -284,6 +284,23 @@
 } // _calcFriction
 
 // ----------------------------------------------------------------------
+// Compute derivative of friction with slip from properties and
+// state variables.
+PylithScalar
+pylith::friction::TimeWeakening::_calcFrictionDeriv(const PylithScalar t,
+						    const PylithScalar slip,
+						    const PylithScalar slipRate,
+						    const PylithScalar normalTraction,
+						    const PylithScalar* properties,
+						    const int numProperties,
+						    const PylithScalar* stateVars,
+						    const int numStateVars)
+{ // _calcFrictionDeriv
+  return 0.0;
+} // _calcFrictionDeriv
+
+
+// ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
 pylith::friction::TimeWeakening::_updateStateVars(const PylithScalar t,

Modified: short/3D/PyLith/trunk/libsrc/pylith/friction/TimeWeakening.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/friction/TimeWeakening.hh	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/libsrc/pylith/friction/TimeWeakening.hh	2013-05-31 01:12:36 UTC (rev 22169)
@@ -125,6 +125,29 @@
 			     const PylithScalar* stateVars,
 			     const int numStateVars);
   
+  /** Compute derivative of friction with slip 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.
+   *
+   * @returns Derivative of friction (magnitude of shear traction) at vertex.
+   */
+  PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/modulesrc/friction/FrictionModel.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/friction/FrictionModel.i	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/modulesrc/friction/FrictionModel.i	2013-05-31 01:12:36 UTC (rev 22169)
@@ -149,6 +149,23 @@
 				const PylithScalar normalTraction);
   
 
+      /** Compute derivative of friction with slip 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.
+       *
+       * @returns Derivative of friction (magnitude of shear traction).
+       */
+      PylithScalar calcFrictionDeriv(const PylithScalar t,
+				     const PylithScalar slip,
+				     const PylithScalar slipRate,
+				     const PylithScalar normalTraction);
+  
       /** Compute friction at vertex.
        *
        * @pre Must call retrievePropsAndVars for cell before calling
@@ -246,6 +263,30 @@
 				 const PylithScalar* stateVars,
 				 const int numStateVars) = 0;
 
+      /** Compute derivative friction with slip 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.
+       *
+       * @returns Derivative of friction (magnitude of shear traction) at vertex.
+       */
+      virtual
+      PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/modulesrc/friction/RateStateAgeing.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/friction/RateStateAgeing.i	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/modulesrc/friction/RateStateAgeing.i	2013-05-31 01:12:36 UTC (rev 22169)
@@ -90,6 +90,29 @@
 				 const PylithScalar* stateVars,
 				 const int numStateVars);
 
+      /** Compute derivative of friction with slip 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.
+       *
+       * @returns Derivative of friction (magnitude of shear traction) at vertex.
+       */
+      PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/modulesrc/friction/SlipWeakening.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/friction/SlipWeakening.i	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/modulesrc/friction/SlipWeakening.i	2013-05-31 01:12:36 UTC (rev 22169)
@@ -89,6 +89,29 @@
 				 const PylithScalar* stateVars,
 				 const int numStateVars);
 
+      /** Compute derivative of friction with slip 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.
+       *
+       * @returns Derivative of friction (magnitude of shear traction) at vertex.
+       */
+      PylithScalar _calcFrictionDeriv(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.

Modified: short/3D/PyLith/trunk/modulesrc/friction/SlipWeakeningTime.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/friction/SlipWeakeningTime.i	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/modulesrc/friction/SlipWeakeningTime.i	2013-05-31 01:12:36 UTC (rev 22169)
@@ -83,6 +83,29 @@
 				 const PylithScalar* stateVars,
 				 const int numStateVars);
 
+      /** Compute derivative of friction with slip 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.
+       *
+       * @returns Derivative of friction (magnitude of shear traction) at vertex.
+       */
+      PylithScalar _calcFrictionDeriv(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

Modified: short/3D/PyLith/trunk/modulesrc/friction/StaticFriction.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/friction/StaticFriction.i	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/modulesrc/friction/StaticFriction.i	2013-05-31 01:12:36 UTC (rev 22169)
@@ -83,6 +83,29 @@
 				 const PylithScalar* stateVars,
 				 const int numStateVars);
 
+      /** Compute derivative of friction with slip 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.
+       *
+       * @returns Derivative of friction (magnitude of shear traction) at vertex.
+       */
+      PylithScalar _calcFrictionDeriv(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
 
   } // friction

Modified: short/3D/PyLith/trunk/modulesrc/friction/TimeWeakening.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/friction/TimeWeakening.i	2013-05-30 19:49:22 UTC (rev 22168)
+++ short/3D/PyLith/trunk/modulesrc/friction/TimeWeakening.i	2013-05-31 01:12:36 UTC (rev 22169)
@@ -83,6 +83,29 @@
 				 const PylithScalar* stateVars,
 				 const int numStateVars);
 
+      /** Compute derivative of friction with slip 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.
+       *
+       * @returns Derivative of friction (magnitude of shear traction) at vertex.
+       */
+      PylithScalar _calcFrictionDeriv(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.



More information about the CIG-COMMITS mailing list