[cig-commits] r21383 - in short/3D/PyLith/branches/v1.7-trunk: libsrc/pylith libsrc/pylith/faults libsrc/pylith/friction libsrc/pylith/meshio libsrc/pylith/problems libsrc/pylith/topology modulesrc/friction pylith tests/topology unittests/libtests/bc unittests/libtests/faults unittests/libtests/feassemble unittests/libtests/friction unittests/libtests/friction/data unittests/libtests/materials unittests/libtests/meshio unittests/libtests/topology unittests/libtests/utils unittests/pytests/friction

brad at geodynamics.org brad at geodynamics.org
Thu Feb 21 14:14:40 PST 2013


Author: brad
Date: 2013-02-21 14:14:40 -0800 (Thu, 21 Feb 2013)
New Revision: 21383

Added:
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.hh
Modified:
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/Makefile.am
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.hh
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/frictionfwd.hh
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/Solver.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/SolverNonlinear.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Jacobian.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/MeshRefiner.cc
   short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/Makefile.am
   short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/friction.i
   short/3D/PyLith/branches/v1.7-trunk/pylith/Makefile.am
   short/3D/PyLith/branches/v1.7-trunk/tests/topology/test_topology.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/bc/test_bc.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/faults/test_faults.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/feassemble/test_feassemble.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/Makefile.am
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/TestFrictionModel.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/RateStateAgeingData.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningData.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningStressData.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningTimeData.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/StaticFrictionData.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/TimeWeakeningData.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/test_friction.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/materials/test_materials.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/meshio/test_meshio.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/topology/test_topology.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/utils/test_utils.cc
   short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/Makefile.am
   short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/testfriction.py
Log:
Merge from stable. Added new (more stable) version of slip+time weakening for SCEC spontaneous rupture benchmarks.

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/Makefile.am	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/Makefile.am	2013-02-21 22:14:40 UTC (rev 21383)
@@ -105,6 +105,7 @@
 	friction/StaticFriction.cc \
 	friction/SlipWeakening.cc \
 	friction/SlipWeakeningTime.cc \
+	friction/SlipWeakeningTimeStable.cc \
 	friction/SlipWeakeningStress.cc \
 	friction/RateStateAgeing.cc \
 	friction/TimeWeakening.cc \

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -1990,7 +1990,7 @@
     for (int i=0; i < subnrows; ++i) {
       indicesLocal[iCohesiveCell*subnrows+indicesPerm[i]] = i;
     } // for
-    cellsIS[iCohesiveCell] = PETSC_NULL;
+    cellsIS[iCohesiveCell] = NULL;
     err = ISCreateGeneral(PETSC_COMM_SELF, indicesGlobal.size(), &indicesGlobal[0], PETSC_COPY_VALUES, &cellsIS[iCohesiveCell]);CHECK_PETSC_ERROR(err);
 
   } // for

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -294,12 +294,13 @@
   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

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.hh	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTime.hh	2013-02-21 22:14:40 UTC (rev 21383)
@@ -18,7 +18,7 @@
 
 /** @file libsrc/friction/SlipWeakeningTime.hh
  *
- * @brief C++ slip weakening fault constitutive model.
+ * @brief C++ slip + time weakening fault constitutive model.
  */
 
 #if !defined(pylith_friction_slipweakeningtime_hh)

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.cc	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -0,0 +1,362 @@
+// -*- 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 "SlipWeakeningTimeStable.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 MAXSCALAR
+
+#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 _SlipWeakeningTimeStable {
+
+      // Number of physical properties.
+      const int numProperties = 6;
+
+      // Physical properties.
+      const pylith::materials::Metadata::ParamDescription properties[6] = {
+	{ "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 },
+	{ "time_weakening_time", 1, pylith::topology::FieldBase::SCALAR },
+	{ "time_weakening_parameter", 1, pylith::topology::FieldBase::SCALAR },
+      };
+
+      // Number of State Variables.
+      const int numStateVars = 2;
+
+      // State Variables.
+      const pylith::materials::Metadata::ParamDescription stateVars[2] = {
+	{ "cumulative_slip", 1, pylith::topology::FieldBase::SCALAR },
+	{ "previous_slip", 1, pylith::topology::FieldBase::SCALAR },
+      };
+
+      // Values expected in spatial database
+      const int numDBProperties = 6;
+      const char* dbProperties[6] = { "static-coefficient",
+				      "dynamic-coefficient",
+				      "slip-weakening-parameter",
+				      "cohesion",
+				      "time-weakening-time",
+				      "time-weakening-parameter",
+      };
+
+      const int numDBStateVars = 2;
+      const char* dbStateVars[2] = { "cumulative-slip",
+				     "previous-slip",
+      };      
+      
+    } // _SlipWeakeningTimeStable
+  } // friction
+} // pylith
+
+// Indices of physical properties
+const int pylith::friction::SlipWeakeningTimeStable::p_coefS = 0;
+const int pylith::friction::SlipWeakeningTimeStable::p_coefD = 
+  pylith::friction::SlipWeakeningTimeStable::p_coefS + 1;
+const int pylith::friction::SlipWeakeningTimeStable::p_d0 = 
+  pylith::friction::SlipWeakeningTimeStable::p_coefD + 1;
+const int pylith::friction::SlipWeakeningTimeStable::p_cohesion =
+  pylith::friction::SlipWeakeningTimeStable::p_d0 + 1;
+const int pylith::friction::SlipWeakeningTimeStable::p_weaktime =
+  pylith::friction::SlipWeakeningTimeStable::p_cohesion + 1;
+const int pylith::friction::SlipWeakeningTimeStable::p_t0 =
+  pylith::friction::SlipWeakeningTimeStable::p_weaktime + 1;
+
+// Indices of database values (order must match dbProperties)
+const int pylith::friction::SlipWeakeningTimeStable::db_coefS = 0;
+const int pylith::friction::SlipWeakeningTimeStable::db_coefD = 
+  pylith::friction::SlipWeakeningTimeStable::db_coefS + 1;
+const int pylith::friction::SlipWeakeningTimeStable::db_d0 = 
+  pylith::friction::SlipWeakeningTimeStable::db_coefD + 1;
+const int pylith::friction::SlipWeakeningTimeStable::db_cohesion =
+  pylith::friction::SlipWeakeningTimeStable::db_d0 + 1;
+const int pylith::friction::SlipWeakeningTimeStable::db_weaktime =
+  pylith::friction::SlipWeakeningTimeStable::db_cohesion + 1;
+const int pylith::friction::SlipWeakeningTimeStable::db_t0 =
+  pylith::friction::SlipWeakeningTimeStable::db_weaktime + 1;
+
+// Indices of state variables.
+const int pylith::friction::SlipWeakeningTimeStable::s_slipCum = 0;
+const int pylith::friction::SlipWeakeningTimeStable::s_slipPrev = 
+  pylith::friction::SlipWeakeningTimeStable::s_slipCum + 1;
+
+// Indices of database values (order must match dbProperties)
+const int pylith::friction::SlipWeakeningTimeStable::db_slipCum = 0;
+const int pylith::friction::SlipWeakeningTimeStable::db_slipPrev = 
+  pylith::friction::SlipWeakeningTimeStable::db_slipCum + 1;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::friction::SlipWeakeningTimeStable::SlipWeakeningTimeStable(void) :
+  FrictionModel(materials::Metadata(_SlipWeakeningTimeStable::properties,
+				    _SlipWeakeningTimeStable::numProperties,
+				    _SlipWeakeningTimeStable::dbProperties,
+				    _SlipWeakeningTimeStable::numDBProperties,
+				    _SlipWeakeningTimeStable::stateVars,
+				    _SlipWeakeningTimeStable::numStateVars,
+				    _SlipWeakeningTimeStable::dbStateVars,
+				    _SlipWeakeningTimeStable::numDBStateVars))
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::friction::SlipWeakeningTimeStable::~SlipWeakeningTimeStable(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Compute properties from values in spatial database.
+void
+pylith::friction::SlipWeakeningTimeStable::_dbToProperties(
+					   PylithScalar* const propValues,
+					   const scalar_array& dbValues) const
+{ // _dbToProperties
+  assert(propValues);
+  const int numDBValues = dbValues.size();
+  assert(_SlipWeakeningTimeStable::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_tw = dbValues[db_weaktime];
+  const PylithScalar db_tp = dbValues[db_t0];
+
+  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.\n"
+	<< "slip weakening parameter: " << db_d0 << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_tw < 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned negative value for time-weakening time.\n"
+	<< "weakening time: " << db_tw << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_t0 <= 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned nonpositive value for time-weakening paramter.\n"
+	<< "time-weakening parameter: " << db_t0 << "\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_tw;
+  propValues[p_t0] = db_tp;
+
+} // _dbToProperties
+
+// ----------------------------------------------------------------------
+// Nondimensionalize properties.
+void
+pylith::friction::SlipWeakeningTimeStable::_nondimProperties(PylithScalar* const values,
+						    const int nvalues) const
+{ // _nondimProperties
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTimeStable::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;
+  values[p_t0] /= timeScale;
+} // _nondimProperties
+
+// ----------------------------------------------------------------------
+// Dimensionalize properties.
+void
+pylith::friction::SlipWeakeningTimeStable::_dimProperties(PylithScalar* const values,
+						      const int nvalues) const
+{ // _dimProperties
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTimeStable::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;
+  values[p_t0] *= timeScale;
+} // _dimProperties
+
+// ----------------------------------------------------------------------
+// Compute state variables from values in spatial database.
+void
+pylith::friction::SlipWeakeningTimeStable::_dbToStateVars(
+					   PylithScalar* const stateValues,
+					   const scalar_array& dbValues) const
+{ // _dbToStateVars
+  assert(stateValues);
+  const int numDBValues = dbValues.size();
+  assert(_SlipWeakeningTimeStable::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::SlipWeakeningTimeStable::_nondimStateVars(PylithScalar* const values,
+						  const int nvalues) const
+{ // _nondimStateVars
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTimeStable::numStateVars);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+
+  values[s_slipCum] /= lengthScale;
+  values[s_slipPrev] /= lengthScale;
+} // _nondimStateVars
+
+// ----------------------------------------------------------------------
+// Dimensionalize state variables.
+void
+pylith::friction::SlipWeakeningTimeStable::_dimStateVars(PylithScalar* const values,
+					       const int nvalues) const
+{ // _dimStateVars
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningTimeStable::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::SlipWeakeningTimeStable::_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(_SlipWeakeningTimeStable::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakeningTimeStable::numStateVars == numStateVars);
+
+  PylithScalar friction = 0.0;
+  PylithScalar mu_f = 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);
+
+    const PylithScalar slipWeak = (slipCum >= properties[p_d0]) ? 1.0 : slipCum / properties[p_d0];
+    PylithScalar timeWeak = 1.0;
+    if (t < properties[p_weaktime]) {
+      timeWeak = 0.0;
+    } else if (t < properties[p_weaktime] + properties[p_t0]) {
+      timeWeak = (t - properties[p_weaktime]) / properties[p_t0];
+    } // if/else
+    mu_f = properties[p_coefS] - (properties[p_coefS] - properties[p_coefD]) * std::max(slipWeak, timeWeak);
+    friction = - mu_f * normalTraction + properties[p_cohesion];
+  } // if
+
+  PetscLogFlops(6);
+
+  return friction;
+} // _calcFriction
+
+// ----------------------------------------------------------------------
+// Update state variables (for next time step).
+void
+pylith::friction::SlipWeakeningTimeStable::_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(_SlipWeakeningTimeStable::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakeningTimeStable::numStateVars == numStateVars);
+
+  const PylithScalar tolerance = 1.0e-12;
+  if (slipRate > tolerance) {
+    const PylithScalar slipPrev = stateVars[s_slipPrev];
+
+    stateVars[s_slipPrev] = slip;
+    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 

Added: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.hh	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningTimeStable.hh	2013-02-21 22:14:40 UTC (rev 21383)
@@ -0,0 +1,190 @@
+// -*- 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/SlipWeakeningTimeStable.hh
+ *
+ * @brief C++ slip + time weakening fault constitutive model.
+ *
+ * This constitutive model is used in the SCEC spontaneous rupture
+ * benchmarks suite.
+ *
+ * This version of slip + time weakening contains a time constant to
+ * make it more stable then SlipWeakeningTime.
+ */
+
+#if !defined(pylith_friction_slipweakeningtimestable_hh)
+#define pylith_friction_slipweakeningtimestable_hh
+
+// Include directives ---------------------------------------------------
+#include "FrictionModel.hh" // ISA FrictionModel
+
+// SlipWeakeningTimeStable -------------------------------------------------------
+/** @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::SlipWeakeningTimeStable : public FrictionModel
+{ // class SlipWeakeningTimeStable
+  friend class TestSlipWeakeningTimeStable; // unit testing
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  SlipWeakeningTimeStable(void);
+
+  /// Destructor.
+  ~SlipWeakeningTimeStable(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 p_t0;
+
+  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;
+  static const int db_t0;
+
+  /// 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 :
+
+  SlipWeakeningTimeStable(const SlipWeakeningTimeStable&); ///< Not implemented.
+  const SlipWeakeningTimeStable& operator=(const SlipWeakeningTimeStable&); ///< Not implemented
+
+}; // class SlipWeakeningTimeStable
+
+#endif // pylith_friction_slipweakeningtimestable_hh
+
+
+// End of file 

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/frictionfwd.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/frictionfwd.hh	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/frictionfwd.hh	2013-02-21 22:14:40 UTC (rev 21383)
@@ -35,6 +35,7 @@
     class StaticFriction;
     class SlipWeakening;
     class SlipWeakeningTime;
+    class SlipWeakeningTimeStable;
     class SlipWeakeningStress;
     class RateStateAgeing;
     class TimeWeakening;

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -21,6 +21,8 @@
 #include "HDF5.hh" // USES HDF5
 #include "Xdmf.hh" // USES Xdmf
 
+#include "petscviewerhdf5.h"
+
 #include <cassert> // USES assert()
 #include <sstream> // USES std::ostringstream
 #include <stdexcept> // USES std::runtime_error

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/Solver.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/Solver.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/Solver.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -190,9 +190,9 @@
     
     // Allocate just the diagonal.
     err = MatSeqAIJSetPreallocation(_jacobianPCFault, 1, 
-				    PETSC_NULL); CHECK_PETSC_ERROR(err);
-    err = MatMPIAIJSetPreallocation(_jacobianPCFault, 1, PETSC_NULL, 
-				    0, PETSC_NULL); CHECK_PETSC_ERROR(err);
+				    NULL); CHECK_PETSC_ERROR(err);
+    err = MatMPIAIJSetPreallocation(_jacobianPCFault, 1, NULL, 
+				    0, NULL); CHECK_PETSC_ERROR(err);
     // Set preconditioning matrix in formulation
     formulation->customPCMatrix(_jacobianPCFault);
 
@@ -221,16 +221,16 @@
   if (separateComponents) {
     PetscMat* precon = new PetscMat[numSpaces];
     for (int i=0; i < numSpaces; ++i) {
-      precon[i] = PETSC_NULL;
+      precon[i] = NULL;
     } // for
     precon[numSpaces-1] = _jacobianPCFault;
-    constructFieldSplit(solutionSection, PETSC_DETERMINE, PETSC_NULL, PETSC_NULL, 
-			sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", solutionSection), precon, PETSC_NULL, solution.vector(), *pc);
+    constructFieldSplit(solutionSection, PETSC_DETERMINE, NULL, NULL, 
+			sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", solutionSection), precon, NULL, solution.vector(), *pc);
     delete[] precon; precon = 0;
   } else {
     int numFields[2] = {spaceDim, (numSpaces > spaceDim) ? 1 : 0};
-    MatNullSpace nullsp[2] = {PETSC_NULL, PETSC_NULL};
-    PetscMat precon[2] = {PETSC_NULL, _jacobianPCFault};
+    MatNullSpace nullsp[2] = {NULL, NULL};
+    PetscMat precon[2] = {NULL, _jacobianPCFault};
     int* fields = new int[numSpaces];
     
     // Create rigid body null space.
@@ -284,7 +284,7 @@
         err = VecCopy(solution.vector(), mode[d]);CHECK_PETSC_ERROR(err);
       } // for
       for (int i=0; i < dim; ++i) {
-	err = VecNormalize(mode[i], PETSC_NULL);CHECK_PETSC_ERROR(err);
+	err = VecNormalize(mode[i], NULL);CHECK_PETSC_ERROR(err);
       } // for
       /* Orthonormalize system */
       for (int i = dim; i < m; ++i) {
@@ -293,7 +293,7 @@
         err = VecMDot(mode[i], i, mode, dots);CHECK_PETSC_ERROR(err);
         for(int j=0; j < i; ++j) dots[j] *= -1.0;
         err = VecMAXPY(mode[i], i, dots, mode);CHECK_PETSC_ERROR(err);
-        err = VecNormalize(mode[i], PETSC_NULL);CHECK_PETSC_ERROR(err);
+        err = VecNormalize(mode[i], NULL);CHECK_PETSC_ERROR(err);
       } // for
       err = MatNullSpaceCreate(sieveMesh->comm(), PETSC_FALSE, m, mode, &nullsp[0]);CHECK_PETSC_ERROR(err);
       for(int i=0; i< m; ++i) {err = VecDestroy(&mode[i]);CHECK_PETSC_ERROR(err);}

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/SolverNonlinear.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/SolverNonlinear.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/problems/SolverNonlinear.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -140,7 +140,7 @@
   PetscErrorCode err = 0;
   const PetscVec solutionVec = solution->vector();
 
-  err = SNESSolve(_snes, PETSC_NULL, solutionVec); CHECK_PETSC_ERROR(err);
+  err = SNESSolve(_snes, NULL, solutionVec); CHECK_PETSC_ERROR(err);
   
   _logger->eventEnd(solveEvent);
   _logger->eventBegin(scatterEvent);
@@ -235,13 +235,13 @@
   ierr = SNESLineSearchGetLambda(linesearch, &lambda);CHKERRQ(ierr);
   ierr = SNESLineSearchGetSNES(linesearch, &snes);CHKERRQ(ierr);
   ierr = SNESLineSearchGetMonitor(linesearch, &monitor);CHKERRQ(ierr);
-  ierr = SNESLineSearchGetTolerances(linesearch, &minlambda, &maxstep, PETSC_NULL, PETSC_NULL, PETSC_NULL, &max_its);CHKERRQ(ierr);
-  ierr = SNESGetTolerances(snes, PETSC_NULL, PETSC_NULL, &stol, PETSC_NULL, PETSC_NULL);CHKERRQ(ierr);
+  ierr = SNESLineSearchGetTolerances(linesearch, &minlambda, &maxstep, NULL, NULL, NULL, &max_its);CHKERRQ(ierr);
+  ierr = SNESGetTolerances(snes, NULL, NULL, &stol, NULL, NULL);CHKERRQ(ierr);
   bt = (PetscSNESLineSearch_BT *)linesearch->data;
 
   alpha = bt->alpha;
 
-  ierr = SNESGetJacobian(snes, &jac, PETSC_NULL, PETSC_NULL, PETSC_NULL);CHKERRQ(ierr);
+  ierr = SNESGetJacobian(snes, &jac, NULL, NULL, NULL);CHKERRQ(ierr);
   if (!jac) {
     SETERRQ(((PetscObject)linesearch)->comm, PETSC_ERR_USER, "SNESLineSearchBT requires a Jacobian matrix");
   }

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -375,7 +375,7 @@
 	  CHECK_PETSC_ERROR(err);
 	} else {
 	  err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
-				      blockSize, 0, PETSC_NULL,
+				      blockSize, 0, NULL,
 				      &sinfo.scatterVec);
 	  CHECK_PETSC_ERROR(err);
 	} // else
@@ -785,7 +785,7 @@
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
     err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
-				blockSize, 0, PETSC_NULL,
+				blockSize, 0, NULL,
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } // else
 
@@ -864,7 +864,7 @@
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
     err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
-				blockSize, 0, PETSC_NULL,
+				blockSize, 0, NULL,
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } // else
 
@@ -944,7 +944,7 @@
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
     err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
-				blockSize, 0, PETSC_NULL,
+				blockSize, 0, NULL,
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } // else
   
@@ -1020,7 +1020,7 @@
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
     err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
-				blockSize, 0, PETSC_NULL,
+				blockSize, 0, NULL,
 				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } // else
 

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Jacobian.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Jacobian.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Jacobian.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -138,7 +138,7 @@
     for(PetscInt r = rStart; r < rEnd; ++r) {
       PetscInt c;
 
-      err = MatGetRow(_matrix,r, &ncols, &cols, PETSC_NULL);CHECK_PETSC_ERROR(err);
+      err = MatGetRow(_matrix,r, &ncols, &cols, NULL);CHECK_PETSC_ERROR(err);
       if (!ncols) {
         std::ostringstream msg;
         msg << "ERROR: Empty row " << r << " in ["<<rStart<<","<<rEnd<<")" << std::endl;
@@ -152,7 +152,7 @@
         msg << "ERROR: Row " << r << " in ["<<rStart<<","<<rEnd<<") is missing diagonal element" << std::endl;
         throw std::runtime_error(msg.str().c_str());
       }
-      err = MatRestoreRow(_matrix,r, &ncols, &cols, PETSC_NULL);CHECK_PETSC_ERROR(err);
+      err = MatRestoreRow(_matrix,r, &ncols, &cols, NULL);CHECK_PETSC_ERROR(err);
     }
 #endif
 

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/MeshRefiner.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/MeshRefiner.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/MeshRefiner.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -40,8 +40,8 @@
 template<typename cellrefiner_type>
 ALE::MeshRefiner<cellrefiner_type>::~MeshRefiner(void)
 { // destructor
-  delete _orderOldMesh; _orderOldMesh = PETSC_NULL;
-  delete _orderNewMesh; _orderNewMesh = PETSC_NULL;
+  delete _orderOldMesh; _orderOldMesh = NULL;
+  delete _orderNewMesh; _orderNewMesh = NULL;
 } // destructor
 
 // ----------------------------------------------------------------------
@@ -792,10 +792,10 @@
   }
 #endif
   newMesh->setCalculatedOverlap(true);
-  delete [] oldVerticesStartNormalP; oldVerticesStartNormalP = PETSC_NULL;
-  delete [] oldVerticesStartFaultP;  oldVerticesStartFaultP  = PETSC_NULL;
-  delete [] newVerticesStartNormalP; newVerticesStartNormalP = PETSC_NULL;
-  delete [] newVerticesStartFaultP;  newVerticesStartFaultP  = PETSC_NULL;
+  delete [] oldVerticesStartNormalP; oldVerticesStartNormalP = NULL;
+  delete [] oldVerticesStartFaultP;  oldVerticesStartFaultP  = NULL;
+  delete [] newVerticesStartNormalP; newVerticesStartNormalP = NULL;
+  delete [] newVerticesStartFaultP;  newVerticesStartFaultP  = NULL;
 
   refiner.overlapAddNewVertices(newMesh, *_orderNewMesh, mesh, *_orderOldMesh);
   // We have to do flexible assembly since we add the new vertices separately

Modified: short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/Makefile.am	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/Makefile.am	2013-02-21 22:14:40 UTC (rev 21383)
@@ -29,6 +29,7 @@
 	StaticFriction.i \
 	SlipWeakening.i \
 	SlipWeakeningTime.i \
+	SlipWeakeningTimeStable.i \
 	SlipWeakeningStress.i \
 	RateStateAgeing.i \
 	TimeWeakening.i

Modified: short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/friction.i
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/friction.i	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/friction.i	2013-02-21 22:14:40 UTC (rev 21383)
@@ -30,6 +30,7 @@
 #include "pylith/friction/StaticFriction.hh"
 #include "pylith/friction/SlipWeakening.hh"
 #include "pylith/friction/SlipWeakeningTime.hh"
+#include "pylith/friction/SlipWeakeningTimeStable.hh"
 #include "pylith/friction/SlipWeakeningStress.hh"
 #include "pylith/friction/RateStateAgeing.hh"
 #include "pylith/friction/TimeWeakening.hh"
@@ -67,6 +68,7 @@
 %include "StaticFriction.i"
 %include "SlipWeakening.i"
 %include "SlipWeakeningTime.i"
+%include "SlipWeakeningTimeStable.i"
 %include "SlipWeakeningStress.i"
 %include "RateStateAgeing.i"
 %include "TimeWeakening.i"

Modified: short/3D/PyLith/branches/v1.7-trunk/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/pylith/Makefile.am	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/pylith/Makefile.am	2013-02-21 22:14:40 UTC (rev 21383)
@@ -71,6 +71,7 @@
 	friction/StaticFriction.py \
 	friction/SlipWeakening.py \
 	friction/SlipWeakeningTime.py \
+	friction/SlipWeakeningTimeStable.py \
 	friction/SlipWeakeningStress.py \
 	friction/RateStateAgeing.py \
 	friction/TimeWeakening.py \

Modified: short/3D/PyLith/branches/v1.7-trunk/tests/topology/test_topology.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/tests/topology/test_topology.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/tests/topology/test_topology.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -39,7 +39,7 @@
 { // main
   std::string meshFilename = "data/tet4.exo";
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv, PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Initialize Python

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/bc/test_bc.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/bc/test_bc.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/bc/test_bc.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -38,8 +38,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv,
-					 PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Initialize Python (to eliminate need to initialize when

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/faults/test_faults.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/faults/test_faults.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/faults/test_faults.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -38,8 +38,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv, 
-					 PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Initialize Python (to eliminate need to initialize when

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/feassemble/test_feassemble.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/feassemble/test_feassemble.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/feassemble/test_feassemble.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -38,8 +38,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv,
-					 PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Initialize Python (to eliminate need to initialize when

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/Makefile.am	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/Makefile.am	2013-02-21 22:14:40 UTC (rev 21383)
@@ -32,6 +32,7 @@
 	TestStaticFriction.cc \
 	TestSlipWeakening.cc \
 	TestSlipWeakeningTime.cc \
+	TestSlipWeakeningTimeStable.cc \
 	TestSlipWeakeningStress.cc \
 	TestRateStateAgeing.cc \
 	TestTimeWeakening.cc
@@ -42,6 +43,7 @@
 	TestStaticFriction.hh \
 	TestSlipWeakening.hh \
 	TestSlipWeakeningTime.hh \
+	TestSlipWeakeningTimeStable.hh \
 	TestSlipWeakeningStress.hh \
 	TestRateStateAgeing.hh \
 	TestTimeWeakening.hh
@@ -52,6 +54,7 @@
 	data/StaticFrictionData.cc \
 	data/SlipWeakeningData.cc \
 	data/SlipWeakeningTimeData.cc \
+	data/SlipWeakeningTimeStableData.cc \
 	data/SlipWeakeningStressData.cc \
 	data/RateStateAgeingData.cc \
 	data/TimeWeakeningData.cc
@@ -62,6 +65,7 @@
 	data/StaticFrictionData.hh \
 	data/SlipWeakeningData.hh \
 	data/SlipWeakeningTimeData.hh \
+	data/SlipWeakeningTimeStableData.hh \
 	data/SlipWeakeningStressData.hh \
 	data/RateStateAgeingData.hh \
 	data/TimeWeakeningData.hh

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/TestFrictionModel.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/TestFrictionModel.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -443,10 +443,11 @@
     const PylithScalar tolerance = 1.0e-06;
 
     for (int i=0; i < propertiesSize; ++i) {
-      if (fabs(propertiesE[i]) > tolerance)
+      if (fabs(propertiesE[i]) > tolerance) {
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, properties[i]/propertiesE[i], tolerance);
-      else
+      } else {
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesE[i], properties[i], tolerance);
+      } // if/else
     } // for
   } // for
 } // testDBToProperties
@@ -673,10 +674,11 @@
     
     const PylithScalar tolerance = 1.0e-06;
 
-    if (0.0 != frictionE)
+    if (0.0 != frictionE) {
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, friction/frictionE, tolerance);
-    else
+    } else {
       CPPUNIT_ASSERT_DOUBLES_EQUAL(frictionE, friction, tolerance);
+    } // if/else
   } // for
 } // _testCalcFriction
 

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/RateStateAgeingData.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/RateStateAgeingData.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/RateStateAgeingData.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -129,8 +129,8 @@
 };
 
 const PylithScalar pylith::friction::RateStateAgeingData::_friction[] = {
-  1000001.285949009547604,
-  1000001.164378652801948,
+  11.285949009547604e+5,
+  11.164378652801948e+5,
 };
 
 const PylithScalar pylith::friction::RateStateAgeingData::_slip[] = {
@@ -144,8 +144,8 @@
 };
 
 const PylithScalar pylith::friction::RateStateAgeingData::_normalTraction[] = {
-  -2.2,
-  -2.3,
+  -2.2e+5,
+  -2.3e+5,
 };
 
 const PylithScalar pylith::friction::RateStateAgeingData::_stateVarsUpdated[] = {

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningData.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningData.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningData.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -121,8 +121,8 @@
 };
 
 const PylithScalar pylith::friction::SlipWeakeningData::_friction[] = {
-  1000001.21,
-  1000001.15,
+  11.188e+5,
+  11.150e+5,
 };
 
 const PylithScalar pylith::friction::SlipWeakeningData::_slip[] = {
@@ -136,8 +136,8 @@
 };
 
 const PylithScalar pylith::friction::SlipWeakeningData::_normalTraction[] = {
-  -2.2,
-  -2.3,
+  -2.2e+5,
+  -2.3e+5,
 };
 
 const PylithScalar pylith::friction::SlipWeakeningData::_stateVarsUpdated[] = {

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningStressData.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningStressData.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningStressData.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -136,8 +136,8 @@
 };
 
 const PylithScalar pylith::friction::SlipWeakeningStressData::_normalTraction[] = {
-  -2.2,
-  -2.3,
+  -2.2e+5,
+  -2.3e+5,
 };
 
 const PylithScalar pylith::friction::SlipWeakeningStressData::_stateVarsUpdated[] = {

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningTimeData.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningTimeData.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningTimeData.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -129,13 +129,13 @@
 };
 
 const PylithScalar pylith::friction::SlipWeakeningTimeData::_friction[] = {
-  1000001.21,
-  1000001.15,
+  11.188e+5,
+  11.150e+5,
 };
 
 const PylithScalar pylith::friction::SlipWeakeningTimeData::_slip[] = {
   0.12,
-  0.25,
+  0.1,
 };
 
 const PylithScalar pylith::friction::SlipWeakeningTimeData::_slipRate[] = {
@@ -144,15 +144,15 @@
 };
 
 const PylithScalar pylith::friction::SlipWeakeningTimeData::_normalTraction[] = {
-  -2.2,
-  -2.3,
+  -2.2e+5,
+  -2.3e+5,
 };
 
 const PylithScalar pylith::friction::SlipWeakeningTimeData::_stateVarsUpdated[] = {
   0.48,
   0.12,
-  0.65,
-  0.25,
+  0.5,
+  0.1,
 };
 
 pylith::friction::SlipWeakeningTimeData::SlipWeakeningTimeData(void)

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/StaticFrictionData.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/StaticFrictionData.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/StaticFrictionData.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -84,7 +84,7 @@
 const PylithScalar* pylith::friction::StaticFrictionData::_stateVarsNondim = 0;
 
 const PylithScalar pylith::friction::StaticFrictionData::_friction[] = {
-  1000001.32,
+  11.32e+5,
   1.0e+6,
 };
 
@@ -99,8 +99,8 @@
 };
 
 const PylithScalar pylith::friction::StaticFrictionData::_normalTraction[] = {
-  -2.2,
-  0.8,
+  -2.2e+5,
+  0.8e+5,
 };
 
 const PylithScalar* pylith::friction::StaticFrictionData::_stateVarsUpdated = 0;

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/TimeWeakeningData.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/TimeWeakeningData.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/TimeWeakeningData.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -113,8 +113,8 @@
 };
 
 const PylithScalar pylith::friction::TimeWeakeningData::_friction[] = {
-  1000001.21,
-  1000001.15,
+  11.21e+5,
+  11.15e+5,
 };
 
 const PylithScalar pylith::friction::TimeWeakeningData::_slip[] = {
@@ -128,8 +128,8 @@
 };
 
 const PylithScalar pylith::friction::TimeWeakeningData::_normalTraction[] = {
-  -2.2,
-  -2.3,
+  -2.2e+5,
+  -2.3e+5,
 };
 
 const PylithScalar pylith::friction::TimeWeakeningData::_stateVarsUpdated[] = {

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/test_friction.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/test_friction.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/test_friction.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -38,8 +38,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv,
-					 PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Initialize Python (to eliminate need to initialize when

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/materials/test_materials.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/materials/test_materials.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/materials/test_materials.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -38,8 +38,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv,
-					 PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Initialize Python (to eliminate need to initialize when

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/meshio/test_meshio.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/meshio/test_meshio.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/meshio/test_meshio.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -42,7 +42,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv, PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Initialize Python

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/topology/test_topology.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/topology/test_topology.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/topology/test_topology.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -40,7 +40,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv, PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Create event manager and test controller

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/utils/test_utils.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/utils/test_utils.cc	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/utils/test_utils.cc	2013-02-21 22:14:40 UTC (rev 21383)
@@ -37,7 +37,7 @@
 
   try {
     // Initialize PETSc
-    PetscErrorCode err = PetscInitialize(&argc, &argv, PETSC_NULL, PETSC_NULL);
+    PetscErrorCode err = PetscInitialize(&argc, &argv, NULL, NULL);
     CHKERRQ(err);
 
     // Create event manager and test controller

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/Makefile.am	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/Makefile.am	2013-02-21 22:14:40 UTC (rev 21383)
@@ -31,6 +31,7 @@
 	TestStaticFriction.py \
 	TestSlipWeakening.py \
 	TestSlipWeakeningTime.py \
+	TestSlipWeakeningTimeStable.py \
 	TestSlipWeakeningStress.py \
 	TestRateStateAgeing.py \
 	TestTimeWeakening.py

Modified: short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/testfriction.py
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/testfriction.py	2013-02-20 23:18:34 UTC (rev 21382)
+++ short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/testfriction.py	2013-02-21 22:14:40 UTC (rev 21383)
@@ -71,6 +71,9 @@
     from TestSlipWeakeningTime import TestSlipWeakeningTime
     suite.addTest(unittest.makeSuite(TestSlipWeakeningTime))
 
+    from TestSlipWeakeningTimeStable import TestSlipWeakeningTimeStable
+    suite.addTest(unittest.makeSuite(TestSlipWeakeningTimeStable))
+
     from TestSlipWeakeningStress import TestSlipWeakeningStress
     suite.addTest(unittest.makeSuite(TestSlipWeakeningStress))
 



More information about the CIG-COMMITS mailing list