[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