[cig-commits] r15228 - in short/3D/PyLith/trunk: . libsrc/materials unittests/libtests/materials unittests/libtests/materials/data
brad at geodynamics.org
brad at geodynamics.org
Fri Jun 12 22:52:07 PDT 2009
Author: brad
Date: 2009-06-12 22:52:06 -0700 (Fri, 12 Jun 2009)
New Revision: 15228
Modified:
short/3D/PyLith/trunk/TODO
short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.cc
short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am
short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc
short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.hh
short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElastic.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh
short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh
Log:
Updated generalized Maxwell C++ elastic unit tests.
Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/TODO 2009-06-13 05:52:06 UTC (rev 15228)
@@ -6,15 +6,20 @@
petsc-dev doesn't build on the cygwin buildbot (`_vsnprintf' undeclared)
http://www.geodynamics.org:8009/?project=PETSc
+ * Needed for cywgin binaries
+
+ * Matt is going to email Leif instructions for how to remove this test from
+ the PETSc configure.
+
Generalized maxwell model
+ * Brad is working on updating the C++ unit tests.
+
Need power-law full-scale "test" to insure that the power-law and
nonlinear solve give reasonable results.
- petsc-dev now may be having problems on the Darwin buildbots
+BUGS
-
-BUGS
malloc during assembly when running in parallel
----------------------------------------------------------------------
Modified: short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.cc 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.cc 2009-06-13 05:52:06 UTC (rev 15228)
@@ -34,6 +34,9 @@
namespace materials {
namespace _GenMaxwellIsotropic3D{
+ /// Number of Maxwell models in parallel.
+ const int numMaxwellModels = 3;
+
// Dimension of material.
const int dimension = 3;
@@ -44,13 +47,10 @@
const int numElasticConsts = 21;
/// Number of physical properties.
- const int numProperties = 7;
+ const int numProperties = 5;
- /// Number of Maxwell models in parallel.
- const int numMaxwellModels = 3;
-
/// Physical properties.
- const Metadata::ParamDescription properties[] = {
+ const Metadata::ParamDescription properties[numProperties] = {
{ "density", 1, pylith::topology::FieldBase::SCALAR },
{ "mu", 1, pylith::topology::FieldBase::SCALAR },
{ "lambda", 1, pylith::topology::FieldBase::SCALAR },
@@ -60,8 +60,8 @@
// Values expected in properties spatial database. :KLUDGE: Not
// generalized over number of models.
const int numDBProperties = 3 + 2*numMaxwellModels;
- const char* dbProperties[] = {
- "density", "vs", "vp" ,
+ const char* dbProperties[numDBProperties] = {
+ "density", "vs", "vp",
"shear_ratio_1",
"shear_ratio_2",
"shear_ratio_3",
@@ -74,7 +74,7 @@
const int numStateVars = 1+numMaxwellModels;
/// State variables. :KLUDGE: Not generalized over number of models.
- const Metadata::ParamDescription stateVars[] = {
+ const Metadata::ParamDescription stateVars[numStateVars] = {
{ "total_strain", tensorSize, pylith::topology::FieldBase::TENSOR },
{ "viscous_strain_1", tensorSize, pylith::topology::FieldBase::TENSOR },
{ "viscous_strain_2", tensorSize, pylith::topology::FieldBase::TENSOR },
@@ -83,30 +83,30 @@
// Values expected in state variables spatial database
const int numDBStateVars = tensorSize + numMaxwellModels*tensorSize;
- const char* dbStateVars[] = {"total-strain-xx",
- "total-strain-yy",
- "total-strain-zz",
- "total-strain-xy",
- "total-strain-yz",
- "total-strain-xz",
- "viscous-strain1-xx",
- "viscous-strain1-yy",
- "viscous-strain1-zz",
- "viscous-strain1-xy",
- "viscous-strain1-yz",
- "viscous-strain1-xz",
- "viscous-strain2-xx",
- "viscous-strain2-yy",
- "viscous-strain2-zz",
- "viscous-strain2-xy",
- "viscous-strain2-yz",
- "viscous-strain2-xz",
- "viscous-strain3-xx",
- "viscous-strain3-yy",
- "viscous-strain3-zz",
- "viscous-strain3-xy",
- "viscous-strain3-yz",
- "viscous-strain3-xz",
+ const char* dbStateVars[numDBStateVars] = {"total-strain-xx",
+ "total-strain-yy",
+ "total-strain-zz",
+ "total-strain-xy",
+ "total-strain-yz",
+ "total-strain-xz",
+ "viscous-strain-1-xx",
+ "viscous-strain-1-yy",
+ "viscous-strain-1-zz",
+ "viscous-strain-1-xy",
+ "viscous-strain-1-yz",
+ "viscous-strain-1-xz",
+ "viscous-strain-2-xx",
+ "viscous-strain-2-yy",
+ "viscous-strain-2-zz",
+ "viscous-strain-2-xy",
+ "viscous-strain-2-yz",
+ "viscous-strain-2-xz",
+ "viscous-strain-3-xx",
+ "viscous-strain-3-yy",
+ "viscous-strain-3-zz",
+ "viscous-strain-3-xy",
+ "viscous-strain-3-yz",
+ "viscous-strain-3-xz",
};
} // _GenMaxwellIsotropic3D
@@ -139,8 +139,7 @@
pylith::materials::GenMaxwellIsotropic3D::db_vs + 1;
const int pylith::materials::GenMaxwellIsotropic3D::db_shearRatio =
- pylith::materials::GenMaxwellIsotropic3D::db_vp +
- pylith::materials::_GenMaxwellIsotropic3D::numMaxwellModels;
+ pylith::materials::GenMaxwellIsotropic3D::db_vp + 1;
const int pylith::materials::GenMaxwellIsotropic3D::db_viscosity =
pylith::materials::GenMaxwellIsotropic3D::db_shearRatio +
@@ -195,7 +194,7 @@
_updateStateVarsFn(0)
{ // constructor
useElasticBehavior(true);
- _viscousStrain.resize(_GenMaxwellIsotropic3D::numMaxwellModels*_tensorSize);
+ _viscousStrain.resize(_tensorSize);
} // constructor
// ----------------------------------------------------------------------
@@ -756,13 +755,10 @@
for (int iComp=0; iComp < tensorSize; ++iComp) {
devStrain = totalStrain[iComp] - diag[iComp] * meanStrainTpdt;
// Maxwell model 1
- shearRatio = properties[p_shearRatio + 0];
stateVars[s_viscousStrain1+iComp] = devStrain;
// Maxwell model 2
- shearRatio = properties[p_shearRatio + 1];
stateVars[s_viscousStrain2+iComp] = devStrain;
// Maxwell model 3
- shearRatio = properties[p_shearRatio + 2];
stateVars[s_viscousStrain3+iComp] = devStrain;
} // for
PetscLogFlops(3 + 2 * tensorSize);
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am 2009-06-13 05:52:06 UTC (rev 15228)
@@ -30,14 +30,12 @@
TestElasticPlaneStress.cc \
TestElasticIsotropic3D.cc \
TestMaxwellIsotropic3D.cc \
+ TestGenMaxwellIsotropic3D.cc \
TestPowerLaw3D.cc \
TestEffectiveStress.cc \
test_materials.cc
-# TestGenMaxwellIsotropic3D.cc
-
-
noinst_HEADERS = \
TestMaterial.hh \
TestElasticMaterial.hh \
@@ -62,10 +60,10 @@
data/ElasticIsotropic3DData.cc \
data/MaxwellIsotropic3DElasticData.cc \
data/MaxwellIsotropic3DTimeDepData.cc \
+ data/GenMaxwellIsotropic3DElasticData.cc \
data/PowerLaw3DElasticData.cc \
data/PowerLaw3DTimeDepData.cc
-# data/GenMaxwellIsotropic3DElasticData.cc \
# data/GenMaxwellIsotropic3DTimeDepData.cc
noinst_HEADERS += \
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc 2009-06-13 05:52:06 UTC (rev 15228)
@@ -29,8 +29,10 @@
{ // setUp
_material = new GenMaxwellIsotropic3D();
_matElastic = new GenMaxwellIsotropic3D();
+
_data = new GenMaxwellIsotropic3DElasticData();
_dataElastic = new GenMaxwellIsotropic3DElasticData();
+ setupNormalizer();
} // setUp
// ----------------------------------------------------------------------
@@ -65,31 +67,31 @@
material._calcStressFn);
CPPUNIT_ASSERT_EQUAL(&pylith::materials::GenMaxwellIsotropic3D::_calcElasticConstsElastic,
material._calcElasticConstsFn);
- CPPUNIT_ASSERT_EQUAL(&pylith::materials::GenMaxwellIsotropic3D::_updatePropertiesElastic,
- material._updatePropertiesFn);
+ CPPUNIT_ASSERT_EQUAL(&pylith::materials::GenMaxwellIsotropic3D::_updateStateVarsElastic,
+ material._updateStateVarsFn);
material.useElasticBehavior(false);
CPPUNIT_ASSERT_EQUAL(&pylith::materials::GenMaxwellIsotropic3D::_calcStressViscoelastic,
material._calcStressFn);
CPPUNIT_ASSERT_EQUAL(&pylith::materials::GenMaxwellIsotropic3D::_calcElasticConstsViscoelastic,
material._calcElasticConstsFn);
- CPPUNIT_ASSERT_EQUAL(&pylith::materials::GenMaxwellIsotropic3D::_updatePropertiesViscoelastic,
- material._updatePropertiesFn);
+ CPPUNIT_ASSERT_EQUAL(&pylith::materials::GenMaxwellIsotropic3D::_updateStateVarsViscoelastic,
+ material._updateStateVarsFn);
} // testUseElasticBehavior
// ----------------------------------------------------------------------
-// Test usesUpdateProperties()
+// Test usesHasStateVars()
void
-pylith::materials::TestGenMaxwellIsotropic3D::testUsesUpdateProperties(void)
-{ // testUsesUpdateProperties
+pylith::materials::TestGenMaxwellIsotropic3D::testHasStateVars(void)
+{ // testHasStateVars
GenMaxwellIsotropic3D material;
- CPPUNIT_ASSERT_EQUAL(true, material.usesUpdateProperties());
-} // testUsesUpdateProperties
+ CPPUNIT_ASSERT_EQUAL(true, material.hasStateVars());
+} // testHasStateVars
// ----------------------------------------------------------------------
// Test calcStressElastic()
void
-pylith::materials::TestGenMaxwellIsotropic3D::testCalcStressElastic(void)
+pylith::materials::TestGenMaxwellIsotropic3D::test_calcStressElastic(void)
{ // testCalcStressElastic
CPPUNIT_ASSERT(0 != _matElastic);
_matElastic->useElasticBehavior(true);
@@ -100,7 +102,7 @@
// ----------------------------------------------------------------------
// Test calcElasticConstsElastic()
void
-pylith::materials::TestGenMaxwellIsotropic3D::testCalcElasticConstsElastic(void)
+pylith::materials::TestGenMaxwellIsotropic3D::test_calcElasticConstsElastic(void)
{ // testElasticConstsElastic
CPPUNIT_ASSERT(0 != _matElastic);
_matElastic->useElasticBehavior(true);
@@ -109,68 +111,81 @@
} // testElasticConstsElastic
// ----------------------------------------------------------------------
-// Test updatePropertiesElastic()
+// Test updateStateVarsElastic()
void
-pylith::materials::TestGenMaxwellIsotropic3D::testUpdatePropertiesElastic(void)
-{ // testUpdatePropertiesElastic
+pylith::materials::TestGenMaxwellIsotropic3D::test_updateStateVarsElastic(void)
+{ // testUpdateStateVarsElastic
+ // :TODO: Use TestElasticMaterial::test_updateStateVars
+ // instead. This requires moving the calculation of the expected
+ // state vars below to the Python code (where it belongs) and
+ // setting the stateVarsUpdate attribute in the Python object.
+
GenMaxwellIsotropic3D material;
- GenMaxwellIsotropic3DElasticData data;
+ material.useElasticBehavior(true);
- const int numParams = data.numParameters;
- const int numParamsQuadPt = data.numParamsQuadPt;
+ const bool computeStateVars = true;
+
+ const int numLocs = _dataElastic->numLocs;
+ const int numPropsQuadPt = _dataElastic->numPropsQuadPt;
+ const int numVarsQuadPt = _dataElastic->numVarsQuadPt;
+ const int tensorSize = material.tensorSize();
+
+ double_array stress(tensorSize);
+ double_array properties(numPropsQuadPt);
+ double_array stateVars(numVarsQuadPt);
+ double_array strain(tensorSize);
+ double_array initialStress(tensorSize);
+ double_array initialStrain(tensorSize);
+
+ for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+ memcpy(&properties[0], &_dataElastic->properties[iLoc*numPropsQuadPt],
+ numPropsQuadPt*sizeof(double));
+ memcpy(&stateVars[0], &_dataElastic->stateVars[iLoc*numVarsQuadPt],
+ numVarsQuadPt*sizeof(double));
+ memcpy(&strain[0], &_dataElastic->strain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStress[0], &_dataElastic->initialStress[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStrain[0], &_dataElastic->initialStrain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
- const int tensorSize = 6;
- const int initialStateSize = 6;
- double_array totalStrain(tensorSize);
- double_array initialState(initialStateSize);
- for (int i=0; i < tensorSize; ++i) {
- totalStrain[i] = i;
- initialState[i] = 0.1*i;
- } // for
+ const double meanStrain = (strain[0] + strain[1] + strain[2]) / 3.0;
+
+ // Compute expected state variables
+ double_array stateVarsE(numVarsQuadPt);
+ const int s_totalStrain = 0;
+ const int s_viscousStrain = s_totalStrain + tensorSize;
- const double meanStrain =
- (totalStrain[0] + totalStrain[1] + totalStrain[2]) / 3.0;
+ // State variable 'total_strain' should match 'strain'
+ for (int i=0; i < tensorSize; ++i)
+ stateVarsE[s_totalStrain+i] = strain[i];
+
+ // State variable 'viscous_strain'
+ const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+ const int numMaxwellModels = 3;
+ for (int imodel=0; imodel < numMaxwellModels; ++imodel)
+ for (int i=0; i < tensorSize; ++i)
+ stateVarsE[s_viscousStrain+imodel*tensorSize+i] =
+ strain[i] - diag[i]*meanStrain;
- double_array parameters(numParamsQuadPt);
- double_array parametersE(numParamsQuadPt);
- for (int i=0, index=0; i < numParams; ++i)
- for (int j=0; j < data.numParamValues[i]; ++j, ++index) {
- parametersE[index] = i+j;
- parameters[index] = i+j;
- } // for
+ material._updateStateVars(&stateVars[0], stateVars.size(),
+ &properties[0], properties.size(),
+ &strain[0], strain.size(),
+ &initialStress[0], initialStress.size(),
+ &initialStrain[0], initialStrain.size());
- // Set up vector parameters, which are the only ones updated.
- const int numMaxwellModels = 3;
- const int pidStrainT = 3 + 2 * numMaxwellModels;
- const int pidVisStrain = pidStrainT + tensorSize;
- for (int i=0; i < 3; ++i) {
- parametersE[pidStrainT + i] = totalStrain[i];
- for (int j=0; j < numMaxwellModels; ++j)
- parametersE[pidVisStrain + i + j * tensorSize] =
- totalStrain[i] - meanStrain;
+ const double tolerance = 1.0e-06;
+ for (int i=0; i < numVarsQuadPt; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i], tolerance);
} // for
-
- for (int i=3; i < 6; ++i) {
- parametersE[pidStrainT + i] = totalStrain[i];
- for (int j=0; j < numMaxwellModels; ++j)
- parametersE[pidVisStrain + i + j * tensorSize] =
- totalStrain[i];
- } // for
-
- material._updateProperties(¶meters[0], numParamsQuadPt,
- &totalStrain[0], tensorSize,
- &initialState[0], initialStateSize);
+} // testUpdateStateVarsElastic
- const double tolerance = 1.0e-06;
- for (int i=0; i < numParamsQuadPt; ++i)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(parametersE[i], parameters[i], tolerance);
-} // testUpdatePropertiesElastic
-
// ----------------------------------------------------------------------
// Test calcStressTimeDep()
void
-pylith::materials::TestGenMaxwellIsotropic3D::testCalcStressTimeDep(void)
+pylith::materials::TestGenMaxwellIsotropic3D::test_calcStressTimeDep(void)
{ // testCalcStressTimeDep
+#if 0
CPPUNIT_ASSERT(0 != _matElastic);
_matElastic->useElasticBehavior(false);
@@ -179,13 +194,15 @@
double dt = 2.0e+5;
_matElastic->timeStep(dt);
test_calcStress();
+#endif
} // testCalcStressTimeDep
// ----------------------------------------------------------------------
// Test calcElasticConstsTimeDep()
void
-pylith::materials::TestGenMaxwellIsotropic3D::testCalcElasticConstsTimeDep(void)
+pylith::materials::TestGenMaxwellIsotropic3D::test_calcElasticConstsTimeDep(void)
{ // testElasticConstsTimeDep
+#if 0
CPPUNIT_ASSERT(0 != _matElastic);
_matElastic->useElasticBehavior(false);
@@ -194,13 +211,103 @@
double dt = 2.0e+5;
_matElastic->timeStep(dt);
test_calcElasticConsts();
+#endif
} // testElasticConstsTimeDep
// ----------------------------------------------------------------------
-// Test updatePropertiesTimeDep()
+// Test updateStateVarsTimeDep()
void
-pylith::materials::TestGenMaxwellIsotropic3D::testUpdatePropertiesTimeDep(void)
-{ // testUpdatePropertiesTimeDep
+pylith::materials::TestGenMaxwellIsotropic3D::test_updateStateVarsTimeDep(void)
+{ // testUpdateStateVarsTimeDep
+#if 0
+ // :TODO: Use TestElasticMaterial::test_updateStateVars
+ // instead. This requires moving the calculation of the expected
+ // state vars below to the Python code (where it belongs) and
+ // setting the stateVarsUpdate attribute in the Python object.
+
+ MaxwellIsotropic3D material;
+ material.useElasticBehavior(false);
+
+ delete _dataElastic; _dataElastic = new MaxwellIsotropic3DTimeDepData();
+
+ const double dt = 2.0e+5;
+ material.timeStep(dt);
+
+ const bool computeStateVars = true;
+
+ const int numLocs = _dataElastic->numLocs;
+ const int numPropsQuadPt = _dataElastic->numPropsQuadPt;
+ const int numVarsQuadPt = _dataElastic->numVarsQuadPt;
+ const int tensorSize = material.tensorSize();
+
+ double_array stress(tensorSize);
+ double_array properties(numPropsQuadPt);
+ double_array stateVars(numVarsQuadPt);
+ double_array strain(tensorSize);
+ double_array initialStress(tensorSize);
+ double_array initialStrain(tensorSize);
+
+ for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+ memcpy(&properties[0], &_dataElastic->properties[iLoc*numPropsQuadPt],
+ numPropsQuadPt*sizeof(double));
+ memcpy(&stateVars[0], &_dataElastic->stateVars[iLoc*numVarsQuadPt],
+ numVarsQuadPt*sizeof(double));
+ memcpy(&strain[0], &_dataElastic->strain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStress[0], &_dataElastic->initialStress[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStrain[0], &_dataElastic->initialStrain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+
+ const double meanStrain = (strain[0] + strain[1] + strain[2]) / 3.0;
+
+ // Compute expected state variables
+ double_array stateVarsE(numVarsQuadPt);
+ const int s_totalStrain = 0;
+ const int s_viscousStrain = s_totalStrain + tensorSize;
+
+ // State variable 'total_strain' should match 'strain'
+ for (int i=0; i < tensorSize; ++i)
+ stateVarsE[s_totalStrain+i] = strain[i];
+
+ // State variable 'viscous_strain'
+ const double meanStrainTpdt =
+ (strain[0] + strain[1] + strain[2]) / 3.0;
+ const double meanStrainT =
+ (stateVars[s_totalStrain+0] +
+ stateVars[s_totalStrain+1] +
+ stateVars[s_totalStrain+2]) / 3.0;
+
+ const int p_maxwellTime = 3;
+ const double maxwellTime = properties[p_maxwellTime];
+ const double dq = maxwellTime*(1.0-exp(-dt/maxwellTime))/dt;
+ const double expFac = exp(-dt/maxwellTime);
+ double devStrainTpdt = 0.0;
+ double devStrainT = 0.0;
+
+ const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+ for (int i=0; i < tensorSize; ++i) {
+ devStrainTpdt = strain[i] - diag[i]*meanStrainTpdt;
+ devStrainT = stateVars[s_totalStrain+i] - diag[i]*meanStrainT;
+ stateVarsE[s_viscousStrain+i] =
+ expFac * stateVars[s_viscousStrain+i] +
+ dq * (devStrainTpdt - devStrainT);
+ } //for
+
+ material._updateStateVars(&stateVars[0], stateVars.size(),
+ &properties[0], properties.size(),
+ &strain[0], strain.size(),
+ &initialStress[0], initialStress.size(),
+ &initialStrain[0], initialStrain.size());
+
+ const double tolerance = 1.0e-06;
+ for (int i=0; i < numVarsQuadPt; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i], tolerance);
+ } // for
+
+
+
+
GenMaxwellIsotropic3D material;
GenMaxwellIsotropic3DTimeDepData data;
@@ -288,25 +395,28 @@
} // for
} // for
- material._updateProperties(¶meters[0], numParamsQuadPt,
+ material._updateStateVars(¶meters[0], numParamsQuadPt,
&totalStrainTpdt[0], tensorSize,
&initialState[0], initialStateSize);
const double tolerance = 1.0e-06;
for (int i=0; i < numParamsQuadPt; ++i)
CPPUNIT_ASSERT_DOUBLES_EQUAL(parametersE[i], parameters[i], tolerance);
-} // testUpdatePropertiesTimeDep
+#endif
+} // testUpdateStateVarsTimeDep
// ----------------------------------------------------------------------
// Test _stableTimeStepImplicit()
void
pylith::materials::TestGenMaxwellIsotropic3D::test_stableTimeStepImplicit(void)
{ // test_stableTimeStepImplicit
+#if 0
CPPUNIT_ASSERT(0 != _matElastic);
delete _dataElastic; _dataElastic = new GenMaxwellIsotropic3DTimeDepData();
TestElasticMaterial::test_stableTimeStepImplicit();
+#endif
} // test_stableTimeStepImplicit
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.hh 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestGenMaxwellIsotropic3D.hh 2009-06-13 05:52:06 UTC (rev 15228)
@@ -26,7 +26,6 @@
/// Namespace for pylith package
namespace pylith {
namespace materials {
- class GenMaxwellIsotropic3D;
class TestGenMaxwellIsotropic3D;
class GenMaxwellIsotropic3DElasticData;
class GenMaxwellIsotropic3DTimeDepData;
@@ -40,22 +39,29 @@
// CPPUNIT TEST SUITE /////////////////////////////////////////////////
CPPUNIT_TEST_SUITE( TestGenMaxwellIsotropic3D );
+ CPPUNIT_TEST( testDimension );
+ CPPUNIT_TEST( testTensorSize );
CPPUNIT_TEST( testDBToProperties );
- CPPUNIT_TEST( testDBValues );
- CPPUNIT_TEST( testProperties );
+ CPPUNIT_TEST( testNonDimProperties );
+ CPPUNIT_TEST( testDimProperties );
+ CPPUNIT_TEST( testDBToStateVars );
+ CPPUNIT_TEST( testNonDimStateVars );
+ CPPUNIT_TEST( testDimStateVars );
CPPUNIT_TEST( test_calcDensity );
+ CPPUNIT_TEST( test_stableTimeStepImplicit );
+ // Need to test Maxwell viscoelastic specific behavior.
CPPUNIT_TEST( testTimeStep );
CPPUNIT_TEST( testUseElasticBehavior );
- CPPUNIT_TEST( testCalcStressElastic );
- CPPUNIT_TEST( testCalcStressTimeDep );
- CPPUNIT_TEST( testCalcElasticConstsElastic );
- CPPUNIT_TEST( testCalcElasticConstsTimeDep );
- CPPUNIT_TEST( testUsesUpdateProperties );
- CPPUNIT_TEST( testUpdatePropertiesElastic );
- CPPUNIT_TEST( testUpdatePropertiesTimeDep );
- CPPUNIT_TEST( test_stableTimeStepImplicit );
+ CPPUNIT_TEST( testHasStateVars );
+ CPPUNIT_TEST( test_calcStressElastic );
+ CPPUNIT_TEST( test_calcStressTimeDep );
+ CPPUNIT_TEST( test_calcElasticConstsElastic );
+ CPPUNIT_TEST( test_calcElasticConstsTimeDep );
+ CPPUNIT_TEST( test_updateStateVarsElastic );
+ CPPUNIT_TEST( test_updateStateVarsTimeDep );
+
CPPUNIT_TEST_SUITE_END();
// PUBLIC METHODS /////////////////////////////////////////////////////
@@ -70,26 +76,26 @@
/// Test useElasticBehavior()
void testUseElasticBehavior(void);
- /// Test usesUpdateProperties()
- void testUsesUpdateProperties(void);
+ /// Test hasStateVars()
+ void testHasStateVars(void);
- /// Test calcStressElastic()
- void testCalcStressElastic(void);
+ /// Test _calcStressElastic()
+ void test_calcStressElastic(void);
- /// Test calcStressTimeDep()
- void testCalcStressTimeDep(void);
+ /// Test _calcElasticConstsElastic()
+ void test_calcElasticConstsElastic(void);
- /// Test calcElasticConstsElastic()
- void testCalcElasticConstsElastic(void);
+ /// Test _updateStateVarsElastic()
+ void test_updateStateVarsElastic(void);
- /// Test calcElasticConstsTimeDep()
- void testCalcElasticConstsTimeDep(void);
+ /// Test _calcStressTimeDep()
+ void test_calcStressTimeDep(void);
- /// Test updatePropertiesElastic()
- void testUpdatePropertiesElastic(void);
+ /// Test _calcElasticConstsTimeDep()
+ void test_calcElasticConstsTimeDep(void);
- /// Test updatePropertiesTimeDep()
- void testUpdatePropertiesTimeDep(void);
+ /// Test _updateStatevarsTimeDep()
+ void test_updateStateVarsTimeDep(void);
/// Test _stableTimeStepImplicit()
void test_stableTimeStepImplicit(void);
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElastic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElastic.py 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElastic.py 2009-06-13 05:52:06 UTC (rev 15228)
@@ -20,6 +20,11 @@
import numpy
# ----------------------------------------------------------------------
+dimension = 3
+numElasticConsts = 21
+tensorSize = 6
+numMaxwellModels = 3
+
# GenMaxwellIsotropic3DElastic class
class GenMaxwellIsotropic3DElastic(ElasticMaterialApp):
"""
@@ -35,103 +40,137 @@
"""
ElasticMaterialApp.__init__(self, name)
- self.dimension = 3
- self.tensorSize = 6
+ numLocs = 2
+ self.dt = 2.0e5
+ self.dimension = dimension
+ self.numLocs = numLocs
- self.numMaxwellModels = 3
- self.numDBValues = 3 + 2*self.numMaxwellModels
- self.numInitialStateValues = self.tensorSize
- self.dbValues = ["density", "vs", "vp",
- "shear_ratio_1", "shear_ratio_2", "shear_ratio_3",
- "viscosity_1", "viscosity_2", "viscosity_3"]
- self.initialStateDBValues = ["stress_xx", "stress_yy", "stress_zz",
- "stress_xy", "stress_yz", "stress_xy"]
- self.numParameters = 7
- self.numParamValues = [1, 1, 1,
- self.numMaxwellModels, self.numMaxwellModels,
- self.tensorSize,
- self.tensorSize*self.numMaxwellModels]
- self.parameterNames = ["density", "mu", "lambda",
- "shearRatio", "maxwellTime",
- "strainT", "visStrain"]
+ self.dbPropertyValues = ["density", "vs", "vp",
+ "shear_ratio_1", "shear_ratio_2", "shear_ratio_3",
+ "viscosity_1", "viscosity_2", "viscosity_3"]
+ self.numPropertyValues = numpy.array([1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=numpy.int32)
- self.dt = 2.0e5
+ self.dbStateVarValues = ["total-strain-xx",
+ "total-strain-yy",
+ "total-strain-zz",
+ "total-strain-xy",
+ "total-strain-yz",
+ "total-strain-xz",
+ "viscous-strain-1-xx",
+ "viscous-strain-1-yy",
+ "viscous-strain-1-zz",
+ "viscous-strain-1-xy",
+ "viscous-strain-1-yz",
+ "viscous-strain-1-xz",
+ "viscous-strain-2-xx",
+ "viscous-strain-2-yy",
+ "viscous-strain-2-zz",
+ "viscous-strain-2-xy",
+ "viscous-strain-2-yz",
+ "viscous-strain-2-xz",
+ "viscous-strain-3-xx",
+ "viscous-strain-3-yy",
+ "viscous-strain-3-zz",
+ "viscous-strain-3-xy",
+ "viscous-strain-3-yz",
+ "viscous-strain-3-xz",
+ ]
+ self.numStateVarValues = numpy.array([tensorSize]*(1+numMaxwellModels),
+ dtype=numpy.int32)
densityA = 2500.0
vsA = 3000.0
vpA = vsA*3**0.5
shearRatioA = [0.5, 0.1, 0.2]
viscosityA = [1.0e18, 1.0e17, 1.0e19]
- visStrainA = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- strainTA = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
strainA = [1.1e-4, 2.2e-4, 3.3e-4, 4.4e-4, 5.5e-4, 6.6e-4]
+ initialStressA = [2.1e4, 2.2e4, 2.3e4, 2.4e4, 2.5e4, 2.6e4]
+ initialStrainA = [3.1e-4, 3.2e-4, 3.3e-4, 3.4e-4, 3.5e-4, 3.6e-4]
muA = vsA*vsA*densityA
lambdaA = vpA*vpA*densityA - 2.0*muA
- elasDataA = [densityA, vsA, vpA]
- matDbA = elasDataA + shearRatioA + viscosityA
- initialStateA = [1.2e4, 2.3e4, 3.4e4, 4.5e4, 5.6e4, 6.7e4]
-
+
densityB = 2000.0
vsB = 1200.0
vpB = vsB*3**0.5
shearRatioB = [0.2, 0.2, 0.2]
viscosityB = [1.0e18, 1.0e19, 1.0e20]
- visStrainB = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
- strainTB = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
strainB = [1.2e-4, 2.3e-4, 3.4e-4, 4.5e-4, 5.6e-4, 6.7e-4]
+ initialStressB = [5.1e4, 5.2e4, 5.3e4, 5.4e4, 5.5e4, 5.6e4]
+ initialStrainB = [6.1e-4, 6.2e-4, 6.3e-4, 6.4e-4, 6.5e-4, 6.6e-4]
muB = vsB*vsB*densityB
lambdaB = vpB*vpB*densityB - 2.0*muB
- elasDataB = [densityB, vsB, vpB]
- matDbB = elasDataB + shearRatioB + viscosityB
- initialStateB = [2.1e4, 3.2e4, 4.3e4, 5.4e4, 6.5e4, 7.6e4]
- matDb = matDbA + matDbB
-
- self.dbData = numpy.array(matDb, dtype=numpy.float64)
-
maxwellTimeA = [0.0, 0.0, 0.0]
maxwellTimeB = [0.0, 0.0, 0.0]
- for model in range(self.numMaxwellModels):
- if shearRatioA[model] != 0.0:
- maxwellTimeA[model] = viscosityA[model]/(muA*shearRatioA[model])
- if shearRatioB[model] != 0.0:
- maxwellTimeB[model] = viscosityB[model]/(muB*shearRatioB[model])
-
- vecParamsA = numpy.hstack((shearRatioA, maxwellTimeA, strainTA, visStrainA))
- vecParamsB = numpy.hstack((shearRatioB, maxwellTimeB, strainTB, visStrainB))
- vecParams = numpy.vstack((vecParamsA, vecParamsB))
- scalarParams = numpy.array([ [densityA, muA, lambdaA],
- [densityB, muB, lambdaB] ],
- dtype=numpy.float64)
- self.parameterData = numpy.hstack((scalarParams, vecParams))
+ for i in xrange(numMaxwellModels):
+ if shearRatioA[i] != 0.0:
+ maxwellTimeA[i] = viscosityA[i]/(muA*shearRatioA[i])
+ if shearRatioB[i] != 0.0:
+ maxwellTimeB[i] = viscosityB[i]/(muB*shearRatioB[i])
- self.numLocs = 2
- numElasticConsts = 21
- self.density = numpy.array([densityA, densityB], dtype=numpy.float64)
+ self.lengthScale = 1.0e+3
+ self.pressureScale = muA
+ self.timeScale = 1.0
+ self.densityScale = 1.0e+3
- self.strain = numpy.array([strainA, strainB], dtype=numpy.float64)
- self.initialStateDBData = numpy.array([initialStateA, initialStateB],
- dtype=numpy.float64)
- self.initialState = numpy.array([initialStateA, initialStateB],
+ propA = [densityA, vsA, vpA] + shearRatioA + viscosityA
+ propB = [densityB, vsB, vpB] + shearRatioB + viscosityB
+ self.dbProperties = numpy.array([propA, propB], dtype=numpy.float64)
+ propA = [densityA, muA, lambdaA] + shearRatioA + maxwellTimeA
+ propB = [densityB, muB, lambdaB] + shearRatioB + maxwellTimeB
+ self.properties = numpy.array([propA, propB], dtype=numpy.float64)
+
+ # TEMPORARY, need to determine how to use initial state variables
+ self.dbStateVars = numpy.zeros( (numLocs, tensorSize+numMaxwellModels*tensorSize),
dtype=numpy.float64)
- self.stress = numpy.zeros( (self.numLocs, 6), dtype=numpy.float64)
- self.elasticConsts = numpy.zeros( (self.numLocs, numElasticConsts),
- dtype=numpy.float64)
+ self.stateVars = numpy.zeros( (numLocs, tensorSize+numMaxwellModels*tensorSize),
+ dtype=numpy.float64)
+ mu0 = self.pressureScale
+ density0 = self.densityScale
+ time0 = self.timeScale
+ self.propertiesNondim = \
+ numpy.array([ [densityA/density0, muA/mu0, lambdaA/mu0,
+ shearRatioA[0], shearRatioA[1], shearRatioA[2],
+ maxwellTimeA[0]/time0, maxwellTimeA[1]/time0, maxwellTimeA[2]/time0],
+ [densityB/density0, muB/mu0, lambdaB/mu0,
+ shearRatioB[0], shearRatioB[1], shearRatioB[2],
+ maxwellTimeB[0]/time0, maxwellTimeB[1]/time0, maxwellTimeB[2]/time0] ],
+ dtype=numpy.float64)
+
+ self.stateVarsNondim = self.stateVars # no scaling
+
+ self.initialStress = numpy.array([initialStressA,
+ initialStressB],
+ dtype=numpy.float64)
+ self.initialStrain = numpy.array([initialStrainA,
+ initialStrainB],
+ dtype=numpy.float64)
+
+ self.density = numpy.array([densityA,
+ densityB],
+ dtype=numpy.float64)
+
+ self.strain = numpy.array([strainA,
+ strainB],
+ dtype=numpy.float64)
+
+ self.stress = numpy.zeros( (numLocs, tensorSize), dtype=numpy.float64)
+ self.elasticConsts = numpy.zeros( (self.numLocs, numElasticConsts), \
+ dtype=numpy.float64)
+
(self.elasticConsts[0,:], self.stress[0,:]) = \
- self._calcStress(strainA, muA, lambdaA,
- initialStateA)
+ self._calcStress(strainA, muA, lambdaA, \
+ initialStressA, initialStrainA)
(self.elasticConsts[1,:], self.stress[1,:]) = \
- self._calcStress(strainB, muB, lambdaB,
- initialStateB)
+ self._calcStress(strainB, muB, lambdaB, \
+ initialStressB, initialStrainB)
+ self.dtStableImplicit = 0.1*min(min(maxwellTimeA), min(maxwellTimeB))
+
return
- def _calcStress(self, strainV, muV, lambdaV, initialStateV):
+ def _calcStress(self, strainV, muV, lambdaV, initialStressV, initialStrainV):
"""
Compute stress and derivative of elasticity matrix.
"""
@@ -164,7 +203,8 @@
C1313], dtype=numpy.float64)
strain = numpy.reshape(strainV, (6,1))
- initialState = numpy.reshape(initialStateV, (6,1))
+ initialStress = numpy.reshape(initialStressV, (tensorSize,1))
+ initialStrain = numpy.reshape(initialStrainV, (tensorSize,1))
elastic = numpy.array([ [C1111, C1122, C1133, C1112, C1123, C1113],
[C1122, C2222, C2233, C2212, C2223, C2213],
[C1133, C2233, C3333, C3312, C3323, C3313],
@@ -172,7 +212,7 @@
[C1123, C2223, C3323, C1223, C2323, C2313],
[C1113, C2213, C3313, C1213, C2313, C1313] ],
dtype=numpy.float64)
- stress = numpy.dot(elastic, strain) + initialState
+ stress = numpy.dot(elastic, strain-initialStrain) + initialStress
return (elasticConsts, numpy.ravel(stress))
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc 2009-06-13 05:52:06 UTC (rev 15228)
@@ -17,29 +17,50 @@
const int pylith::materials::GenMaxwellIsotropic3DElasticData::_dimension = 3;
-const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numDBValues = 9;
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numLocs = 2;
-const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numInitialStateValues = 6;
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numProperties = 9;
-const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numParameters = 7;
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numStateVars = 4;
-const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numParamsQuadPt = 33;
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numDBProperties = 9;
-const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numLocs = 2;
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numDBStateVars = 24;
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dtStableImplicit = 1.00000000e+30;
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numPropsQuadPt = 9;
-const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numParamValues[] = {
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numVarsQuadPt = 24;
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_lengthScale = 1.00000000e+03;
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_timeScale = 1.00000000e+00;
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_pressureScale = 2.25000000e+10;
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_densityScale = 1.00000000e+03;
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dtStableImplicit = 4.44444444e+06;
+
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numPropertyValues[] = {
1,
1,
1,
-3,
-3,
+1,
+1,
+1,
+1,
+1,
+1,
+};
+
+const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numStateVarValues[] = {
6,
-18,
+6,
+6,
+6,
};
-const char* pylith::materials::GenMaxwellIsotropic3DElasticData::_dbValues[] = {
+const char* pylith::materials::GenMaxwellIsotropic3DElasticData::_dbPropertyValues[] = {
"density",
"vs",
"vp",
@@ -51,16 +72,34 @@
"viscosity_3",
};
-const char* pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStateDBValues[] = {
-"stress_xx",
-"stress_yy",
-"stress_zz",
-"stress_xy",
-"stress_yz",
-"stress_xy",
+const char* pylith::materials::GenMaxwellIsotropic3DElasticData::_dbStateVarValues[] = {
+"total-strain-xx",
+"total-strain-yy",
+"total-strain-zz",
+"total-strain-xy",
+"total-strain-yz",
+"total-strain-xz",
+"viscous-strain-1-xx",
+"viscous-strain-1-yy",
+"viscous-strain-1-zz",
+"viscous-strain-1-xy",
+"viscous-strain-1-yz",
+"viscous-strain-1-xz",
+"viscous-strain-2-xx",
+"viscous-strain-2-yy",
+"viscous-strain-2-zz",
+"viscous-strain-2-xy",
+"viscous-strain-2-yz",
+"viscous-strain-2-xz",
+"viscous-strain-3-xx",
+"viscous-strain-3-yy",
+"viscous-strain-3-zz",
+"viscous-strain-3-xy",
+"viscous-strain-3-yz",
+"viscous-strain-3-xz",
};
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dbData[] = {
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dbProperties[] = {
2.50000000e+03,
3.00000000e+03,
5.19615242e+03,
@@ -81,22 +120,58 @@
1.00000000e+20,
};
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStateDBData[] = {
- 1.20000000e+04,
- 2.30000000e+04,
- 3.40000000e+04,
- 4.50000000e+04,
- 5.60000000e+04,
- 6.70000000e+04,
- 2.10000000e+04,
- 3.20000000e+04,
- 4.30000000e+04,
- 5.40000000e+04,
- 6.50000000e+04,
- 7.60000000e+04,
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dbStateVars[] = {
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
};
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_parameterData[] = {
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_properties[] = {
2.50000000e+03,
2.25000000e+10,
2.25000000e+10,
@@ -106,6 +181,18 @@
8.88888889e+07,
4.44444444e+07,
2.22222222e+09,
+ 2.00000000e+03,
+ 2.88000000e+09,
+ 2.88000000e+09,
+ 2.00000000e-01,
+ 2.00000000e-01,
+ 2.00000000e-01,
+ 1.73611111e+09,
+ 1.73611111e+10,
+ 1.73611111e+11,
+};
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVars[] = {
0.00000000e+00,
0.00000000e+00,
0.00000000e+00,
@@ -130,15 +217,54 @@
0.00000000e+00,
0.00000000e+00,
0.00000000e+00,
- 2.00000000e+03,
- 2.88000000e+09,
- 2.88000000e+09,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+};
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_propertiesNondim[] = {
+ 2.50000000e+00,
+ 1.00000000e+00,
+ 1.00000000e+00,
+ 5.00000000e-01,
+ 1.00000000e-01,
2.00000000e-01,
+ 8.88888889e+07,
+ 4.44444444e+07,
+ 2.22222222e+09,
+ 2.00000000e+00,
+ 1.28000000e-01,
+ 1.28000000e-01,
2.00000000e-01,
2.00000000e-01,
+ 2.00000000e-01,
1.73611111e+09,
1.73611111e+10,
1.73611111e+11,
+};
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVarsNondim[] = {
0.00000000e+00,
0.00000000e+00,
0.00000000e+00,
@@ -163,23 +289,32 @@
0.00000000e+00,
0.00000000e+00,
0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
};
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_initialState[] = {
- 1.20000000e+04,
- 2.30000000e+04,
- 3.40000000e+04,
- 4.50000000e+04,
- 5.60000000e+04,
- 6.70000000e+04,
- 2.10000000e+04,
- 3.20000000e+04,
- 4.30000000e+04,
- 5.40000000e+04,
- 6.50000000e+04,
- 7.60000000e+04,
-};
-
const double pylith::materials::GenMaxwellIsotropic3DElasticData::_density[] = {
2.50000000e+03,
2.00000000e+03,
@@ -201,18 +336,18 @@
};
const double pylith::materials::GenMaxwellIsotropic3DElasticData::_stress[] = {
- 1.98120000e+07,
- 2.47730000e+07,
- 2.97340000e+07,
- 1.98450000e+07,
- 2.48060000e+07,
- 2.97670000e+07,
- 2.69940000e+06,
- 3.34400000e+06,
- 3.98860000e+06,
- 2.64600000e+06,
- 3.29060000e+06,
- 3.93520000e+06,
+ -1.57290000e+07,
+ -1.12280000e+07,
+ -6.72700000e+06,
+ 4.52400000e+06,
+ 9.02500000e+06,
+ 1.35260000e+07,
+ -6.14100000e+06,
+ -5.56400000e+06,
+ -4.98700000e+06,
+ -1.04040000e+06,
+ -4.63400000e+05,
+ 1.13600000e+05,
};
const double pylith::materials::GenMaxwellIsotropic3DElasticData::_elasticConsts[] = {
@@ -260,26 +395,70 @@
5.76000000e+09,
};
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStress[] = {
+ 2.10000000e+04,
+ 2.20000000e+04,
+ 2.30000000e+04,
+ 2.40000000e+04,
+ 2.50000000e+04,
+ 2.60000000e+04,
+ 5.10000000e+04,
+ 5.20000000e+04,
+ 5.30000000e+04,
+ 5.40000000e+04,
+ 5.50000000e+04,
+ 5.60000000e+04,
+};
+
+const double pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStrain[] = {
+ 3.10000000e-04,
+ 3.20000000e-04,
+ 3.30000000e-04,
+ 3.40000000e-04,
+ 3.50000000e-04,
+ 3.60000000e-04,
+ 6.10000000e-04,
+ 6.20000000e-04,
+ 6.30000000e-04,
+ 6.40000000e-04,
+ 6.50000000e-04,
+ 6.60000000e-04,
+};
+
+const double* pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVarsUpdated = 0;
+
pylith::materials::GenMaxwellIsotropic3DElasticData::GenMaxwellIsotropic3DElasticData(void)
{ // constructor
dimension = _dimension;
- numDBValues = _numDBValues;
- numInitialStateValues = _numInitialStateValues;
- numParameters = _numParameters;
- numParamsQuadPt = _numParamsQuadPt;
numLocs = _numLocs;
+ numProperties = _numProperties;
+ numStateVars = _numStateVars;
+ numDBProperties = _numDBProperties;
+ numDBStateVars = _numDBStateVars;
+ numPropsQuadPt = _numPropsQuadPt;
+ numVarsQuadPt = _numVarsQuadPt;
+ lengthScale = _lengthScale;
+ timeScale = _timeScale;
+ pressureScale = _pressureScale;
+ densityScale = _densityScale;
dtStableImplicit = _dtStableImplicit;
- numParamValues = const_cast<int*>(_numParamValues);
- dbValues = const_cast<char**>(_dbValues);
- initialStateDBValues = const_cast<char**>(_initialStateDBValues);
- dbData = const_cast<double*>(_dbData);
- initialStateDBData = const_cast<double*>(_initialStateDBData);
- parameterData = const_cast<double*>(_parameterData);
- initialState = const_cast<double*>(_initialState);
+ numPropertyValues = const_cast<int*>(_numPropertyValues);
+ numStateVarValues = const_cast<int*>(_numStateVarValues);
+ dbPropertyValues = const_cast<char**>(_dbPropertyValues);
+ dbStateVarValues = const_cast<char**>(_dbStateVarValues);
+ dbProperties = const_cast<double*>(_dbProperties);
+ dbStateVars = const_cast<double*>(_dbStateVars);
+ properties = const_cast<double*>(_properties);
+ stateVars = const_cast<double*>(_stateVars);
+ propertiesNondim = const_cast<double*>(_propertiesNondim);
+ stateVarsNondim = const_cast<double*>(_stateVarsNondim);
density = const_cast<double*>(_density);
strain = const_cast<double*>(_strain);
stress = const_cast<double*>(_stress);
elasticConsts = const_cast<double*>(_elasticConsts);
+ initialStress = const_cast<double*>(_initialStress);
+ initialStrain = const_cast<double*>(_initialStrain);
+ stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
} // constructor
pylith::materials::GenMaxwellIsotropic3DElasticData::~GenMaxwellIsotropic3DElasticData(void)
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh 2009-06-13 05:52:06 UTC (rev 15228)
@@ -39,32 +39,50 @@
static const int _dimension;
- static const int _numDBValues;
+ static const int _numLocs;
- static const int _numInitialStateValues;
+ static const int _numProperties;
- static const int _numParameters;
+ static const int _numStateVars;
- static const int _numParamsQuadPt;
+ static const int _numDBProperties;
- static const int _numLocs;
+ static const int _numDBStateVars;
+ static const int _numPropsQuadPt;
+
+ static const int _numVarsQuadPt;
+
+ static const double _lengthScale;
+
+ static const double _timeScale;
+
+ static const double _pressureScale;
+
+ static const double _densityScale;
+
static const double _dtStableImplicit;
- static const int _numParamValues[];
+ static const int _numPropertyValues[];
- static const char* _dbValues[];
+ static const int _numStateVarValues[];
- static const char* _initialStateDBValues[];
+ static const char* _dbPropertyValues[];
- static const double _dbData[];
+ static const char* _dbStateVarValues[];
- static const double _initialStateDBData[];
+ static const double _dbProperties[];
- static const double _parameterData[];
+ static const double _dbStateVars[];
- static const double _initialState[];
+ static const double _properties[];
+ static const double _stateVars[];
+
+ static const double _propertiesNondim[];
+
+ static const double _stateVarsNondim[];
+
static const double _density[];
static const double _strain[];
@@ -73,6 +91,12 @@
static const double _elasticConsts[];
+ static const double _initialStress[];
+
+ static const double _initialStrain[];
+
+ static const double* _stateVarsUpdated;
+
};
#endif // pylith_materials_genmaxwellisotropic3delasticdata_hh
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh 2009-06-13 05:06:15 UTC (rev 15227)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh 2009-06-13 05:52:06 UTC (rev 15228)
@@ -35,10 +35,10 @@
--data.object=PowerLaw3DElasticData \
--data.parent=ElasticMaterialData
-# python GenMaxwellIsotropic3DElastic.py \
-# --data.namespace=pylith,materials \
-# --data.object=GenMaxwellIsotropic3DElasticData \
-# --data.parent=ElasticMaterialData
+ python GenMaxwellIsotropic3DElastic.py \
+ --data.namespace=pylith,materials \
+ --data.object=GenMaxwellIsotropic3DElasticData \
+ --data.parent=ElasticMaterialData
# 2-D ----------------------------------------------------------------
@@ -69,10 +69,10 @@
# //////////////////////////////////////////////////////////////////////
if [ $1 == "viscoelastic" ] || [ $1 == "all" ]; then
- #python GenMaxwellIsotropic3DTimeDep.py \
- # --data.namespace=pylith,materials \
- # --data.object=GenMaxwellIsotropic3DTimeDepData \
- # --data.parent=ElasticMaterialData
+ python GenMaxwellIsotropic3DTimeDep.py \
+ --data.namespace=pylith,materials \
+ --data.object=GenMaxwellIsotropic3DTimeDepData \
+ --data.parent=ElasticMaterialData
python MaxwellIsotropic3DTimeDep.py \
--data.namespace=pylith,materials \
More information about the CIG-COMMITS
mailing list