[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