[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