[cig-commits] r19285 - in short/3D/PyLith/branches/v1.6-stable: libsrc/pylith/friction modulesrc/friction pylith/feassemble pylith/friction tests/3d/cyclicfriction
brad at geodynamics.org
brad at geodynamics.org
Fri Dec 9 11:37:05 PST 2011
Author: brad
Date: 2011-12-09 11:37:05 -0800 (Fri, 09 Dec 2011)
New Revision: 19285
Modified:
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.cc
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.hh
short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/SlipWeakening.i
short/3D/PyLith/branches/v1.6-stable/pylith/feassemble/Integrator.py
short/3D/PyLith/branches/v1.6-stable/pylith/friction/SlipWeakening.py
short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg
Log:
Added force_healing property for slip-weakening to force healing after each time step in quasi-static simulation.
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.cc 2011-12-09 19:36:13 UTC (rev 19284)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.cc 2011-12-09 19:37:05 UTC (rev 19285)
@@ -113,7 +113,8 @@
_SlipWeakening::stateVars,
_SlipWeakening::numStateVars,
_SlipWeakening::dbStateVars,
- _SlipWeakening::numDBStateVars))
+ _SlipWeakening::numDBStateVars)),
+ _forceHealing(false)
{ // constructor
} // constructor
@@ -126,6 +127,14 @@
// ----------------------------------------------------------------------
// Compute properties from values in spatial database.
void
+pylith::friction::SlipWeakening::forceHealing(const bool flag)
+{ // forceHealing
+ _forceHealing = flag;
+} // forceHealing
+
+// ----------------------------------------------------------------------
+// Compute properties from values in spatial database.
+void
pylith::friction::SlipWeakening::_dbToProperties(
double* const propValues,
const double_array& dbValues) const
@@ -274,11 +283,14 @@
double mu_f = 0.0;
if (normalTraction <= 0.0) {
// if fault is in compression
- if (stateVars[s_slipCum] < properties[p_d0]) {
+ const double slipPrev = stateVars[s_slipPrev];
+ const double slipCum = stateVars[s_slipCum] + fabs(slip - slipPrev);
+
+ if (slipCum < properties[p_d0]) {
// 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];
+ slipCum / properties[p_d0];
} else {
mu_f = properties[p_coefD];
} // if/else
@@ -307,7 +319,7 @@
assert(_SlipWeakening::numStateVars == numStateVars);
const double tolerance = 1.0e-12;
- if (slipRate > tolerance) {
+ if (slipRate > tolerance && !_forceHealing) {
const double slipPrev = stateVars[s_slipPrev];
stateVars[s_slipPrev] = stateVars[s_slipCum];
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.hh
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.hh 2011-12-09 19:36:13 UTC (rev 19284)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/friction/SlipWeakening.hh 2011-12-09 19:37:05 UTC (rev 19285)
@@ -47,6 +47,12 @@
/// Destructor.
~SlipWeakening(void);
+ /** Compute properties from values in spatial database.
+ *
+ * @param flag True if forcing healing, false otherwise.
+ */
+ void forceHealing(const bool flag);
+
// PROTECTED METHODS //////////////////////////////////////////////////
protected :
@@ -162,6 +168,8 @@
static const int db_slipCum;
static const int db_slipPrev;
+ bool _forceHealing; ///< Force healing.
+
// NOT IMPLEMENTED ////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/SlipWeakening.i
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/SlipWeakening.i 2011-12-09 19:36:13 UTC (rev 19284)
+++ short/3D/PyLith/branches/v1.6-stable/modulesrc/friction/SlipWeakening.i 2011-12-09 19:37:05 UTC (rev 19285)
@@ -36,6 +36,12 @@
/// Destructor.
~SlipWeakening(void);
+ /** Compute properties from values in spatial database.
+ *
+ * @param flag True if forcing healing, false otherwise.
+ */
+ void forceHealing(const bool flag);
+
// PROTECTED METHODS //////////////////////////////////////////////
protected :
Modified: short/3D/PyLith/branches/v1.6-stable/pylith/feassemble/Integrator.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/pylith/feassemble/Integrator.py 2011-12-09 19:36:13 UTC (rev 19284)
+++ short/3D/PyLith/branches/v1.6-stable/pylith/feassemble/Integrator.py 2011-12-09 19:37:05 UTC (rev 19285)
@@ -123,6 +123,7 @@
"""
return
+
# PRIVATE METHODS ////////////////////////////////////////////////////
def _setupLogging(self):
Modified: short/3D/PyLith/branches/v1.6-stable/pylith/friction/SlipWeakening.py
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/pylith/friction/SlipWeakening.py 2011-12-09 19:36:13 UTC (rev 19284)
+++ short/3D/PyLith/branches/v1.6-stable/pylith/friction/SlipWeakening.py 2011-12-09 19:37:05 UTC (rev 19285)
@@ -33,6 +33,28 @@
Factory: friction_model.
"""
+ # INVENTORY //////////////////////////////////////////////////////////
+
+ class Inventory(FrictionModel.Inventory):
+ """
+ Python object for managing SlipWeakening facilities and properties.
+ """
+
+ ## @class Inventory
+ ## Python object for managing FrictionModel facilities and properties.
+ ##
+ ## \b Properties
+ ## @li \b force_healing Force healing after every time step.
+ ##
+ ## \b Facilities
+ ## @li None
+
+ import pyre.inventory
+
+ forceHealing = pyre.inventory.bool("force_healing", default=False)
+ forceHealing.meta['tip'] = "Force healing after every time step."
+
+
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="slipweakening"):
@@ -51,12 +73,25 @@
'cell': \
{'info': [],
'data': []}}
- self._loggingPrefix = "FrStat "
+ self._loggingPrefix = "FrSlWk "
return
# PRIVATE METHODS ////////////////////////////////////////////////////
+ def _configure(self):
+ """
+ Setup members using inventory.
+ """
+ try:
+ FrictionModel._configure(self)
+ ModuleSlipWeakening.forceHealing(self, self.inventory.forceHealing)
+ except ValueError, err:
+ aliases = ", ".join(self.aliases)
+ raise ValueError("Error while configuring friction model "
+ "(%s):\n%s" % (aliases, err.message))
+ return
+
def _createModuleObj(self):
"""
Call constructor for module object for access to C++ object.
Modified: short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg 2011-12-09 19:36:13 UTC (rev 19284)
+++ short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg 2011-12-09 19:37:05 UTC (rev 19285)
@@ -118,6 +118,7 @@
friction = pylith.friction.SlipWeakening
friction.label = Slip weakening
+friction.force_healing = True
quadrature.cell = pylith.feassemble.FIATLagrange
quadrature.cell.dimension = 2
More information about the CIG-COMMITS
mailing list