[cig-commits] r19529 - in short/3D/PyLith/branches/pylith-scecdynrup: libsrc/pylith/faults libsrc/pylith/materials libsrc/pylith/topology modulesrc/materials pylith/materials tests/3d/plasticity tests/3d/refine unittests/pytests/materials
brad at geodynamics.org
brad at geodynamics.org
Mon Jan 30 20:55:42 PST 2012
Author: brad
Date: 2012-01-30 20:55:42 -0800 (Mon, 30 Jan 2012)
New Revision: 19529
Added:
short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/plasticity/dynamic/
Modified:
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i
short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/DruckerPrager3D.py
short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/refine/tet4.exo.gz
short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/refine/tet4.jou
short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestDruckerPrager3D.py
Log:
Merge from trunk.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc 2012-01-31 04:55:42 UTC (rev 19529)
@@ -766,6 +766,8 @@
logger.stagePush("FaultCreation");
// Convert fault to an IMesh
+ // In general, renumbering[global point number] = local point number
+ // fRenumbering[mesh point] = fault mesh point
SieveSubMesh::renumbering_type& fRenumbering =
faultSieveMesh->getRenumbering();
const SieveSubMesh::renumbering_type::const_iterator fRenumberingEnd =
@@ -882,22 +884,50 @@
SieveMesh::renumbering_type& renumbering = sieveMesh->getRenumbering();
SieveMesh::renumbering_type gRenumbering;
- const SieveMesh::renumbering_type::const_iterator renumberingEnd =
- renumbering.end();
- for (SieveMesh::renumbering_type::const_iterator r_iter = renumbering.begin();
- r_iter != renumberingEnd;
- ++r_iter)
- if (fRenumbering.find(r_iter->second) != fRenumbering.end())
- gRenumbering[r_iter->first] = fRenumbering[r_iter->second];
+ if (renumbering.size()) {
+ //std::cout << "Using renumbering to construct Fault Overlap" << std::endl;
+ const SieveMesh::renumbering_type::const_iterator renumberingEnd =
+ renumbering.end();
+ for (SieveMesh::renumbering_type::const_iterator r_iter = renumbering.begin();
+ r_iter != renumberingEnd;
+ ++r_iter)
+ if (fRenumbering.find(r_iter->second) != fRenumbering.end())
+ gRenumbering[r_iter->first] = fRenumbering[r_iter->second];
+ } else {
+ //std::cout << "Using new numbering to construct Fault Overlap" << std::endl;
+ const SieveMesh::sieve_type::chart_type& chart = sieveMesh->getSieve()->getChart();
+ const ALE::Obj<SieveMesh::numbering_type>& globalNumbering =
+ sieveMesh->getFactory()->getNumbering(sieveMesh, -1);
+ assert(!globalNumbering.isNull());
+ for(SieveMesh::point_type p = chart.min(); p < chart.max(); ++p) {
+ if (fRenumbering.find(p) != fRenumbering.end()) {
+ gRenumbering[globalNumbering->getIndex(p)] = fRenumbering[p];
+ } // if
+ } // for
+ } // if/else
ALE::SetFromMap<SieveMesh::renumbering_type> globalPoints(gRenumbering);
ALE::OverlapBuilder<>::constructOverlap(globalPoints, gRenumbering,
sendParallelMeshOverlap,
recvParallelMeshOverlap);
faultSieveMesh->setCalculatedOverlap(true);
- //sendParallelMeshOverlap->view("Send parallel fault overlap");
- //recvParallelMeshOverlap->view("Recv parallel fault overlap");
+#if 0 // Seems to break unit tests.
+ // Consistency check for parallel overlap.
+ if (fRenumbering.size() > 0) {
+ if (renumbering.size() <= 0 ||
+ gRenumbering.size() <= 0) {
+ throw std::logic_error("Inconsistent data when computing overlap for "
+ "parallel fault mesh.");
+ } // if
+ } // if
+#endif
+
+#if 0 // DEBUGGING
+ sendParallelMeshOverlap->view("Send parallel fault overlap");
+ recvParallelMeshOverlap->view("Recv parallel fault overlap");
+#endif
+
logger.stagePop();
} // createFaultParallel
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc 2012-01-31 04:55:42 UTC (rev 19529)
@@ -65,10 +65,14 @@
// Values expected in properties spatial database
const int numDBProperties = 6;
- const char* dbProperties[] = {"density", "vs", "vp" ,
- "friction-angle",
- "cohesion",
- "dilatation-angle"};
+ const char* dbProperties[6] = {
+ "density",
+ "vs",
+ "vp" ,
+ "friction-angle",
+ "cohesion",
+ "dilatation-angle",
+ };
/// Number of state variables.
const int numStateVars = 1;
@@ -80,12 +84,13 @@
// Values expected in state variables spatial database.
const int numDBStateVars = 6;
- const char* dbStateVars[] = { "plastic-strain-xx",
- "plastic-strain-yy",
- "plastic-strain-zz",
- "plastic-strain-xy",
- "plastic-strain-yz",
- "plastic-strain-xz"
+ const char* dbStateVars[6] = {
+ "plastic-strain-xx",
+ "plastic-strain-yy",
+ "plastic-strain-zz",
+ "plastic-strain-xy",
+ "plastic-strain-yz",
+ "plastic-strain-xz",
};
} // _DruckerPrager3D
@@ -148,6 +153,7 @@
_DruckerPrager3D::numStateVars,
_DruckerPrager3D::dbStateVars,
_DruckerPrager3D::numDBStateVars)),
+ _fitMohrCoulomb(MOHR_COULOMB_INSCRIBED),
_calcElasticConstsFn(0),
_calcStressFn(0),
_updateStateVarsFn(0)
@@ -162,6 +168,14 @@
} // destructor
// ----------------------------------------------------------------------
+// Set fit to Mohr-Coulomb surface.
+void
+pylith::materials::DruckerPrager3D::fitMohrCoulomb(FitMohrCoulombEnum value)
+{ // fitMohrCoulomb
+ _fitMohrCoulomb = value;
+} // fitMohrCoulomb
+
+// ----------------------------------------------------------------------
// Set whether elastic or inelastic constitutive relations are used.
void
pylith::materials::DruckerPrager3D::useElasticBehavior(const bool flag)
@@ -191,7 +205,7 @@
PylithScalar* const propValues,
const scalar_array& dbValues)
{ // _dbToProperties
- assert(0 != propValues);
+ assert(propValues);
const int numDBValues = dbValues.size();
assert(_DruckerPrager3D::numDBProperties == numDBValues);
@@ -202,9 +216,12 @@
const PylithScalar cohesion = dbValues[db_cohesion];
const PylithScalar dilatationAngle = dbValues[db_dilatationAngle];
- if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || frictionAngle < 0.0
- || cohesion < 0.0 || dilatationAngle < 0.0
- || frictionAngle < dilatationAngle) {
+ const double pi = M_PI;
+
+ if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || cohesion < 0.0 ||
+ frictionAngle < 0.0 || frictionAngle > pi/2 ||
+ dilatationAngle < 0.0 || dilatationAngle > pi/2 ||
+ frictionAngle < dilatationAngle) {
std::ostringstream msg;
msg << "Spatial database returned illegal value for physical "
<< "properties.\n"
@@ -222,12 +239,39 @@
const PylithScalar mu = density * vs*vs;
const PylithScalar lambda = density * vp*vp - 2.0*mu;
- const PylithScalar denomFriction = sqrt(3.0) * (3.0 - sin(frictionAngle));
- const PylithScalar denomDilatation = sqrt(3.0) * (3.0 - sin(dilatationAngle));
- const PylithScalar alphaYield = 2.0 * sin(frictionAngle)/denomFriction;
- const PylithScalar beta = 6.0 * cohesion * cos(frictionAngle)/denomFriction;
- const PylithScalar alphaFlow = 2.0 * sin(dilatationAngle)/denomDilatation;
+ PylithScalar alphaYield = 0.0;
+ PylithScalar beta = 0.0;
+ PylithScalar alphaFlow = 0.0;
+ switch (_fitMohrCoulomb) { // switch
+ case MOHR_COULOMB_INSCRIBED: {
+ const PylithScalar denomFriction = sqrt(3.0) * (3.0 - sin(frictionAngle));
+ const PylithScalar denomDilatation = sqrt(3.0) * (3.0 - sin(dilatationAngle));
+ alphaYield = 2.0 * sin(frictionAngle)/denomFriction;
+ beta = 6.0 * cohesion * cos(frictionAngle)/denomFriction;
+ alphaFlow = 2.0 * sin(dilatationAngle)/denomDilatation;
+ break;
+ } // MOHR_COULOMB_INSCRIBED
+ case MOHR_COULOMB_MIDDLE: {
+ alphaYield = sin(frictionAngle)/3.0;
+ beta = cohesion * cos(frictionAngle);
+ alphaFlow = sin(dilatationAngle)/3.0;
+ break;
+ } // MOHR_COULOMB_MIDDLE
+ case MOHR_COULOMB_CIRCUMSCRIBED: {
+ const PylithScalar denomFriction = sqrt(3.0) * (3.0 + sin(frictionAngle));
+ const PylithScalar denomDilatation = sqrt(3.0) * (3.0 + sin(dilatationAngle));
+ alphaYield = 2.0 * sin(frictionAngle)/denomFriction;
+ beta = 6.0 * cohesion * cos(frictionAngle)/denomFriction;
+ alphaFlow = 2.0 * sin(dilatationAngle)/denomDilatation;
+ break;
+ } // MOHR_COULOMB_CIRCUMSCRIBED
+ default :
+ assert(0);
+ throw std::logic_error("Unknown Mohr-Coulomb fit.");
+ break;
+ } // switch
+
if (lambda <= 0.0) {
std::ostringstream msg;
msg << "Attempted to set Lame's constant lambda to nonpositive value.\n"
@@ -254,8 +298,8 @@
pylith::materials::DruckerPrager3D::_nondimProperties(PylithScalar* const values,
const int nvalues) const
{ // _nondimProperties
- assert(0 != _normalizer);
- assert(0 != values);
+ assert(_normalizer);
+ assert(values);
assert(nvalues == _numPropsQuadPt);
const PylithScalar densityScale = _normalizer->densityScale();
@@ -280,8 +324,8 @@
pylith::materials::DruckerPrager3D::_dimProperties(PylithScalar* const values,
const int nvalues) const
{ // _dimProperties
- assert(0 != _normalizer);
- assert(0 != values);
+ assert(_normalizer);
+ assert(values);
assert(nvalues == _numPropsQuadPt);
const PylithScalar densityScale = _normalizer->densityScale();
@@ -306,7 +350,7 @@
PylithScalar* const stateValues,
const scalar_array& dbValues)
{ // _dbToStateVars
- assert(0 != stateValues);
+ assert(stateValues);
const int numDBValues = dbValues.size();
assert(_DruckerPrager3D::numDBStateVars == numDBValues);
@@ -315,8 +359,6 @@
assert(totalSize == numDBValues);
memcpy(&stateValues[s_plasticStrain], &dbValues[db_plasticStrain],
_tensorSize*sizeof(PylithScalar));
-
- PetscLogFlops(0);
} // _dbToStateVars
// ----------------------------------------------------------------------
@@ -325,11 +367,9 @@
pylith::materials::DruckerPrager3D::_nondimStateVars(PylithScalar* const values,
const int nvalues) const
{ // _nondimStateVars
- assert(0 != _normalizer);
- assert(0 != values);
+ assert(_normalizer);
+ assert(values);
assert(nvalues == _numVarsQuadPt);
-
- PetscLogFlops(0);
} // _nondimStateVars
// ----------------------------------------------------------------------
@@ -338,11 +378,9 @@
pylith::materials::DruckerPrager3D::_dimStateVars(PylithScalar* const values,
const int nvalues) const
{ // _dimStateVars
- assert(0 != _normalizer);
- assert(0 != values);
+ assert(_normalizer);
+ assert(values);
assert(nvalues == _numVarsQuadPt);
-
- PetscLogFlops(0);
} // _dimStateVars
// ----------------------------------------------------------------------
@@ -354,8 +392,8 @@
const PylithScalar* stateVars,
const int numStateVars)
{ // _calcDensity
- assert(0 != density);
- assert(0 != properties);
+ assert(density);
+ assert(properties);
assert(_numPropsQuadPt == numProperties);
density[0] = properties[p_density];
@@ -370,14 +408,15 @@
const PylithScalar* stateVars,
const int numStateVars) const
{ // _stableTimeStepImplicit
- assert(0 != properties);
+ assert(properties);
assert(_numPropsQuadPt == numProperties);
- assert(0 != stateVars);
+ assert(stateVars);
assert(_numVarsQuadPt == numStateVars);
+
// It's unclear what to do for an elasto-plastic material, which has no
// inherent time scale. For now, just set dtStable to a large value.
const PylithScalar dtStable = pylith::PYLITH_MAXDOUBLE;
- PetscLogFlops(0);
+
return dtStable;
} // _stableTimeStepImplicit
@@ -400,17 +439,17 @@
const int initialStrainSize,
const bool computeStateVars)
{ // _calcStressElastic
- assert(0 != stress);
+ assert(stress);
assert(_DruckerPrager3D::tensorSize == stressSize);
- assert(0 != properties);
+ assert(properties);
assert(_numPropsQuadPt == numProperties);
- assert(0 != stateVars);
+ assert(stateVars);
assert(_numVarsQuadPt == numStateVars);
- assert(0 != totalStrain);
+ assert(totalStrain);
assert(_DruckerPrager3D::tensorSize == strainSize);
- assert(0 != initialStress);
+ assert(initialStress);
assert(_DruckerPrager3D::tensorSize == initialStressSize);
- assert(0 != initialStrain);
+ assert(initialStrain);
assert(_DruckerPrager3D::tensorSize == initialStrainSize);
const PylithScalar mu = properties[p_mu];
@@ -456,20 +495,21 @@
const int initialStrainSize,
const bool computeStateVars)
{ // _calcStressElastoplastic
- assert(0 != stress);
+ assert(stress);
assert(_DruckerPrager3D::tensorSize == stressSize);
- assert(0 != properties);
+ assert(properties);
assert(_numPropsQuadPt == numProperties);
- assert(0 != stateVars);
+ assert(stateVars);
assert(_numVarsQuadPt == numStateVars);
- assert(0 != totalStrain);
+ assert(totalStrain);
assert(_DruckerPrager3D::tensorSize == strainSize);
- assert(0 != initialStress);
+ assert(initialStress);
assert(_DruckerPrager3D::tensorSize == initialStressSize);
- assert(0 != initialStrain);
+ assert(initialStrain);
assert(_DruckerPrager3D::tensorSize == initialStrainSize);
- const int tensorSize = _tensorSize;
+ const int tensorSize = 6;
+ assert(_tensorSize == tensorSize);
const PylithScalar mu = properties[p_mu];
const PylithScalar lambda = properties[p_lambda];
@@ -485,39 +525,35 @@
const PylithScalar ae = 1.0/mu2;
const PylithScalar am = 1.0/(3.0 * bulkModulus);
- const PylithScalar plasticStrainT[] = {stateVars[s_plasticStrain],
- stateVars[s_plasticStrain + 1],
- stateVars[s_plasticStrain + 2],
- stateVars[s_plasticStrain + 3],
- stateVars[s_plasticStrain + 4],
- stateVars[s_plasticStrain + 5]};
+ const PylithScalar plasticStrainT[tensorSize] = {
+ stateVars[s_plasticStrain ],
+ stateVars[s_plasticStrain+1],
+ stateVars[s_plasticStrain+2],
+ stateVars[s_plasticStrain+3],
+ stateVars[s_plasticStrain+4],
+ stateVars[s_plasticStrain+5],
+ };
const PylithScalar meanPlasticStrainT = (plasticStrainT[0] +
plasticStrainT[1] +
plasticStrainT[2])/3.0;
PylithScalar devPlasticStrainT[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devPlasticStrainT,
- plasticStrainT,
- meanPlasticStrainT);
+ calcDeviatoric3D(devPlasticStrainT, plasticStrainT, meanPlasticStrainT);
- const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+ const PylithScalar diag[tensorSize] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
// Initial stress values
const PylithScalar meanStressInitial = (initialStress[0] +
initialStress[1] +
initialStress[2])/3.0;
PylithScalar devStressInitial[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devStressInitial,
- initialStress,
- meanStressInitial);
+ calcDeviatoric3D(devStressInitial, initialStress, meanStressInitial);
// Initial strain values
const PylithScalar meanStrainInitial = (initialStrain[0] +
initialStrain[1] +
initialStrain[2])/3.0;
PylithScalar devStrainInitial[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devStrainInitial,
- initialStrain,
- meanStrainInitial);
+ calcDeviatoric3D(devStrainInitial, initialStrain, meanStrainInitial);
// Values for current time step
const PylithScalar e11 = totalStrain[0];
@@ -527,30 +563,28 @@
const PylithScalar meanStrainPPTpdt = meanStrainTpdt - meanPlasticStrainT -
meanStrainInitial;
- const PylithScalar strainPPTpdt[] =
- { totalStrain[0] - meanStrainTpdt - devPlasticStrainT[0] -
- devStrainInitial[0],
- totalStrain[1] - meanStrainTpdt - devPlasticStrainT[1] -
- devStrainInitial[1],
- totalStrain[2] - meanStrainTpdt - devPlasticStrainT[2] -
- devStrainInitial[2],
- totalStrain[3] - devPlasticStrainT[3] - devStrainInitial[3],
- totalStrain[4] - devPlasticStrainT[4] - devStrainInitial[4],
- totalStrain[5] - devPlasticStrainT[5] - devStrainInitial[5] };
+ const PylithScalar strainPPTpdt[tensorSize] = {
+ totalStrain[0] - meanStrainTpdt - devPlasticStrainT[0] - devStrainInitial[0],
+ totalStrain[1] - meanStrainTpdt - devPlasticStrainT[1] - devStrainInitial[1],
+ totalStrain[2] - meanStrainTpdt - devPlasticStrainT[2] - devStrainInitial[2],
+ totalStrain[3] - devPlasticStrainT[3] - devStrainInitial[3],
+ totalStrain[4] - devPlasticStrainT[4] - devStrainInitial[4],
+ totalStrain[5] - devPlasticStrainT[5] - devStrainInitial[5],
+ };
// Compute trial elastic stresses and yield function to see if yield should
// occur.
- const PylithScalar trialDevStress[] = { strainPPTpdt[0]/ae + devStressInitial[0],
- strainPPTpdt[1]/ae + devStressInitial[1],
- strainPPTpdt[2]/ae + devStressInitial[2],
- strainPPTpdt[3]/ae + devStressInitial[3],
- strainPPTpdt[4]/ae + devStressInitial[4],
- strainPPTpdt[5]/ae + devStressInitial[5]};
+ const PylithScalar trialDevStress[tensorSize] = {
+ strainPPTpdt[0]/ae + devStressInitial[0],
+ strainPPTpdt[1]/ae + devStressInitial[1],
+ strainPPTpdt[2]/ae + devStressInitial[2],
+ strainPPTpdt[3]/ae + devStressInitial[3],
+ strainPPTpdt[4]/ae + devStressInitial[4],
+ strainPPTpdt[5]/ae + devStressInitial[5],
+ };
const PylithScalar trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
const PylithScalar stressInvar2 =
- sqrt(0.5 *
- pylith::materials::ElasticMaterial::scalarProduct3D(trialDevStress,
- trialDevStress));
+ sqrt(0.5 * scalarProduct3D(trialDevStress, trialDevStress));
const PylithScalar yieldFunction = 3.0 * alphaYield * trialMeanStress +
stressInvar2 - beta;
#if 0 // DEBUGGING
@@ -566,16 +600,12 @@
// If yield function is greater than zero, compute elastoplastic stress.
if (yieldFunction >= 0.0) {
const PylithScalar devStressInitialProd =
- pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
- devStressInitial);
- const PylithScalar strainPPTpdtProd =
- pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
- strainPPTpdt);
+ scalarProduct3D(devStressInitial, devStressInitial);
+ const PylithScalar strainPPTpdtProd =
+ scalarProduct3D(strainPPTpdt, strainPPTpdt);
const PylithScalar d =
sqrt(ae * ae * devStressInitialProd + 2.0 * ae *
- pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
- strainPPTpdt) +
- strainPPTpdtProd);
+ scalarProduct3D(devStressInitial, strainPPTpdt) + strainPPTpdtProd);
const PylithScalar plasticMult = 2.0 * ae * am *
(3.0 * alphaYield * meanStrainPPTpdt/am + d/(sqrt(2.0) * ae) - beta)/
(6.0 * alphaYield * alphaFlow * ae + am);
@@ -605,16 +635,18 @@
stress[5] = strainPPTpdt[5]/ae + devStressInitial[5];
} // if
+ } else {
// If state variables have already been updated, the plastic strain for the
// time step has already been computed.
- } else {
const PylithScalar mu2 = 2.0 * mu;
- const PylithScalar plasticStrainTpdt[] = {stateVars[s_plasticStrain],
- stateVars[s_plasticStrain + 1],
- stateVars[s_plasticStrain + 2],
- stateVars[s_plasticStrain + 3],
- stateVars[s_plasticStrain + 4],
- stateVars[s_plasticStrain + 5]};
+ const PylithScalar plasticStrainTpdt[tensorSize] = {
+ stateVars[s_plasticStrain ],
+ stateVars[s_plasticStrain+1],
+ stateVars[s_plasticStrain+2],
+ stateVars[s_plasticStrain+3],
+ stateVars[s_plasticStrain+4],
+ stateVars[s_plasticStrain+5],
+ };
const PylithScalar e11 = totalStrain[0] - plasticStrainTpdt[0] - initialStrain[0];
const PylithScalar e22 = totalStrain[1] - plasticStrainTpdt[1] - initialStrain[1];
@@ -635,7 +667,7 @@
PetscLogFlops(31);
- } // else
+ } // if/else
#if 0 // DEBUGGING
const PylithScalar alphaYield = properties[p_alphaYield];
const PylithScalar beta = properties[p_beta];
@@ -648,9 +680,7 @@
stress[4],
stress[5]};
const PylithScalar stressInvar2Test =
- sqrt(0.5 *
- pylith::materials::ElasticMaterial::scalarProduct3D(devStressTest,
- devStressTest));
+ sqrt(0.5 * scalarProduct3D(devStressTest, devStressTest));
const PylithScalar yieldFunctionTest = 3.0 * alphaYield * meanStressTest +
stressInvar2Test - beta;
@@ -773,7 +803,7 @@
// Duplicate functionality of _calcStressElastoplastic
// Get properties
- const int tensorSize = _tensorSize;
+ const int tensorSize = 6;
const PylithScalar mu = properties[p_mu];
const PylithScalar lambda = properties[p_lambda];
const PylithScalar alphaYield = properties[p_alphaYield];
@@ -785,19 +815,19 @@
const PylithScalar am = 1.0/(3.0 * bulkModulus);
// Get state variables from previous time step
- const PylithScalar plasticStrainT[] = {stateVars[s_plasticStrain],
- stateVars[s_plasticStrain + 1],
- stateVars[s_plasticStrain + 2],
- stateVars[s_plasticStrain + 3],
- stateVars[s_plasticStrain + 4],
- stateVars[s_plasticStrain + 5]};
+ const PylithScalar plasticStrainT[tensorSize] = {
+ stateVars[s_plasticStrain ],
+ stateVars[s_plasticStrain+1],
+ stateVars[s_plasticStrain+2],
+ stateVars[s_plasticStrain+3],
+ stateVars[s_plasticStrain+4],
+ stateVars[s_plasticStrain+5],
+ };
const PylithScalar meanPlasticStrainT = (plasticStrainT[0] +
plasticStrainT[1] +
plasticStrainT[2])/3.0;
PylithScalar devPlasticStrainT[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devPlasticStrainT,
- plasticStrainT,
- meanPlasticStrainT);
+ calcDeviatoric3D(devPlasticStrainT, plasticStrainT, meanPlasticStrainT);
const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
@@ -806,18 +836,14 @@
initialStress[1] +
initialStress[2])/3.0;
PylithScalar devStressInitial[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devStressInitial,
- initialStress,
- meanStressInitial);
+ calcDeviatoric3D(devStressInitial, initialStress, meanStressInitial);
// Initial strain values
const PylithScalar meanStrainInitial = (initialStrain[0] +
initialStrain[1] +
initialStrain[2])/3.0;
PylithScalar devStrainInitial[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devStrainInitial,
- initialStrain,
- meanStrainInitial);
+ calcDeviatoric3D(devStrainInitial, initialStrain, meanStrainInitial);
// Values for current time step
const PylithScalar meanStrainTpdt = (totalStrain[0] +
@@ -847,9 +873,7 @@
strainPPTpdt[5]/ae + devStressInitial[5]};
const PylithScalar trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
const PylithScalar stressInvar2 =
- sqrt(0.5 *
- pylith::materials::ElasticMaterial::scalarProduct3D(trialDevStress,
- trialDevStress));
+ sqrt(0.5 * scalarProduct3D(trialDevStress, trialDevStress));
const PylithScalar yieldFunction = 3.0 * alphaYield * trialMeanStress +
stressInvar2 - beta;
#if 0 // DEBUGGING
@@ -866,16 +890,12 @@
// corresponding tangent matrix.
if (yieldFunction >= 0.0) {
const PylithScalar devStressInitialProd =
- pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
- devStressInitial);
+ scalarProduct3D(devStressInitial, devStressInitial);
const PylithScalar strainPPTpdtProd =
- pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
- strainPPTpdt);
+ scalarProduct3D(strainPPTpdt, strainPPTpdt);
const PylithScalar d =
sqrt(ae * ae * devStressInitialProd + 2.0 * ae *
- pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
- strainPPTpdt) +
- strainPPTpdtProd);
+ scalarProduct3D(devStressInitial, strainPPTpdt) + strainPPTpdtProd);
const PylithScalar plasticFac = 2.0 * ae * am/
(6.0 * alphaYield * alphaFlow * ae + am);
const PylithScalar meanStrainFac = 3.0 * alphaYield/am;
@@ -1062,9 +1082,7 @@
plasticStrainT[1] +
plasticStrainT[2])/3.0;
PylithScalar devPlasticStrainT[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devPlasticStrainT,
- plasticStrainT,
- meanPlasticStrainT);
+ calcDeviatoric3D(devPlasticStrainT, plasticStrainT, meanPlasticStrainT);
const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
@@ -1073,18 +1091,14 @@
initialStress[1] +
initialStress[2])/3.0;
PylithScalar devStressInitial[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devStressInitial,
- initialStress,
- meanStressInitial);
+ calcDeviatoric3D(devStressInitial, initialStress, meanStressInitial);
// Initial strain values
const PylithScalar meanStrainInitial = (initialStrain[0] +
initialStrain[1] +
initialStrain[2])/3.0;
PylithScalar devStrainInitial[tensorSize];
- pylith::materials::ElasticMaterial::calcDeviatoric3D(devStrainInitial,
- initialStrain,
- meanStrainInitial);
+ calcDeviatoric3D(devStrainInitial, initialStrain, meanStrainInitial);
// Values for current time step
const PylithScalar e11 = totalStrain[0];
@@ -1115,9 +1129,7 @@
strainPPTpdt[5]/ae + devStressInitial[5]};
const PylithScalar trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
const PylithScalar stressInvar2 =
- sqrt(0.5 *
- pylith::materials::ElasticMaterial::scalarProduct3D(trialDevStress,
- trialDevStress));
+ sqrt(0.5 * scalarProduct3D(trialDevStress, trialDevStress));
const PylithScalar yieldFunction = 3.0 * alphaYield * trialMeanStress +
stressInvar2 - beta;
#if 0 // DEBUGGING
@@ -1134,16 +1146,12 @@
// Otherwise, plastic strains remain the same.
if (yieldFunction >= 0.0) {
const PylithScalar devStressInitialProd =
- pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
- devStressInitial);
+ scalarProduct3D(devStressInitial, devStressInitial);
const PylithScalar strainPPTpdtProd =
- pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
- strainPPTpdt);
+ scalarProduct3D(strainPPTpdt, strainPPTpdt);
const PylithScalar d =
sqrt(ae * ae * devStressInitialProd + 2.0 * ae *
- pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
- strainPPTpdt) +
- strainPPTpdtProd);
+ scalarProduct3D(devStressInitial, strainPPTpdt) + strainPPTpdtProd);
const PylithScalar plasticMult = 2.0 * ae * am *
(3.0 * alphaYield * meanStrainPPTpdt/am + d/(sqrt(2.0) * ae) - beta)/
(6.0 * alphaYield * alphaFlow * ae + am);
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh 2012-01-31 04:55:42 UTC (rev 19529)
@@ -43,6 +43,15 @@
{ // class DruckerPrager3D
friend class TestDruckerPrager3D; // unit testing
+ // PUBLIC ENUMS ///////////////////////////////////////////////////////
+public :
+
+ enum FitMohrCoulombEnum {
+ MOHR_COULOMB_CIRCUMSCRIBED=0,
+ MOHR_COULOMB_MIDDLE=1,
+ MOHR_COULOMB_INSCRIBED=2,
+ }; // FitMohrCoulombType
+
// PUBLIC METHODS /////////////////////////////////////////////////////
public :
@@ -52,6 +61,12 @@
/// Destructor
~DruckerPrager3D(void);
+ /** Set fit to Mohr-Coulomb surface.
+ *
+ * @param value Mohr-Coulomb surface match type.
+ */
+ void fitMohrCoulomb(FitMohrCoulombEnum value);
+
/** Set current time step.
*
* @param dt Current time step.
@@ -481,6 +496,9 @@
/// Method to use for _updateStateVars().
updateStateVars_fn_type _updateStateVarsFn;
+ /// Fit to Mohr Coulomb surface
+ FitMohrCoulombEnum _fitMohrCoulomb;
+
static const int p_density;
static const int p_mu;
static const int p_lambda;
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc 2012-01-31 04:55:42 UTC (rev 19529)
@@ -211,16 +211,16 @@
const int initialStrainSize,
const bool computeStateVars)
{ // _calcStress
- assert(0 != stress);
+ assert(stress);
assert(_ElasticIsotropic3D::tensorSize == stressSize);
- assert(0 != properties);
+ assert(properties);
assert(_numPropsQuadPt == numProperties);
assert(0 == numStateVars);
- assert(0 != totalStrain);
+ assert(totalStrain);
assert(_ElasticIsotropic3D::tensorSize == strainSize);
- assert(0 != initialStress);
+ assert(initialStress);
assert(_ElasticIsotropic3D::tensorSize == initialStressSize);
- assert(0 != initialStrain);
+ assert(initialStrain);
assert(_ElasticIsotropic3D::tensorSize == initialStrainSize);
const PylithScalar mu = properties[p_mu];
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh 2012-01-31 04:55:42 UTC (rev 19529)
@@ -59,42 +59,6 @@
virtual
void deallocate(void);
- /** Compute 2D deviatoric stress/strain from vector and mean value.
- *
- * @param deviatoric Array for deviatoric tensor.
- * @param vec Input tensor (as vector).
- * @param vecMean Tensor trace divided by spatial_dimension.
- */
- void calcDeviatoric2D(PylithScalar* const deviatoric,
- const PylithScalar* vec,
- const PylithScalar vecMean);
-
- /** Compute 3D deviatoric stress/strain from vector and mean value.
- *
- * @param deviatoric Array for deviatoric tensor.
- * @param vec Input tensor (as vector).
- * @param vecMean Tensor trace divided by spatial_dimension.
- */
- void calcDeviatoric3D(PylithScalar* const deviatoric,
- const PylithScalar* vec,
- const PylithScalar vecMean);
-
- /** Compute 2D scalar product of two tensors represented as vectors.
- *
- * @param tensor1 First tensor.
- * @param tensor2 Second tensor.
- */
- PylithScalar scalarProduct2D(const PylithScalar* tensor1,
- const PylithScalar* tensor2) const;
-
- /** Compute 3D scalar product of two tensors represented as vectors.
- *
- * @param tensor1 First tensor.
- * @param tensor2 Second tensor.
- */
- PylithScalar scalarProduct3D(const PylithScalar* tensor1,
- const PylithScalar* tensor2) const;
-
/** Set database for initial stress state.
*
* @param db Spatial database.
@@ -355,6 +319,46 @@
const PylithScalar* stateVars,
const int numStateVars) const = 0;
+ /** Compute 2D deviatoric stress/strain from vector and mean value.
+ *
+ * @param deviatoric Array for deviatoric tensor.
+ * @param vec Input tensor (as vector).
+ * @param vecMean Tensor trace divided by spatial_dimension.
+ */
+ static
+ void calcDeviatoric2D(PylithScalar* const deviatoric,
+ const PylithScalar* vec,
+ const PylithScalar vecMean);
+
+ /** Compute 3D deviatoric stress/strain from vector and mean value.
+ *
+ * @param deviatoric Array for deviatoric tensor.
+ * @param vec Input tensor (as vector).
+ * @param vecMean Tensor trace divided by spatial_dimension.
+ */
+ static
+ void calcDeviatoric3D(PylithScalar* const deviatoric,
+ const PylithScalar* vec,
+ const PylithScalar vecMean);
+
+ /** Compute 2D scalar product of two tensors represented as vectors.
+ *
+ * @param tensor1 First tensor.
+ * @param tensor2 Second tensor.
+ */
+ static
+ PylithScalar scalarProduct2D(const PylithScalar* tensor1,
+ const PylithScalar* tensor2);
+
+ /** Compute 3D scalar product of two tensors represented as vectors.
+ *
+ * @param tensor1 First tensor.
+ * @param tensor2 Second tensor.
+ */
+ static
+ PylithScalar scalarProduct3D(const PylithScalar* tensor1,
+ const PylithScalar* tensor2);
+
// PRIVATE METHODS ////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc 2012-01-31 04:55:42 UTC (rev 19529)
@@ -22,6 +22,41 @@
#include <cassert>
+// Set database for initial stress state.
+inline
+void
+pylith::materials::ElasticMaterial::dbInitialStress(spatialdata::spatialdb::SpatialDB* db) {
+ _dbInitialStress = db;
+}
+
+// Set database for initial strain state.
+inline
+void
+pylith::materials::ElasticMaterial::dbInitialStrain(spatialdata::spatialdb::SpatialDB* db) {
+ _dbInitialStrain = db;
+}
+
+// Set whether elastic or inelastic constitutive relations are used.
+inline
+void
+pylith::materials::ElasticMaterial::useElasticBehavior(const bool flag) {
+} // useElasticBehavior
+
+// Get flag indicating whether material implements an empty
+// _updateProperties() method.
+inline
+bool
+pylith::materials::ElasticMaterial::hasStateVars(void) const {
+ return _numVarsQuadPt > 0;
+} // usesUpdateProperties
+
+// Get initial stress/strain fields.
+inline
+const pylith::topology::Fields<pylith::topology::Field<pylith::topology::Mesh> >*
+pylith::materials::ElasticMaterial::initialFields(void) const {
+ return _initialFields;
+} // initialFields
+
// Compute 2D deviatoric stress/strain from vector and mean value.
// 2 FLOPs per call
inline
@@ -45,9 +80,9 @@
const PylithScalar* vec,
const PylithScalar vecMean)
{
- deviatoric[0] = vec[0] -vecMean;
- deviatoric[1] = vec[1] -vecMean;
- deviatoric[2] = vec[2] -vecMean;
+ deviatoric[0] = vec[0] - vecMean;
+ deviatoric[1] = vec[1] - vecMean;
+ deviatoric[2] = vec[2] - vecMean;
deviatoric[3] = vec[3];
deviatoric[4] = vec[4];
deviatoric[5] = vec[5];
@@ -59,12 +94,14 @@
inline
PylithScalar
pylith::materials::ElasticMaterial::scalarProduct2D(const PylithScalar* tensor1,
- const PylithScalar* tensor2) const
+ const PylithScalar* tensor2)
{ // scalarProduct2D
- const PylithScalar scalarProduct = tensor1[0] * tensor2[0] +
- tensor1[1] * tensor2[1] + 2.0 * tensor1[2] * tensor2[2];
+ const PylithScalar scalarProduct =
+ tensor1[0] * tensor2[0] +
+ tensor1[1] * tensor2[1] +
+ 2.0 * tensor1[2] * tensor2[2];
+
return scalarProduct;
-
} // scalarProduct2D
@@ -73,54 +110,20 @@
inline
PylithScalar
pylith::materials::ElasticMaterial::scalarProduct3D(const PylithScalar* tensor1,
- const PylithScalar* tensor2) const
+ const PylithScalar* tensor2)
{ // scalarProduct3D
- const PylithScalar scalarProduct = tensor1[0] * tensor2[0] +
+ const PylithScalar scalarProduct =
+ tensor1[0] * tensor2[0] +
tensor1[1] * tensor2[1] +
tensor1[2] * tensor2[2] +
2.0 * (tensor1[3] * tensor2[3] +
tensor1[4] * tensor2[4] +
tensor1[5] * tensor2[5]);
+
return scalarProduct;
-
} // scalarProduct3D
-// Set database for initial stress state.
-inline
-void
-pylith::materials::ElasticMaterial::dbInitialStress(spatialdata::spatialdb::SpatialDB* db) {
- _dbInitialStress = db;
-}
-
-// Set database for initial strain state.
-inline
-void
-pylith::materials::ElasticMaterial::dbInitialStrain(spatialdata::spatialdb::SpatialDB* db) {
- _dbInitialStrain = db;
-}
-
-// Set whether elastic or inelastic constitutive relations are used.
-inline
-void
-pylith::materials::ElasticMaterial::useElasticBehavior(const bool flag) {
-} // useElasticBehavior
-
-// Get flag indicating whether material implements an empty
-// _updateProperties() method.
-inline
-bool
-pylith::materials::ElasticMaterial::hasStateVars(void) const {
- return _numVarsQuadPt > 0;
-} // usesUpdateProperties
-
-// Get initial stress/strain fields.
-inline
-const pylith::topology::Fields<pylith::topology::Field<pylith::topology::Mesh> >*
-pylith::materials::ElasticMaterial::initialFields(void) const {
- return _initialFields;
-} // initialFields
-
// ----------------------------------------------------------------------
// Compute density for cell at quadrature points.
inline
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc 2012-01-31 04:55:42 UTC (rev 19529)
@@ -802,6 +802,9 @@
newSendOverlap->assemble();
newRecvOverlap->assemble();
+ // Clear out renumbering
+ newMesh->getRenumbering().clear();
+
// Verify size of new send/recv overlaps are at least as big as the
// original ones.
PetscErrorCode err = 0;
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i 2012-01-31 04:55:42 UTC (rev 19529)
@@ -27,6 +27,15 @@
class pylith::materials::DruckerPrager3D : public ElasticMaterial
{ // class DruckerPrager3D
+ // PUBLIC ENUMS ///////////////////////////////////////////////////
+ public :
+
+ enum FitMohrCoulombEnum {
+ MOHR_COULOMB_CIRCUMSCRIBED=0,
+ MOHR_COULOMB_MIDDLE=1,
+ MOHR_COULOMB_INSCRIBED=2,
+ }; // FitMohrCoulombType
+
// PUBLIC METHODS /////////////////////////////////////////////////
public :
@@ -36,6 +45,12 @@
/// Destructor
~DruckerPrager3D(void);
+ /** Set fit to Mohr-Coulomb surface.
+ *
+ * @param value Mohr-Coulomb surface match type.
+ */
+ void fitMohrCoulomb(FitMohrCoulombEnum value);
+
/** Set current time step.
*
* @param dt Current time step.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/DruckerPrager3D.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/DruckerPrager3D.py 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/DruckerPrager3D.py 2012-01-31 04:55:42 UTC (rev 19529)
@@ -26,6 +26,16 @@
from ElasticMaterial import ElasticMaterial
from materials import DruckerPrager3D as ModuleDruckerPrager3D
+# Validator to fit to Mohr-Coulomb
+def validateFitMohrCoulomb(value):
+ """
+ Validate fit to Mohr-Coulomb yield surface.
+ """
+ if not value in ["inscribed", "middle", "circumscribed"]:
+ raise ValueError("Unknown fit to Mohr-Coulomb yield surface.")
+ return value
+
+
# DruckerPrager3D class
class DruckerPrager3D(ElasticMaterial, ModuleDruckerPrager3D):
"""
@@ -35,6 +45,30 @@
Factory: material.
"""
+ # INVENTORY //////////////////////////////////////////////////////////
+
+ class Inventory(ElasticMaterial.Inventory):
+ """
+ Python object for managing FaultCohesiveKin facilities and properties.
+ """
+
+ ## @class Inventory
+ ## Python object for managing FaultCohesiveKin facilities and properties.
+ ##
+ ## \b Properties
+ ## @li \b fit_mohr_coulomb Fit to Mohr-Coulomb yield surface.
+ ##
+ ## \b Facilities
+ ## @li None
+
+ import pyre.inventory
+
+ from pylith.meshio.OutputMatElastic import OutputMatElastic
+ fitMohrCoulomb = pyre.inventory.str("fit_mohr_coulomb", default="inscribed",
+ validator=validateFitMohrCoulomb)
+ fitMohrCoulomb.meta['tip'] = "Fit to Mohr-Coulomb yield surface."
+
+
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="druckerprager3d"):
@@ -56,6 +90,23 @@
# PRIVATE METHODS ////////////////////////////////////////////////////
+ def _configure(self):
+ """
+ Setup members using inventory.
+ """
+ ElasticMaterial._configure(self)
+ if self.inventory.fitMohrCoulomb == "inscribed":
+ fitEnum = ModuleDruckerPrager3D.MOHR_COULOMB_INSCRIBED
+ elif self.inventory.fitMohrCoulomb == "middle":
+ fitEnum = ModuleDruckerPrager3D.MOHR_COULOMB_MIDDLE
+ elif self.inventory.fitMohrCoulomb == "circumscribed":
+ fitEnum = ModuleDruckerPrager3D.MOHR_COULOMB_CIRCUMSCRIBED
+ else:
+ raise ValueError("Unknown fit to Mohr-Coulomb yield surface.")
+ ModuleDruckerPrager3D.fitMohrCoulomb(self, fitEnum)
+ return
+
+
def _createModuleObj(self):
"""
Call constructor for module object for access to C++ object.
Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/plasticity/dynamic (from rev 19528, short/3D/PyLith/trunk/tests/3d/plasticity/dynamic)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/refine/tet4.exo.gz
===================================================================
(Binary files differ)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/refine/tet4.jou
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/refine/tet4.jou 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/refine/tet4.jou 2012-01-31 04:55:42 UTC (rev 19529)
@@ -7,7 +7,7 @@
# Set discretization size
# ----------------------------------------------------------------------
volume all scheme tetmesh
-volume all size 500
+volume all size 1500
# ----------------------------------------------------------------------
# Generate the mesh
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestDruckerPrager3D.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestDruckerPrager3D.py 2012-01-31 04:51:58 UTC (rev 19528)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestDruckerPrager3D.py 2012-01-31 04:55:42 UTC (rev 19529)
@@ -46,6 +46,14 @@
return
+ def test_fitMohrCoulomb(self):
+ """
+ Test useElasticBehavior().
+ """
+ self.material.fitMohrCoulomb(self.material.MOHR_COULOMB_MIDDLE)
+ return
+
+
def test_useElasticBehavior(self):
"""
Test useElasticBehavior().
More information about the CIG-COMMITS
mailing list