[cig-commits] r16312 - in short/3D/PyLith/trunk: libsrc/friction unittests/libtests/friction

brad at geodynamics.org brad at geodynamics.org
Mon Feb 22 16:11:34 PST 2010


Author: brad
Date: 2010-02-22 16:11:33 -0800 (Mon, 22 Feb 2010)
New Revision: 16312

Modified:
   short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc
   short/3D/PyLith/trunk/libsrc/friction/FrictionModel.hh
   short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.cc
   short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.hh
   short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.cc
   short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.hh
   short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
Log:
Worked on fixing unit tests for updateStateVars() for friction models.

Modified: short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc	2010-02-22 23:19:23 UTC (rev 16311)
+++ short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc	2010-02-23 00:11:33 UTC (rev 16312)
@@ -639,12 +639,25 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
+pylith::friction::FrictionModel::updateStateVars(const double slip,
+						 const double slipRate,
+						 const double normalTraction)
+{ // updateStateVars
+  _updateStateVars(slip, slipRate, normalTraction,
+		   &_stateVarsVertex[0], _stateVarsVertex.size(),
+		   &_propertiesVertex[0], _propertiesVertex.size());
+} // updateStateVars
+
+// ----------------------------------------------------------------------
+// Update state variables (for next time step).
+void
 pylith::friction::FrictionModel::_updateStateVars(const double slip,
-						  const double slipRate,
-						  double* const stateVars,
-						  const int numStateVars,
-						  const double* properties,
-						  const int numProperties)
+    const double slipRate,
+    const double normalTraction,
+    double* const stateVars,
+    const int numStateVars,
+    const double* properties,
+    const int numProperties)
 { // _updateStateVars
 } // _updateStateVars
 
@@ -652,8 +665,8 @@
 // Get indices for physical property or state variable field.
 void
 pylith::friction::FrictionModel::_findField(int* propertyIndex,
-					int* stateVarIndex,
-					const char* name) const
+					    int* stateVarIndex,
+					    const char* name) const
 { // _findField
   assert(0 != propertyIndex);
   assert(0 != stateVarIndex);

Modified: short/3D/PyLith/trunk/libsrc/friction/FrictionModel.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/FrictionModel.hh	2010-02-22 23:19:23 UTC (rev 16311)
+++ short/3D/PyLith/trunk/libsrc/friction/FrictionModel.hh	2010-02-23 00:11:33 UTC (rev 16312)
@@ -178,6 +178,19 @@
                       const double slipRate,
                       const double normalTraction);
   
+  /** Compute friction at vertex.
+   *
+   * @pre Must call retrievePropsAndVars for cell before calling
+   * calcFriction().
+   *
+   * @param slip Current slip at location.
+   * @param slipRate Current slip rate at location.
+   * @param normalTraction Normal traction at location.
+   */
+  void updateStateVars(const double slip,
+		       const double slipRate,
+		       const double normalTraction);
+  
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
 
@@ -258,6 +271,9 @@
 
   /** Update state variables (for next time step).
    *
+   * @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.
@@ -266,6 +282,7 @@
   virtual
   void _updateStateVars(const double slip,
 			const double slipRate,
+			const double normalTraction,
 			double* const stateVars,
 			const int numStateVars,
 			const double* properties,

Modified: short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.cc	2010-02-22 23:19:23 UTC (rev 16311)
+++ short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.cc	2010-02-23 00:11:33 UTC (rev 16312)
@@ -303,12 +303,12 @@
 void
 pylith::friction::RateStateAgeing::_updateStateVars(const double slip,
 						  const double slipRate,
+						  const double normalTraction,
 						  double* const stateVars,
 						  const int numStateVars,
 						  const double* properties,
 						  const int numProperties)
 { // _updateStateVars
-
   assert(0 != numStateVars);
   assert(0 != numProperties);
 
@@ -336,8 +336,9 @@
 
   stateVars[s_state] = thetaTpdtVertex;
 
+  std::cout << "STATEVAR before: " << thetaTVertex << ", after: " << thetaTpdtVertex << std::endl;
+
   PetscLogFlops(6);
-    
 } // _updateStateVars
 
 

Modified: short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.hh	2010-02-22 23:19:23 UTC (rev 16311)
+++ short/3D/PyLith/trunk/libsrc/friction/RateStateAgeing.hh	2010-02-23 00:11:33 UTC (rev 16312)
@@ -91,7 +91,6 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  virtual
   void _dbToStateVars(double* const stateValues,
 		      const double_array& dbValues) const;
 
@@ -100,7 +99,6 @@
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  virtual
   void _nondimStateVars(double* const values,
 			   const int nvalues) const;
   
@@ -109,7 +107,6 @@
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  virtual
   void _dimStateVars(double* const values,
 			const int nvalues) const;
 
@@ -130,9 +127,20 @@
 		       const int numProperties,
 		       const double* stateVars,
 		       const int numStateVars);
-  virtual
+
+  /** Update state variables (for next time step).
+   *
+   * @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 double slip,
 			const double slipRate,
+			const double normalTraction,
 			double* const stateVars,
 			const int numStateVars,
 			const double* properties,

Modified: short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.cc	2010-02-22 23:19:23 UTC (rev 16311)
+++ short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.cc	2010-02-23 00:11:33 UTC (rev 16312)
@@ -277,20 +277,20 @@
 void
 pylith::friction::SlipWeakening::_updateStateVars(const double slip,
 						  const double slipRate,
+						  const double normalTraction,
 						  double* const stateVars,
 						  const int numStateVars,
 						  const double* properties,
 						  const int numProperties)
 { // _updateStateVars
-
   assert(0 != numStateVars);
   assert(0 != numProperties);
 
-  const double tmpPreviousSlip = stateVars[s_slipPrev];
+  const double slipPrev = stateVars[s_slipPrev];
  
   stateVars[s_slipPrev] = stateVars[s_slipCum];
-  stateVars[s_slipCum] += fabs(slip - tmpPreviousSlip);
-    
+  stateVars[s_slipCum] += fabs(slip - slipPrev);
+ 
 } // _updateStateVars
 
 

Modified: short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.hh	2010-02-22 23:19:23 UTC (rev 16311)
+++ short/3D/PyLith/trunk/libsrc/friction/SlipWeakening.hh	2010-02-23 00:11:33 UTC (rev 16312)
@@ -80,7 +80,6 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  virtual
   void _dbToStateVars(double* const stateValues,
 		      const double_array& dbValues) const;
 
@@ -89,7 +88,6 @@
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  virtual
   void _nondimStateVars(double* const values,
 			   const int nvalues) const;
   
@@ -98,7 +96,6 @@
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  virtual
   void _dimStateVars(double* const values,
 			const int nvalues) const;
 
@@ -119,13 +116,24 @@
 		       const int numProperties,
 		       const double* stateVars,
 		       const int numStateVars);
-  virtual
+
+  /** Update state variables (for next time step).
+   *
+   * @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 double slip,
-			const double slipRate,
-			double* const stateVars,
-			const int numStateVars,
-			const double* properties,
-			const int numProperties);
+      const double slipRate,
+      const double normalTraction,
+      double* const stateVars,
+      const int numStateVars,
+      const double* properties,
+      const int numProperties);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc	2010-02-22 23:19:23 UTC (rev 16311)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc	2010-02-23 00:11:33 UTC (rev 16312)
@@ -15,11 +15,14 @@
 #include "TestFrictionModel.hh" // Implementation of class methods
 
 #include "data/StaticFrictionData.hh" // USES StaticFrictionData
+#include "data/SlipWeakeningData.hh" // USES SlipWeakeningData
 
+#include "pylith/friction/StaticFriction.hh" // USES StaticFriction
+#include "pylith/friction/SlipWeakening.hh" // USES SlipWeakening
+
 #include "pylith/topology/SubMesh.hh" // USES SubMesh
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
-#include "pylith/friction/StaticFriction.hh" // USES StaticFriction
 #include "pylith/faults/FaultCohesiveDyn.hh" // USES FaultCohesiveDyn
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
 #include "pylith/feassemble/GeometryLine2D.hh" // USES GeometryLine2D
@@ -294,8 +297,57 @@
 void
 pylith::friction::TestFrictionModel::testUpdateStateVars(void)
 { // testUpdateStateVars
-  std::cout << "\n\nWARNING!! WARNING!! WARNING!!\n"
-    "Need to implement using friction model with state variables.\n\n";
+  { // Test with friction model without state variables
+    topology::Mesh mesh;
+    faults::FaultCohesiveDyn fault;
+    StaticFriction friction;
+    StaticFrictionData data;
+    _initialize(&mesh, &fault, &friction, &data);
+    
+    const double slip = 1.2;
+    const double slipRate = -2.3;
+    const double normalTraction = -2.4;
+    const int vertex = 2;
+    
+    friction.retrievePropsAndVars(vertex);
+    friction.updateStateVars(slip, slipRate, normalTraction);
+    
+    // no outcome to test
+  } // Test with friction model without state variables
+
+  { // Test with friction model with state variables (slip weakening)
+    // Initialize uses static friction, so we hardwire the properties
+    // and stateVars
+    const double slip = 0.25;
+    const double slipRate = 0.64;
+    const double normalTraction = -2.3;
+    
+    const size_t numProperties = 3;
+    const double properties[3] = { 0.6, 0.5, 0.004 };
+    const size_t numStateVars = 2;
+    const double stateVars[2] = { 0.5, 0.1 };
+    const double stateVarsUpdated[2] = { 0.65, 0.5 };
+    
+    SlipWeakening friction;
+
+    friction._propertiesVertex.resize(numProperties);
+    for (size_t i=0; i < numProperties; ++i)
+      friction._propertiesVertex[i] = properties[i];
+    friction._stateVarsVertex.resize(numStateVars);
+    for (size_t i=0; i < numStateVars; ++i)
+      friction._stateVarsVertex[i] = stateVars[i];
+
+    friction.updateStateVars(slip, slipRate, normalTraction);
+    
+    CPPUNIT_ASSERT_EQUAL(numStateVars, friction._stateVarsVertex.size());
+
+    const double tolerance = 1.0e-06;
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsUpdated[0],
+				 friction._stateVarsVertex[0], tolerance);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsUpdated[1],
+				 friction._stateVarsVertex[1], tolerance);
+  } // Test with friction model with state variables (slip weakening)
+
 } // testUpdateStateVars
 
 // ----------------------------------------------------------------------
@@ -588,12 +640,13 @@
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     const double slip = _data->slip[iLoc];
     const double slipRate = _data->slipRate[iLoc];
+    const double normalTraction = _data->normalTraction[iLoc];
     for (int i=0; i < numPropsVertex; ++i)
       properties[i] = _data->properties[iLoc*numPropsVertex+i];
     for (int i=0; i < numVarsVertex; ++i)
       stateVars[i] = _data->stateVars[iLoc*numVarsVertex+i];
 
-    _friction->_updateStateVars(slip, slipRate,
+    _friction->_updateStateVars(slip, slipRate, normalTraction,
 				&stateVars[0], stateVars.size(),
 				&properties[0], properties.size());
     
@@ -603,13 +656,19 @@
 		    (0 == numVarsVertex && 0 == stateVarsE) );
 
     const double tolerance = 1.0e-06;
-    for (int i=0; i < numVarsVertex; ++i)
+    for (int i=0; i < numVarsVertex; ++i) {
+#if 1 // DEBUGGING
+      std::cout << "valE: " << stateVarsE[i] 
+		<< ", val: " << stateVars[i]
+		<< std::endl;
+#endif
       if (0.0 != stateVarsE[i])
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i], 
 				     tolerance);
       else
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i],
 				     tolerance);
+    } // for
   } // for
 } // test_updateStateVars
 



More information about the CIG-COMMITS mailing list