[cig-commits] r6886 - in short/3D/PyLith/trunk: . libsrc/materials
unittests/libtests/materials unittests/libtests/materials/data
brad at geodynamics.org
brad at geodynamics.org
Tue May 15 17:17:56 PDT 2007
Author: brad
Date: 2007-05-15 17:17:55 -0700 (Tue, 15 May 2007)
New Revision: 6886
Modified:
short/3D/PyLith/trunk/TODO
short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh
short/3D/PyLith/trunk/libsrc/materials/Material.cc
short/3D/PyLith/trunk/libsrc/materials/Material.hh
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.cc
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.hh
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.cc
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.hh
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.cc
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.hh
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.cc
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.hh
short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrain.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.hh
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStress.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.hh
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1D.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.hh
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1D.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.hh
short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh
Log:
Updated materials interface to allow materials with parameters or state variables with multiple values per parameter or state variable (e.g., vectors or tensors).
Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/TODO 2007-05-16 00:17:55 UTC (rev 6886)
@@ -13,14 +13,16 @@
dimensions, we probably want to allow it in MeshIO, just not in the
simulation where we don't support it.
-1. Implement cell geometry stuff.
- Compute Jacobian in cell.
+1. Add dualBasis to Quadrature.
+ a. Python
+ ReferenceCell
+ FIATSimplex
+ Quadrature()
+ b. C++
+ Quadrature
+ c. C++ unit tests
+ d. Python unit tests
- Questions:
- (1) Need to get coordinates of "nodes" in reference cell.
-
- b. C++ unit tests
-
2. Implement Dirichlet boundary conditions
a. C++
b. Python
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -21,56 +21,38 @@
// ----------------------------------------------------------------------
namespace pylith {
namespace materials {
- class _ElasticIsotropic3D;
- } // materials
-} // pylith
+ namespace _ElasticIsotropic3D {
-/** _ElasticIsotropic is a helper class for ElasticIsotropic. We define
- * it in this implementation file to insulate other objects from these
- * details.
- */
-class pylith::materials::_ElasticIsotropic3D {
-public:
- /// Number of entries in stress/strain tensors.
- static const int tensorSize;
+ /// Number of entries in stress/strain tensors.
+ const int tensorSize = 6;
- /// Number of entries in derivative of elasticity matrix.
- static const int numElasticConsts;
+ /// Number of entries in derivative of elasticity matrix.
+ const int numElasticConsts = 21;
- /// Values expected in spatial database
- static const int numDBValues;
- static const char* namesDBValues[];
+ /// Values expected in spatial database
+ const int numDBValues = 3;
+ const char* namesDBValues[] = { "density", "vs", "vp" };
- /// Indices (order) of database values
- static const int didDensity;
- static const int didVs;
- static const int didVp;
+ /// Indices (order) of database values
+ const int didDensity = 0;
+ const int didVs = 1;
+ const int didVp = 2;
- /// Parameters
- static const int numParameters;
- static const char* namesParameters[];
+ /// Parameters
+ const int numParameters = 3;
+ const int numParamValues[] = { 1, 1, 1 };
+ const char* namesParameters[] = { "density", "mu", "lambda" };
- /// Indices (order) of parameters
- static const int pidDensity;
- static const int pidMu;
- static const int pidLambda;
-}; // _ElasticIsotropic3D
+ /// Indices (order) of parameters
+ const int pidDensity = 0;
+ const int pidMu = 1;
+ const int pidLambda = 2;
-const int pylith::materials::_ElasticIsotropic3D::tensorSize = 6;
-const int pylith::materials::_ElasticIsotropic3D::numElasticConsts = 21;
-const int pylith::materials::_ElasticIsotropic3D::numDBValues = 3;
-const char* pylith::materials::_ElasticIsotropic3D::namesDBValues[] =
- {"density", "vs", "vp" };
-const int pylith::materials::_ElasticIsotropic3D::numParameters = 3;
-const char* pylith::materials::_ElasticIsotropic3D::namesParameters[] =
- {"density", "mu", "lambda" };
-const int pylith::materials::_ElasticIsotropic3D::didDensity = 0;
-const int pylith::materials::_ElasticIsotropic3D::didVs = 1;
-const int pylith::materials::_ElasticIsotropic3D::didVp = 2;
-const int pylith::materials::_ElasticIsotropic3D::pidDensity = 0;
-const int pylith::materials::_ElasticIsotropic3D::pidMu = 1;
-const int pylith::materials::_ElasticIsotropic3D::pidLambda = 2;
+ } // _ElasticIsotropic3D
+ } // materials
+} // pylith
+
// ----------------------------------------------------------------------
// Default constructor.
pylith::materials::ElasticIsotropic3D::ElasticIsotropic3D(void)
@@ -117,17 +99,22 @@
} // _parameterNames
// ----------------------------------------------------------------------
-// Get number of parameters for physical properties.
-int
-pylith::materials::ElasticIsotropic3D::_numParameters(void) const
-{ // _numParameters
- return _ElasticIsotropic3D::numParameters;
-} // _numParameters
+// Get number of values for each parameter for physical properties.
+void
+pylith::materials::ElasticIsotropic3D::_numParamValues(int_array* numValues) const
+{ // _numParamValues
+ assert(0 != numValues);
+ const int numParams = _ElasticIsotropic3D::numParameters;
+ numValues->resize(numParams);
+ for (int i=0; i < numParams; ++i)
+ (*numValues)[i] = _ElasticIsotropic3D::numParamValues[i];
+} // _numParamValues
+
// ----------------------------------------------------------------------
// Compute parameters from values in spatial database.
void
-pylith::materials::ElasticIsotropic3D::_dbToParameters(double_array* paramVals,
+pylith::materials::ElasticIsotropic3D::_dbToParameters(std::vector<double_array>* paramVals,
const double_array& dbValues) const
{ // _dbToParameters
assert(0 != paramVals);
@@ -135,6 +122,8 @@
assert(_ElasticIsotropic3D::numParameters == numParams);
const int numDBValues = dbValues.size();
assert(_ElasticIsotropic3D::numDBValues == numDBValues);
+ for (int i=0; i < numParams; ++i)
+ assert(_ElasticIsotropic3D::numParamValues[i] == (*paramVals)[i].size());
const double density = dbValues[_ElasticIsotropic3D::didDensity];
const double vs = dbValues[_ElasticIsotropic3D::didVs];
@@ -143,9 +132,9 @@
const double mu = density * vs*vs;
const double lambda = density * vp*vp - 2.0*mu;
- (*paramVals)[_ElasticIsotropic3D::pidDensity] = density;
- (*paramVals)[_ElasticIsotropic3D::pidMu] = mu;
- (*paramVals)[_ElasticIsotropic3D::pidLambda] = lambda;
+ (*paramVals)[_ElasticIsotropic3D::pidDensity][0] = density;
+ (*paramVals)[_ElasticIsotropic3D::pidMu][0] = mu;
+ (*paramVals)[_ElasticIsotropic3D::pidLambda][0] = lambda;
} // _dbToParameters
// ----------------------------------------------------------------------
@@ -167,31 +156,37 @@
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticIsotropic3D::_calcDensity(double_array* const density,
- const double_array& parameters)
+pylith::materials::ElasticIsotropic3D::_calcDensity(
+ double_array* const density,
+ const std::vector<double_array>& parameters)
{ // _calcDensity
assert(0 != density);
assert(1 == density->size());
assert(_ElasticIsotropic3D::numParameters == parameters.size());
+ assert(1 == parameters[_ElasticIsotropic3D::pidDensity].size());
- (*density)[0] = parameters[_ElasticIsotropic3D::pidDensity];
+ (*density)[0] = parameters[_ElasticIsotropic3D::pidDensity][0];
} // _calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
-pylith::materials::ElasticIsotropic3D::_calcStress(double_array* const stress,
- const double_array& parameters,
- const double_array& totalStrain)
+pylith::materials::ElasticIsotropic3D::_calcStress(
+ double_array* const stress,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcStress
assert(0 != stress);
assert(_ElasticIsotropic3D::tensorSize == stress->size());
assert(_ElasticIsotropic3D::numParameters == parameters.size());
assert(_ElasticIsotropic3D::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticIsotropic3D::pidDensity].size());
+ assert(1 == parameters[_ElasticIsotropic3D::pidMu].size());
+ assert(1 == parameters[_ElasticIsotropic3D::pidLambda].size());
- const double density = parameters[_ElasticIsotropic3D::pidDensity];
- const double mu = parameters[_ElasticIsotropic3D::pidMu];
- const double lambda = parameters[_ElasticIsotropic3D::pidLambda];
+ const double density = parameters[_ElasticIsotropic3D::pidDensity][0];
+ const double mu = parameters[_ElasticIsotropic3D::pidMu][0];
+ const double lambda = parameters[_ElasticIsotropic3D::pidLambda][0];
const double lambda2mu = lambda + 2.0 * mu;
@@ -216,18 +211,21 @@
// Compute derivative of elasticity matrix at location from parameters.
void
pylith::materials::ElasticIsotropic3D::_calcElasticConsts(
- double_array* const elasticConsts,
- const double_array& parameters,
- const double_array& totalStrain)
+ double_array* const elasticConsts,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcElasticConsts
assert(0 != elasticConsts);
assert(_ElasticIsotropic3D::numElasticConsts == elasticConsts->size());
assert(_ElasticIsotropic3D::numParameters == parameters.size());
assert(_ElasticIsotropic3D::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticIsotropic3D::pidDensity].size());
+ assert(1 == parameters[_ElasticIsotropic3D::pidMu].size());
+ assert(1 == parameters[_ElasticIsotropic3D::pidLambda].size());
- const double density = parameters[_ElasticIsotropic3D::pidDensity];
- const double mu = parameters[_ElasticIsotropic3D::pidMu];
- const double lambda = parameters[_ElasticIsotropic3D::pidLambda];
+ const double density = parameters[_ElasticIsotropic3D::pidDensity][0];
+ const double mu = parameters[_ElasticIsotropic3D::pidMu][0];
+ const double lambda = parameters[_ElasticIsotropic3D::pidLambda][0];
const double lambda2mu = lambda + 2.0 * mu;
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -84,11 +84,11 @@
*/
const char** _parameterNames(void) const;
- /** Get number of parameters for physical properties.
+ /** Get number of values for each parameter for physical properties.
*
- * @returns Number of parameters
+ * @param numValues Array of number of values for each parameter.
*/
- int _numParameters(void) const;
+ void _numParamValues(int_array* numValues) const;
/** Compute parameters from values in spatial database.
*
@@ -98,7 +98,7 @@
* @param paramVals Array of parameters
* @param dbValues Array of database values
*/
- void _dbToParameters(double_array* paramVals,
+ void _dbToParameters(std::vector<double_array>* paramVals,
const double_array& dbValues) const;
/** Get number of entries in stress/strain tensors.
@@ -127,7 +127,7 @@
* @param parameters Parameters at location
*/
void _calcDensity(double_array* const density,
- const double_array& parameters);
+ const std::vector<double_array>& parameters);
/** Compute stress tensor from parameters.
*
@@ -136,7 +136,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcStress(double_array* const stress,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
/** Compute derivatives of elasticity matrix from parameters.
@@ -146,7 +146,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -106,17 +106,33 @@
_stress.resize(numQuadPts);
_elasticConsts.resize(numQuadPts);
for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
- _paramsCell[iQuad].resize(_numParameters());
_density[iQuad].resize(1);
_stress[iQuad].resize(_tensorSize());
_elasticConsts[iQuad].resize(_numElasticConsts());
+ int_array numParamValues;
+ _numParamValues(&numParamValues);
+ const int numParams = numParamValues.size();
+ _paramsCell[iQuad].resize(numParams);
+ for (int iParam=0; iParam < numParams; ++iParam)
+ _paramsCell[iQuad][iParam].resize(numParamValues[iParam]);
} // for
} // if
_getParameters(cell);
} // initCellData
+// ----------------------------------------------------------------------
+// Update state variables (for next time step).
+void
+pylith::materials::ElasticMaterial::updateState(void)
+{ // updateState
+ const int numQuadPts = _numQuadPts;
+ assert(_paramsCell.size() == numQuadPts);
+ for (int iQuad=0; iQuad < numQuadPts; ++iQuad)
+ _updateState(&_paramsCell[iQuad]);
+} // updateState
+
// ----------------------------------------------------------------------
// Get parameters for cell.
void
@@ -127,21 +143,33 @@
const int numQuadPts = _numQuadPts;
assert(_paramsCell.size() == numQuadPts);
- const int numParams = _numParameters();
+ int_array numParamValues;
+ _numParamValues(&numParamValues);
+ const int numParams = numParamValues.size();
const char** paramNames = _parameterNames();
for (int iParam=0; iParam < numParams; ++iParam) {
const ALE::Obj<real_section_type> parameter =
_parameters->getReal(paramNames[iParam]);
assert(!parameter.isNull());
+
+ const int numValues = numParamValues[iParam];
- assert(parameter->getFiberDimension(cell) == numQuadPts);
+ assert(parameter->getFiberDimension(cell) == numQuadPts*numValues);
const real_section_type::value_type* parameterCell =
parameter->restrictPoint(cell);
for (int iQuadPt=0; iQuadPt < numQuadPts; ++iQuadPt)
- _paramsCell[iQuadPt][iParam] = parameterCell[iQuadPt];
+ for (int iValue=0; iValue < numValues; ++iValue)
+ _paramsCell[iQuadPt][iParam][iValue] =
+ parameterCell[iQuadPt*numValues+iValue];
} // for
} // _getParameters
+// ----------------------------------------------------------------------
+// Update parameters (for next time step).
+void
+pylith::materials::ElasticMaterial::_updateState(std::vector<double_array>* const parameters)
+{ // _updateState
+} // _updateState
// End of file
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -118,6 +118,9 @@
const std::vector<double_array>&
calcDerivElastic(const std::vector<double_array>& totalStrain);
+ /// Update state variables (for next time step).
+ void updateState(void);
+
// PROTECTED METHODS //////////////////////////////////////////////////
protected :
@@ -148,30 +151,37 @@
*/
virtual
void _calcDensity(double_array* const density,
- const double_array& parameters) = 0;
+ const std::vector<double_array>& parameters) = 0;
/** Compute stress tensor from parameters.
*
* @param stress Array for stress tensor
- * @param parameters Parameters at locations.
- * @param totalStrain Total strain at locations.
+ * @param parameters Parameters at location.
+ * @param totalStrain Total strain at location.
*/
virtual
void _calcStress(double_array* const stress,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain) = 0;
/** Compute derivatives of elasticity matrix from parameters.
*
* @param elasticConsts Array for elastic constants
- * @param parameters Parameters at locations.
- * @param totalStrain Total strain at locations.
+ * @param parameters Parameters at location.
+ * @param totalStrain Total strain at location.
*/
virtual
void _calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain) = 0;
+ /** Update parameters (for next time step).
+ *
+ * @param parameters Parameters at location.
+ */
+ virtual
+ void _updateState(std::vector<double_array>* const parameters);
+
// NOT IMPLEMENTED ////////////////////////////////////////////////////
private :
@@ -194,9 +204,10 @@
/** Parameters at quadrature points for current cell.
*
- * size = [numQuadPts][numParams]
+ * size = [numQuadPts][numParams][numValues]
+ * index = [iQuadPt][iParam][iValue]
*/
- std::vector<double_array> _paramsCell;
+ std::vector<std::vector<double_array> > _paramsCell;
/** Density value at quadrature points for current cell.
*
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -21,56 +21,38 @@
// ----------------------------------------------------------------------
namespace pylith {
namespace materials {
- class _ElasticPlaneStrain;
- } // materials
-} // pylith
+ namespace _ElasticPlaneStrain {
-/** _ElasticPlaneStrain is a helper class for ElasticPlaneStrain. We define
- * it in this implementation file to insulate other objects from these
- * details.
- */
-class pylith::materials::_ElasticPlaneStrain {
-public:
- /// Number of entries in stress tensor.
- static const int tensorSize;
+ /// Number of entries in stress tensor.
+ const int tensorSize = 3;
- /// Number of elastic constants (for general 3-D elastic material)
- static const int numElasticConsts;
+ /// Number of elastic constants (for general 3-D elastic material)
+ const int numElasticConsts = 6;
- /// Values expected in spatial database
- static const int numDBValues;
- static const char* namesDBValues[];
+ /// Values expected in spatial database
+ const int numDBValues = 3;
+ const int numParamValues[] = { 1, 1, 1 };
+ const char* namesDBValues[] = { "density", "vs", "vp" };
+
+ /// Indices (order) of database values
+ const int didDensity = 0;
+ const int didVs = 1;
+ const int didVp = 2;
+
+ /// Parameters
+ const int numParameters = 3;
+ const char* namesParameters[] = { "density", "mu", "lambda" };
+
+ /// Indices (order) of parameters
+ const int pidDensity = 0;
+ const int pidMu = 1;
+ const int pidLambda = 2;
- /// Indices (order) of database values
- static const int didDensity;
- static const int didVs;
- static const int didVp;
+ } // _ElasticPlaneStrain
+ } // materials
+} // pylith
- /// Parameters
- static const int numParameters;
- static const char* namesParameters[];
- /// Indices (order) of parameters
- static const int pidDensity;
- static const int pidMu;
- static const int pidLambda;
-}; // _ElasticPlaneStrain
-
-const int pylith::materials::_ElasticPlaneStrain::tensorSize = 3;
-const int pylith::materials::_ElasticPlaneStrain::numElasticConsts = 6;
-const int pylith::materials::_ElasticPlaneStrain::numDBValues = 3;
-const char* pylith::materials::_ElasticPlaneStrain::namesDBValues[] =
- {"density", "vs", "vp" };
-const int pylith::materials::_ElasticPlaneStrain::numParameters = 3;
-const char* pylith::materials::_ElasticPlaneStrain::namesParameters[] =
- {"density", "mu", "lambda" };
-const int pylith::materials::_ElasticPlaneStrain::didDensity = 0;
-const int pylith::materials::_ElasticPlaneStrain::didVs = 1;
-const int pylith::materials::_ElasticPlaneStrain::didVp = 2;
-const int pylith::materials::_ElasticPlaneStrain::pidDensity = 0;
-const int pylith::materials::_ElasticPlaneStrain::pidMu = 1;
-const int pylith::materials::_ElasticPlaneStrain::pidLambda = 2;
-
// ----------------------------------------------------------------------
// Default constructor.
pylith::materials::ElasticPlaneStrain::ElasticPlaneStrain(void)
@@ -117,24 +99,32 @@
} // _parameterNames
// ----------------------------------------------------------------------
-// Get number of parameters for physical properties.
-int
-pylith::materials::ElasticPlaneStrain::_numParameters(void) const
-{ // _numParameters
- return _ElasticPlaneStrain::numParameters;
-} // _numParameters
+// Get number of values for each parameter for physical properties.
+void
+pylith::materials::ElasticPlaneStrain::_numParamValues(int_array* numValues) const
+{ // _numParamValues
+ assert(0 != numValues);
+ const int numParams = _ElasticPlaneStrain::numParameters;
+ numValues->resize(numParams);
+ for (int i=0; i < numParams; ++i)
+ (*numValues)[i] = _ElasticPlaneStrain::numParamValues[i];
+} // _numParamValues
+
// ----------------------------------------------------------------------
// Compute parameters from values in spatial database.
void
-pylith::materials::ElasticPlaneStrain::_dbToParameters(double_array* const paramVals,
- const double_array& dbValues) const
+pylith::materials::ElasticPlaneStrain::_dbToParameters(
+ std::vector<double_array>* const paramVals,
+ const double_array& dbValues) const
{ // computeParameters
assert(0 != paramVals);
const int numParams = paramVals->size();
assert(_ElasticPlaneStrain::numParameters == numParams);
const int numDBValues = dbValues.size();
assert(_ElasticPlaneStrain::numDBValues == numDBValues);
+ for (int i=0; i < numParams; ++i)
+ assert(_ElasticPlaneStrain::numParamValues[i] == (*paramVals)[i].size());
const double density = dbValues[_ElasticPlaneStrain::didDensity];
const double vs = dbValues[_ElasticPlaneStrain::didVs];
@@ -143,9 +133,9 @@
const double mu = density * vs*vs;
const double lambda = density * vp*vp - 2.0*mu;
- (*paramVals)[_ElasticPlaneStrain::pidDensity] = density;
- (*paramVals)[_ElasticPlaneStrain::pidMu] = mu;
- (*paramVals)[_ElasticPlaneStrain::pidLambda] = lambda;
+ (*paramVals)[_ElasticPlaneStrain::pidDensity][0] = density;
+ (*paramVals)[_ElasticPlaneStrain::pidMu][0] = mu;
+ (*paramVals)[_ElasticPlaneStrain::pidLambda][0] = lambda;
} // computeParameters
// ----------------------------------------------------------------------
@@ -167,31 +157,37 @@
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticPlaneStrain::_calcDensity(double_array* const density,
- const double_array& parameters)
+pylith::materials::ElasticPlaneStrain::_calcDensity(
+ double_array* const density,
+ const std::vector<double_array>& parameters)
{ // calcDensity
assert(0 != density);
assert(1 == density->size());
assert(_ElasticPlaneStrain::numParameters == parameters.size());
+ assert(1 == parameters[_ElasticPlaneStrain::pidDensity].size());
- (*density)[0] = parameters[_ElasticPlaneStrain::pidDensity];
+ (*density)[0] = parameters[_ElasticPlaneStrain::pidDensity][0];
} // calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
-pylith::materials::ElasticPlaneStrain::_calcStress(double_array* const stress,
- const double_array& parameters,
- const double_array& totalStrain)
+pylith::materials::ElasticPlaneStrain::_calcStress(
+ double_array* const stress,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcStress
assert(0 != stress);
assert(_ElasticPlaneStrain::tensorSize == stress->size());
assert(_ElasticPlaneStrain::numParameters == parameters.size());
assert(_ElasticPlaneStrain::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticPlaneStrain::pidDensity].size());
+ assert(1 == parameters[_ElasticPlaneStrain::pidMu].size());
+ assert(1 == parameters[_ElasticPlaneStrain::pidLambda].size());
- const double density = parameters[_ElasticPlaneStrain::pidDensity];
- const double mu = parameters[_ElasticPlaneStrain::pidMu];
- const double lambda = parameters[_ElasticPlaneStrain::pidLambda];
+ const double density = parameters[_ElasticPlaneStrain::pidDensity][0];
+ const double mu = parameters[_ElasticPlaneStrain::pidMu][0];
+ const double lambda = parameters[_ElasticPlaneStrain::pidLambda][0];
const double lambda2mu = lambda + 2.0 * mu;
@@ -209,18 +205,22 @@
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticPlaneStrain::_calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
- const double_array& totalStrain)
+pylith::materials::ElasticPlaneStrain::_calcElasticConsts(
+ double_array* const elasticConsts,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // calcElasticConsts
assert(0 != elasticConsts);
assert(_ElasticPlaneStrain::numElasticConsts == elasticConsts->size());
assert(_ElasticPlaneStrain::numParameters == parameters.size());
assert(_ElasticPlaneStrain::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticPlaneStrain::pidDensity].size());
+ assert(1 == parameters[_ElasticPlaneStrain::pidMu].size());
+ assert(1 == parameters[_ElasticPlaneStrain::pidLambda].size());
- const double density = parameters[_ElasticPlaneStrain::pidDensity];
- const double mu = parameters[_ElasticPlaneStrain::pidMu];
- const double lambda = parameters[_ElasticPlaneStrain::pidLambda];
+ const double density = parameters[_ElasticPlaneStrain::pidDensity][0];
+ const double mu = parameters[_ElasticPlaneStrain::pidMu][0];
+ const double lambda = parameters[_ElasticPlaneStrain::pidLambda][0];
const double lambda2mu = lambda + 2.0*mu;
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -84,11 +84,11 @@
*/
const char** _parameterNames(void) const;
- /** Get number of parameters for physical properties.
+ /** Get number of values for each parameter for physical properties.
*
- * @returns Number of parameters
+ * @param numValues Array of number of values for each parameter.
*/
- int _numParameters(void) const;
+ void _numParamValues(int_array* numValues) const;
/** Compute parameters from values in spatial database.
*
@@ -98,7 +98,7 @@
* @param paramVals Array of parameters
* @param dbValues Array of database values
*/
- void _dbToParameters(double_array* const paramVals,
+ void _dbToParameters(std::vector<double_array>* const paramVals,
const double_array& dbValues) const;
/** Get number of entries in stress tensor.
@@ -127,7 +127,7 @@
* @param parameters Parameters at location
*/
void _calcDensity(double_array* const density,
- const double_array& parameters);
+ const std::vector<double_array>& parameters);
/** Compute stress tensor from parameters.
*
@@ -136,7 +136,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcStress(double_array* const stress,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
/** Compute derivatives of elasticity matrix from parameters.
@@ -146,7 +146,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -21,56 +21,37 @@
// ----------------------------------------------------------------------
namespace pylith {
namespace materials {
- class _ElasticPlaneStress;
- } // materials
-} // pylith
+ namespace _ElasticPlaneStress {
-/** _ElasticPlaneStress is a helper class for ElasticPlaneStress. We define
- * it in this implementation file to insulate other objects from these
- * details.
- */
-class pylith::materials::_ElasticPlaneStress {
-public:
- /// Number of entries in stress tensor.
- static const int tensorSize;
+ /// Number of entries in stress tensor.
+ const int tensorSize = 3;
- /// Number of elastic constants (for general 3-D elastic material)
- static const int numElasticConsts;
+ /// Number of elastic constants (for general 3-D elastic material)
+ const int numElasticConsts = 6;
- /// Values expected in spatial database
- static const int numDBValues;
- static const char* namesDBValues[];
+ /// Values expected in spatial database
+ const int numDBValues = 3;
+ const char* namesDBValues[] = { "density", "vs", "vp" };
+
+ /// Indices (order) of database values
+ const int didDensity = 0;
+ const int didVs = 1;
+ const int didVp = 2;
+
+ /// Parameters
+ const int numParameters = 3;
+ const int numParamValues[] = { 1, 1, 1 };
+ const char* namesParameters[] = { "density", "mu", "lambda" };
+
+ /// Indices (order) of parameters
+ const int pidDensity = 0;
+ const int pidMu = 1;
+ const int pidLambda = 2;
- /// Indices (order) of database values
- static const int didDensity;
- static const int didVs;
- static const int didVp;
+ } // _ElasticPlaneStress
+ } // materials
+} // pylith
- /// Parameters
- static const int numParameters;
- static const char* namesParameters[];
-
- /// Indices (order) of parameters
- static const int pidDensity;
- static const int pidMu;
- static const int pidLambda;
-}; // _ElasticPlaneStress
-
-const int pylith::materials::_ElasticPlaneStress::tensorSize = 3;
-const int pylith::materials::_ElasticPlaneStress::numElasticConsts = 6;
-const int pylith::materials::_ElasticPlaneStress::numDBValues = 3;
-const char* pylith::materials::_ElasticPlaneStress::namesDBValues[] =
- {"density", "vs", "vp" };
-const int pylith::materials::_ElasticPlaneStress::numParameters = 3;
-const char* pylith::materials::_ElasticPlaneStress::namesParameters[] =
- {"density", "mu", "lambda" };
-const int pylith::materials::_ElasticPlaneStress::didDensity = 0;
-const int pylith::materials::_ElasticPlaneStress::didVs = 1;
-const int pylith::materials::_ElasticPlaneStress::didVp = 2;
-const int pylith::materials::_ElasticPlaneStress::pidDensity = 0;
-const int pylith::materials::_ElasticPlaneStress::pidMu = 1;
-const int pylith::materials::_ElasticPlaneStress::pidLambda = 2;
-
// ----------------------------------------------------------------------
// Default constructor.
pylith::materials::ElasticPlaneStress::ElasticPlaneStress(void)
@@ -117,24 +98,32 @@
} // _parameterNames
// ----------------------------------------------------------------------
-// Get number of parameters for physical properties.
-int
-pylith::materials::ElasticPlaneStress::_numParameters(void) const
-{ // _numParameters
- return _ElasticPlaneStress::numParameters;
-} // _numParameters
+// Get number of values for each parameter for physical properties.
+void
+pylith::materials::ElasticPlaneStress::_numParamValues(int_array* numValues) const
+{ // _numParamValues
+ assert(0 != numValues);
+ const int numParams = _ElasticPlaneStress::numParameters;
+ numValues->resize(numParams);
+ for (int i=0; i < numParams; ++i)
+ (*numValues)[i] = _ElasticPlaneStress::numParamValues[i];
+} // _numParamValues
+
// ----------------------------------------------------------------------
// Compute parameters from values in spatial database.
void
-pylith::materials::ElasticPlaneStress::_dbToParameters(double_array* paramVals,
- const double_array& dbValues) const
+pylith::materials::ElasticPlaneStress::_dbToParameters(
+ std::vector<double_array>* paramVals,
+ const double_array& dbValues) const
{ // _dbToParameters
assert(0 != paramVals);
const int numParams = paramVals->size();
assert(_ElasticPlaneStress::numParameters == numParams);
const int numDBValues = dbValues.size();
assert(_ElasticPlaneStress::numDBValues == numDBValues);
+ for (int i=0; i < numParams; ++i)
+ assert(_ElasticPlaneStress::numParamValues[i] == (*paramVals)[i].size());
const double density = dbValues[_ElasticPlaneStress::didDensity];
const double vs = dbValues[_ElasticPlaneStress::didVs];
@@ -143,9 +132,9 @@
const double mu = density * vs*vs;
const double lambda = density * vp*vp - 2.0*mu;
- (*paramVals)[_ElasticPlaneStress::pidDensity] = density;
- (*paramVals)[_ElasticPlaneStress::pidMu] = mu;
- (*paramVals)[_ElasticPlaneStress::pidLambda] = lambda;
+ (*paramVals)[_ElasticPlaneStress::pidDensity][0] = density;
+ (*paramVals)[_ElasticPlaneStress::pidMu][0] = mu;
+ (*paramVals)[_ElasticPlaneStress::pidLambda][0] = lambda;
} // _dbToParameters
// ----------------------------------------------------------------------
@@ -168,30 +157,35 @@
// Compute density at location from parameters.
void
pylith::materials::ElasticPlaneStress::_calcDensity(double_array* const density,
- const double_array& parameters)
+ const std::vector<double_array>& parameters)
{ // calcDensity
assert(0 != density);
assert(1 == density->size());
assert(_ElasticPlaneStress::numParameters == parameters.size());
+ assert(1 == parameters[_ElasticPlaneStress::pidDensity].size());
- (*density)[0] = parameters[_ElasticPlaneStress::pidDensity];
+ (*density)[0] = parameters[_ElasticPlaneStress::pidDensity][0];
} // calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
-pylith::materials::ElasticPlaneStress::_calcStress(double_array* const stress,
- const double_array& parameters,
- const double_array& totalStrain)
+pylith::materials::ElasticPlaneStress::_calcStress(
+ double_array* const stress,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcStress
assert(0 != stress);
assert(_ElasticPlaneStress::tensorSize == stress->size());
assert(_ElasticPlaneStress::numParameters == parameters.size());
assert(_ElasticPlaneStress::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticPlaneStress::pidDensity].size());
+ assert(1 == parameters[_ElasticPlaneStress::pidMu].size());
+ assert(1 == parameters[_ElasticPlaneStress::pidLambda].size());
- const double density = parameters[_ElasticPlaneStress::pidDensity];
- const double mu = parameters[_ElasticPlaneStress::pidMu];
- const double lambda = parameters[_ElasticPlaneStress::pidLambda];
+ const double density = parameters[_ElasticPlaneStress::pidDensity][0];
+ const double mu = parameters[_ElasticPlaneStress::pidMu][0];
+ const double lambda = parameters[_ElasticPlaneStress::pidLambda][0];
const double lambda2mu = lambda + 2.0 * mu;
const double lambdamu = lambda + mu;
@@ -208,18 +202,22 @@
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticPlaneStress::_calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
- const double_array& totalStrain)
+pylith::materials::ElasticPlaneStress::_calcElasticConsts(
+ double_array* const elasticConsts,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // calcElasticConsts
assert(0 != elasticConsts);
assert(_ElasticPlaneStress::numElasticConsts == elasticConsts->size());
assert(_ElasticPlaneStress::numParameters == parameters.size());
assert(_ElasticPlaneStress::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticPlaneStress::pidDensity].size());
+ assert(1 == parameters[_ElasticPlaneStress::pidMu].size());
+ assert(1 == parameters[_ElasticPlaneStress::pidLambda].size());
- const double density = parameters[_ElasticPlaneStress::pidDensity];
- const double mu = parameters[_ElasticPlaneStress::pidMu];
- const double lambda = parameters[_ElasticPlaneStress::pidLambda];
+ const double density = parameters[_ElasticPlaneStress::pidDensity][0];
+ const double mu = parameters[_ElasticPlaneStress::pidMu][0];
+ const double lambda = parameters[_ElasticPlaneStress::pidLambda][0];
const double lambda2mu = lambda + 2.0 * mu;
const double c11 = 4.0 * mu * (lambda + mu) / lambda2mu;
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -84,11 +84,11 @@
*/
const char** _parameterNames(void) const;
- /** Get number of parameters for physical properties.
+ /** Get number of values for each parameter for physical properties.
*
- * @returns Number of parameters
+ * @param numValues Array of number of values for each parameter.
*/
- int _numParameters(void) const;
+ void _numParamValues(int_array* numValues) const;
/** Compute parameters from values in spatial database.
*
@@ -98,7 +98,7 @@
* @param paramVals Array of parameters
* @param dbValues Array of database values
*/
- void _dbToParameters(double_array* const paramVals,
+ void _dbToParameters(std::vector<double_array>* const paramVals,
const double_array& dbValues) const;
/** Get number of entries in stress tensor.
@@ -127,7 +127,7 @@
* @param parameters Parameters at location
*/
void _calcDensity(double_array* const density,
- const double_array& parameters);
+ const std::vector<double_array>& parameters);
/** Compute stress tensor from parameters.
*
@@ -136,7 +136,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcStress(double_array* const stress,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
/** Compute derivatives of elasticity matrix from parameters.
@@ -146,7 +146,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -21,52 +21,35 @@
// ----------------------------------------------------------------------
namespace pylith {
namespace materials {
- class _ElasticStrain1D;
- } // materials
-} // pylith
+ namespace _ElasticStrain1D {
-/** _ElasticStrain1D is a helper class for ElasticStrain1D. We define
- * it in this implementation file to insulate other objects from these
- * details.
- */
-class pylith::materials::_ElasticStrain1D {
-public:
- /// Number of entries in stress tensor.
- static const int tensorSize;
+ /// Number of entries in stress tensor.
+ const int tensorSize = 1;
- /// Number of entries in derivative of elasticity matrix.
- static const int numElasticConsts;
+ /// Number of entries in derivative of elasticity matrix.
+ const int numElasticConsts = 1;
- /// Values expected in spatial database
- static const int numDBValues;
- static const char* namesDBValues[];
+ /// Values expected in spatial database
+ const int numDBValues = 2;
+ const char* namesDBValues[] = { "density", "vp" };
+
+ /// Indices (order) of database values
+ const int didDensity = 0;
+ const int didVp = 1;
+
+ /// Parameters
+ const int numParameters = 2;
+ const int numParamValues[] = { 1, 1 };
+ const char* namesParameters[] = { "density", "lambda2mu" };
+
+ /// Indices (order) of parameters
+ const int pidDensity = 0;
+ const int pidLambda2mu = 1;
+ } // _ElasticStrain1D
+ } // materials
+} // pylith
- /// Indices (order) of database values
- static const int didDensity;
- static const int didVp;
- /// Parameters
- static const int numParameters;
- static const char* namesParameters[];
-
- /// Indices (order) of parameters
- static const int pidDensity;
- static const int pidLambda2mu;
-}; // _ElasticStrain1D
-
-const int pylith::materials::_ElasticStrain1D::tensorSize = 1;
-const int pylith::materials::_ElasticStrain1D::numElasticConsts = 1;
-const int pylith::materials::_ElasticStrain1D::numDBValues = 2;
-const char* pylith::materials::_ElasticStrain1D::namesDBValues[] =
- {"density", "vp" };
-const int pylith::materials::_ElasticStrain1D::numParameters = 2;
-const char* pylith::materials::_ElasticStrain1D::namesParameters[] =
- {"density", "lambda2mu" };
-const int pylith::materials::_ElasticStrain1D::didDensity = 0;
-const int pylith::materials::_ElasticStrain1D::didVp = 1;
-const int pylith::materials::_ElasticStrain1D::pidDensity = 0;
-const int pylith::materials::_ElasticStrain1D::pidLambda2mu = 1;
-
// ----------------------------------------------------------------------
// Default constructor.
pylith::materials::ElasticStrain1D::ElasticStrain1D(void)
@@ -113,17 +96,22 @@
} // _parameterNames
// ----------------------------------------------------------------------
-// Get number of parameters for physical properties.
-int
-pylith::materials::ElasticStrain1D::_numParameters(void) const
-{ // _numParameters
- return _ElasticStrain1D::numParameters;
-} // _numParameters
+// Get number of values for each parameter for physical properties.
+void
+pylith::materials::ElasticStrain1D::_numParamValues(int_array* numValues) const
+{ // _numParamValues
+ assert(0 != numValues);
+
+ const int numParams = _ElasticStrain1D::numParameters;
+ numValues->resize(numParams);
+ for (int i=0; i < numParams; ++i)
+ (*numValues)[i] = _ElasticStrain1D::numParamValues[i];
+} // _numParamValues
// ----------------------------------------------------------------------
// Compute parameters from values in spatial database.
void
-pylith::materials::ElasticStrain1D::_dbToParameters(double_array* const paramVals,
+pylith::materials::ElasticStrain1D::_dbToParameters(std::vector<double_array>* const paramVals,
const double_array& dbValues) const
{ // _dbToParameters
assert(0 != paramVals);
@@ -131,13 +119,15 @@
assert(_ElasticStrain1D::numParameters == numParams);
const int numDBValues = dbValues.size();
assert(_ElasticStrain1D::numDBValues == numDBValues);
+ for (int i=0; i < numParams; ++i)
+ assert(_ElasticStrain1D::numParamValues[i] == (*paramVals)[i].size());
const double density = dbValues[_ElasticStrain1D::didDensity];
const double vp = dbValues[_ElasticStrain1D::didVp];
const double lambda2mu = density * vp*vp;
- (*paramVals)[_ElasticStrain1D::pidDensity] = density;
- (*paramVals)[_ElasticStrain1D::pidLambda2mu] = lambda2mu;
+ (*paramVals)[_ElasticStrain1D::pidDensity][0] = density;
+ (*paramVals)[_ElasticStrain1D::pidLambda2mu][0] = lambda2mu;
} // _dbToParameters
// ----------------------------------------------------------------------
@@ -160,29 +150,33 @@
// Compute density at location from parameters.
void
pylith::materials::ElasticStrain1D::_calcDensity(double_array* const density,
- const double_array& parameters)
+ const std::vector<double_array>& parameters)
{ // _calcDensity
assert(0 != density);
assert(1 == density->size());
assert(_ElasticStrain1D::numParameters == parameters.size());
+ assert(1 == parameters[_ElasticStrain1D::pidDensity].size());
- (*density)[0] = parameters[_ElasticStrain1D::pidDensity];
+ (*density)[0] = parameters[_ElasticStrain1D::pidDensity][0];
} // _calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
-pylith::materials::ElasticStrain1D::_calcStress(double_array* const stress,
- const double_array& parameters,
- const double_array& totalStrain)
+pylith::materials::ElasticStrain1D::_calcStress(
+ double_array* const stress,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcStress
assert(0 != stress);
assert(_ElasticStrain1D::tensorSize == stress->size());
assert(_ElasticStrain1D::numParameters == parameters.size());
assert(_ElasticStrain1D::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticStrain1D::pidDensity].size());
+ assert(1 == parameters[_ElasticStrain1D::pidLambda2mu].size());
- const double density = parameters[_ElasticStrain1D::pidDensity];
- const double lambda2mu = parameters[_ElasticStrain1D::pidLambda2mu];
+ const double density = parameters[_ElasticStrain1D::pidDensity][0];
+ const double lambda2mu = parameters[_ElasticStrain1D::pidLambda2mu][0];
const double e11 = totalStrain[0];
(*stress)[0] = lambda2mu * e11;
@@ -192,17 +186,19 @@
// Compute derivative of elasticity matrix at location from parameters.
void
pylith::materials::ElasticStrain1D::_calcElasticConsts(
- double_array* const elasticConsts,
- const double_array& parameters,
- const double_array& totalStrain)
+ double_array* const elasticConsts,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcElasticConsts
assert(0 != elasticConsts);
assert(_ElasticStrain1D::numElasticConsts == elasticConsts->size());
assert(_ElasticStrain1D::numParameters == parameters.size());
assert(_ElasticStrain1D::tensorSize == totalStrain.size());
+ assert(1 == parameters[_ElasticStrain1D::pidDensity].size());
+ assert(1 == parameters[_ElasticStrain1D::pidLambda2mu].size());
- const double density = parameters[_ElasticStrain1D::pidDensity];
- const double lambda2mu = parameters[_ElasticStrain1D::pidLambda2mu];
+ const double density = parameters[_ElasticStrain1D::pidDensity][0];
+ const double lambda2mu = parameters[_ElasticStrain1D::pidLambda2mu][0];
(*elasticConsts)[0] = lambda2mu;
} // _calcElasticConsts
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -83,11 +83,11 @@
*/
const char** _parameterNames(void) const;
- /** Get number of parameters for physical properties.
+ /** Get number of values for each parameter for physical properties.
*
- * @returns Number of parameters
+ * @param numValues Array of number of values for each parameter.
*/
- int _numParameters(void) const;
+ void _numParamValues(int_array* numValues) const;
/** Compute parameters from values in spatial database.
*
@@ -97,7 +97,7 @@
* @param paramVals Array of parameters
* @param dbValues Array of database values
*/
- void _dbToParameters(double_array* const paramVals,
+ void _dbToParameters(std::vector<double_array>* const paramVals,
const double_array& dbValues) const;
/** Get number of entries in stress tensor.
@@ -126,7 +126,7 @@
* @param parameters Parameters at location
*/
void _calcDensity(double_array* const density,
- const double_array& parameters);
+ const std::vector<double_array>& parameters);
/** Compute stress tensor from parameters.
*
@@ -135,7 +135,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcStress(double_array* const stress,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
/** Compute derivatives of elasticity matrix from parameters.
@@ -145,7 +145,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -21,56 +21,38 @@
// ----------------------------------------------------------------------
namespace pylith {
namespace materials {
- class _ElasticStress1D;
- } // materials
-} // pylith
+ namespace _ElasticStress1D {
-/** _ElasticStress1D is a helper class for ElasticStress1D. We define
- * it in this implementation file to insulate other objects from these
- * details.
- */
-class pylith::materials::_ElasticStress1D {
-public:
- /// Number of entries in stress tensor.
- static const int tensorSize;
+ /// Number of entries in stress tensor.
+ const int tensorSize = 1;
- /// Number of entries in derivative of elasticity matrix.
- static const int numElasticConsts;
+ /// Number of entries in derivative of elasticity matrix.
+ const int numElasticConsts = 1;
- /// Values expected in spatial database
- static const int numDBValues;
- static const char* namesDBValues[];
+ /// Values expected in spatial database
+ const int numDBValues = 3;
+ const char* namesDBValues[] =
+ {"density", "vs", "vp" };
- /// Indices (order) of database values
- static const int didDensity;
- static const int didVs;
- static const int didVp;
+ /// Indices (order) of database values
+ const int didDensity = 0;
+ const int didVs = 1;
+ const int didVp = 2;
- /// Parameters
- static const int numParameters;
- static const char* namesParameters[];
+ /// Parameters
+ const int numParameters = 3;
+ const char* namesParameters[] = {"density", "mu", "lambda" };
+ const int numParamValues[] = { 1, 1, 1 };
+
+ /// Indices (order) of parameters
+ const int pidDensity = 0;
+ const int pidMu = 1;
+ const int pidLambda = 2;
- /// Indices (order) of parameters
- static const int pidDensity;
- static const int pidMu;
- static const int pidLambda;
-}; // _ElasticStress1D
+ } // _ElasticStress1D
+ } // materials
+} // pylith
-const int pylith::materials::_ElasticStress1D::tensorSize = 1;
-const int pylith::materials::_ElasticStress1D::numElasticConsts = 1;
-const int pylith::materials::_ElasticStress1D::numDBValues = 3;
-const char* pylith::materials::_ElasticStress1D::namesDBValues[] =
- {"density", "vs", "vp" };
-const int pylith::materials::_ElasticStress1D::numParameters = 3;
-const char* pylith::materials::_ElasticStress1D::namesParameters[] =
- {"density", "mu", "lambda" };
-const int pylith::materials::_ElasticStress1D::didDensity = 0;
-const int pylith::materials::_ElasticStress1D::didVs = 1;
-const int pylith::materials::_ElasticStress1D::didVp = 2;
-const int pylith::materials::_ElasticStress1D::pidDensity = 0;
-const int pylith::materials::_ElasticStress1D::pidMu = 1;
-const int pylith::materials::_ElasticStress1D::pidLambda = 2;
-
// ----------------------------------------------------------------------
// Default constructor.
pylith::materials::ElasticStress1D::ElasticStress1D(void)
@@ -117,17 +99,22 @@
} // _parameterNames
// ----------------------------------------------------------------------
-// Get number of parameters for physical properties.
-int
-pylith::materials::ElasticStress1D::_numParameters(void) const
-{ // _numParameters
- return _ElasticStress1D::numParameters;
-} // _numParameters
+// Get number of values for each parameter for physical properties.
+void
+pylith::materials::ElasticStress1D::_numParamValues(int_array* numValues) const
+{ // _numParamValues
+ assert(0 != numValues);
+ const int numParams = _ElasticStress1D::numParameters;
+ numValues->resize(numParams);
+ for (int i=0; i < numParams; ++i)
+ (*numValues)[i] = _ElasticStress1D::numParamValues[i];
+} // _numParamValues
+
// ----------------------------------------------------------------------
// Compute parameters from values in spatial database.
void
-pylith::materials::ElasticStress1D::_dbToParameters(double_array* const paramVals,
+pylith::materials::ElasticStress1D::_dbToParameters(std::vector<double_array>* const paramVals,
const double_array& dbValues) const
{ // computeParameters
assert(0 != paramVals);
@@ -135,6 +122,8 @@
assert(_ElasticStress1D::numParameters == numParams);
const int numDBValues = dbValues.size();
assert(_ElasticStress1D::numDBValues == numDBValues);
+ for (int i=0; i < numParams; ++i)
+ assert(_ElasticStress1D::numParamValues[i] == (*paramVals)[i].size());
const double density = dbValues[_ElasticStress1D::didDensity];
const double vs = dbValues[_ElasticStress1D::didVs];
@@ -143,9 +132,9 @@
const double mu = density * vs*vs;
const double lambda = density * vp*vp - 2.0*mu;
- (*paramVals)[_ElasticStress1D::pidDensity] = density;
- (*paramVals)[_ElasticStress1D::pidMu] = mu;
- (*paramVals)[_ElasticStress1D::pidLambda] = lambda;
+ (*paramVals)[_ElasticStress1D::pidDensity][0] = density;
+ (*paramVals)[_ElasticStress1D::pidMu][0] = mu;
+ (*paramVals)[_ElasticStress1D::pidLambda][0] = lambda;
} // computeParameters
// ----------------------------------------------------------------------
@@ -168,30 +157,31 @@
// Compute density at location from parameters.
void
pylith::materials::ElasticStress1D::_calcDensity(double_array* const density,
- const double_array& parameters)
+ const std::vector<double_array>& parameters)
{ // _calcDensity
assert(0 != density);
assert(1 == density->size());
assert(_ElasticStress1D::numParameters == parameters.size());
+ assert(1 == parameters[_ElasticStress1D::pidDensity].size());
- (*density)[0] = parameters[_ElasticStress1D::pidDensity];
+ (*density)[0] = parameters[_ElasticStress1D::pidDensity][0];
} // _calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
pylith::materials::ElasticStress1D::_calcStress(double_array* const stress,
- const double_array& parameters,
- const double_array& totalStrain)
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcStress
assert(0 != stress);
assert(_ElasticStress1D::tensorSize == stress->size());
assert(_ElasticStress1D::numParameters == parameters.size());
assert(_ElasticStress1D::tensorSize == totalStrain.size());
- const double density = parameters[_ElasticStress1D::pidDensity];
- const double mu = parameters[_ElasticStress1D::pidMu];
- const double lambda = parameters[_ElasticStress1D::pidLambda];
+ const double density = parameters[_ElasticStress1D::pidDensity][0];
+ const double mu = parameters[_ElasticStress1D::pidMu][0];
+ const double lambda = parameters[_ElasticStress1D::pidLambda][0];
const double e11 = totalStrain[0];
(*stress)[0] = mu * (3.0*lambda+2.0*mu) / (lambda + mu) * e11;
@@ -201,18 +191,18 @@
// Compute derivative of elasticity matrix at location from parameters.
void
pylith::materials::ElasticStress1D::_calcElasticConsts(
- double_array* const elasticConsts,
- const double_array& parameters,
- const double_array& totalStrain)
+ double_array* const elasticConsts,
+ const std::vector<double_array>& parameters,
+ const double_array& totalStrain)
{ // _calcElasticConsts
assert(0 != elasticConsts);
assert(_ElasticStress1D::numElasticConsts == elasticConsts->size());
assert(_ElasticStress1D::numParameters == parameters.size());
assert(_ElasticStress1D::tensorSize == totalStrain.size());
- const double density = parameters[_ElasticStress1D::pidDensity];
- const double mu = parameters[_ElasticStress1D::pidMu];
- const double lambda = parameters[_ElasticStress1D::pidLambda];
+ const double density = parameters[_ElasticStress1D::pidDensity][0];
+ const double mu = parameters[_ElasticStress1D::pidMu][0];
+ const double lambda = parameters[_ElasticStress1D::pidLambda][0];
(*elasticConsts)[0] = mu * (3.0*lambda+2.0*mu) / (lambda + mu);
} // _calcElasticConsts
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -84,11 +84,11 @@
*/
const char** _parameterNames(void) const;
- /** Get number of parameters for physical properties.
+ /** Get number of values for each parameter for physical properties.
*
- * @returns Number of parameters
+ * @param numValues Array of number of values for each parameter.
*/
- int _numParameters(void) const;
+ void _numParamValues(int_array* numValues) const;
/** Compute parameters from values in spatial database.
*
@@ -98,7 +98,7 @@
* @param paramVals Array of parameters
* @param dbValues Array of database values
*/
- void _dbToParameters(double_array* const paramVals,
+ void _dbToParameters(std::vector<double_array>* const paramVals,
const double_array& dbValues) const;
/** Get number of entries in stress tensor.
@@ -127,7 +127,7 @@
* @param parameters Parameters at location
*/
void _calcDensity(double_array* const density,
- const double_array& parameters);
+ const std::vector<double_array>& parameters);
/** Compute stress tensor from parameters.
*
@@ -136,7 +136,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcStress(double_array* const stress,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
/** Compute derivatives of elasticity matrix from parameters.
@@ -146,7 +146,7 @@
* @param totalStrain Total strain at locations.
*/
void _calcElasticConsts(double_array* const elasticConsts,
- const double_array& parameters,
+ const std::vector<double_array>& parameters,
const double_array& totalStrain);
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Modified: short/3D/PyLith/trunk/libsrc/materials/Material.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -89,14 +89,19 @@
delete _parameters; _parameters = new feassemble::ParameterManager(mesh);
assert(0 != _parameters);
const int numQuadPts = quadrature->numQuadPts();
- const int fiberDim = numQuadPts; // number of values in field per cell
- const int numParams = _numParameters();
+ int_array numParamValues;
+ _numParamValues(&numParamValues);
+ const int numParams = numParamValues.size();
const char** paramNames = _parameterNames();
std::vector<ALE::Obj<real_section_type> > paramSections(numParams);
for (int iParam=0; iParam < numParams; ++iParam) {
+ // Fiber dimension is number of quadrature points times number of
+ // values per parameter
+ const int fiberDim = numQuadPts * numParamValues[iParam];
+
_parameters->addReal(paramNames[iParam]);
paramSections[iParam] = _parameters->getReal(paramNames[iParam]);
assert(!paramSections[iParam].isNull());
@@ -110,11 +115,22 @@
_db->queryVals(_dbValues(), numValues);
// Loop over cells
+
+ // Container for data returned in query of database
double_array queryData(numValues);
- double_array paramData(numParams);
+
+ // Container for parameters at a quadrature point
+ std::vector<double_array> paramData(numParams);
+
+ // Container of parameter data for a given cell (quadpts + parameters)
std::vector<double_array> cellData(numParams);
- for (int iParam = 0; iParam < numParams; ++iParam)
- cellData[iParam].resize(numQuadPts);
+
+ for (int iParam = 0; iParam < numParams; ++iParam) {
+ const int fiberDim = numQuadPts * numParamValues[iParam];
+ cellData[iParam].resize(fiberDim);
+ paramData[iParam].resize(numParamValues[iParam]);
+ } // for
+
for (ALE::Mesh::label_sequence::iterator cellIter=cells->begin();
cellIter != cellsEnd;
++cellIter) {
@@ -142,8 +158,12 @@
} // if
_dbToParameters(¶mData, queryData);
- for (int iParam=0; iParam < numParams; ++iParam)
- cellData[iParam][iQuadPt] = paramData[iParam];
+ for (int iParam=0; iParam < numParams; ++iParam) {
+ const int numValues = numParamValues[iParam];
+ for (int iValue=0; iValue < numValues; ++iValue)
+ cellData[iParam][iQuadPt*numValues+iValue] =
+ paramData[iParam][iValue];
+ } // for
} // for
// Assemble cell contribution into fields
for (int iParam=0; iParam < numParams; ++iParam)
Modified: short/3D/PyLith/trunk/libsrc/materials/Material.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -14,13 +14,15 @@
*
* @brief C++ abstract base class for Material object.
*
- * Interface definition for material.
+ * Interface definition for material. The parameters for the material
+ * physical properties include state variables associated with the
+ * material constitutive model.
*/
#if !defined(pylith_materials_material_hh)
#define pylith_materials_material_hh
-#include "pylith/utils/arrayfwd.hh"
+#include "pylith/utils/array.hh" // USES std::vector, double_array
#include <string> // HASA std::string
/// Namespace for pylith package
@@ -146,12 +148,12 @@
virtual
const char** _parameterNames(void) const = 0;
- /** Get number of parameters for physical properties.
+ /** Get number of values for each parameter for physical properties.
*
- * @returns Number of parameters
+ * @param numValues Array of number of values for each parameter.
*/
virtual
- int _numParameters(void) const = 0;
+ void _numParamValues(int_array* numValues) const = 0;
/** Compute parameters from values in spatial database.
*
@@ -161,7 +163,7 @@
* @param numValues Number of database values
*/
virtual
- void _dbToParameters(double_array* const paramVals,
+ void _dbToParameters(std::vector<double_array>* const paramVals,
const double_array& dbValues) const = 0;
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -81,5 +81,14 @@
_testCalcElasticConsts(&material, data);
} // testElasticConsts
+// ----------------------------------------------------------------------
+// Test updateState()
+void
+pylith::materials::TestElasticIsotropic3D::testUpdateState(void)
+{ // testUpdateState
+ ElasticIsotropic3D material;
+ material.updateState();
+} // testUpdateState
+
// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -44,6 +44,7 @@
CPPUNIT_TEST( testCalcDensity );
CPPUNIT_TEST( testCalcStress );
CPPUNIT_TEST( testCalcElasticConsts );
+ CPPUNIT_TEST( testUpdateState );
CPPUNIT_TEST_SUITE_END();
// PUBLIC METHODS /////////////////////////////////////////////////////
@@ -67,6 +68,9 @@
/// Test calcElasticConsts()
void testCalcElasticConsts(void);
+ /// Test updateState()
+ void testUpdateState(void);
+
}; // class TestElasticIsotropic3D
#endif // pylith_materials_testelasticisotropic3d_hh
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -122,7 +122,7 @@
const double size = numQuadPts;
for (int i=0; i < size; ++i)
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density[i][0]/densityE[i], tolerance);
-} // testCalcProperties
+} // testCalcDensity
// ----------------------------------------------------------------------
// Test calcStress()
@@ -355,9 +355,13 @@
const ElasticMaterialData& data) const
{ // _testCalcDensity
const int numParameters = data.numParameters;
- double_array parameters(numParameters);
- for (int i=0; i < numParameters; ++i)
- parameters[i] = data.parameterData[i];
+ std::vector<double_array> parameters(numParameters);
+ for (int iParam=0, i=0; iParam < numParameters; ++iParam) {
+ const int numValues = data.numParamValues[iParam];
+ parameters[iParam].resize(numValues);
+ for (int iValue=0; iValue < numValues; ++iValue)
+ parameters[iParam][iValue] = data.parameterData[i++];
+ } // for
double_array density(1);
material->_calcDensity(&density, parameters);
@@ -377,9 +381,13 @@
const ElasticMaterialData& data) const
{ // _testCalcElasticConsts
const int numParameters = data.numParameters;
- double_array parameters(numParameters);
- for (int i=0; i < numParameters; ++i)
- parameters[i] = data.parameterData[i];
+ std::vector<double_array> parameters(numParameters);
+ for (int iParam=0, i=0; iParam < numParameters; ++iParam) {
+ const int numValues = data.numParamValues[iParam];
+ parameters[iParam].resize(numValues);
+ for (int iValue=0; iValue < numValues; ++iValue)
+ parameters[iParam][iValue] = data.parameterData[i++];
+ } // for
int stressSize = 0;
switch(data.dimension)
@@ -421,9 +429,13 @@
const ElasticMaterialData& data) const
{ // _testCalcElasticConsts
const int numParameters = data.numParameters;
- double_array parameters(numParameters);
- for (int i=0; i < numParameters; ++i)
- parameters[i] = data.parameterData[i];
+ std::vector<double_array> parameters(numParameters);
+ for (int iParam=0, i=0; iParam < numParameters; ++iParam) {
+ const int numValues = data.numParamValues[iParam];
+ parameters[iParam].resize(numValues);
+ for (int iValue=0; iValue < numValues; ++iValue)
+ parameters[iParam][iValue] = data.parameterData[i++];
+ } // for
int numConsts = 0;
int strainSize = 0;
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -81,5 +81,14 @@
_testCalcElasticConsts(&material, data);
} // testElasticConsts
+// ----------------------------------------------------------------------
+// Test updateState()
+void
+pylith::materials::TestElasticPlaneStrain::testUpdateState(void)
+{ // testUpdateState
+ ElasticPlaneStrain material;
+ material.updateState();
+} // testUpdateState
+
// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStrain.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -44,6 +44,7 @@
CPPUNIT_TEST( testCalcDensity );
CPPUNIT_TEST( testCalcStress );
CPPUNIT_TEST( testCalcElasticConsts );
+ CPPUNIT_TEST( testUpdateState );
CPPUNIT_TEST_SUITE_END();
// PUBLIC METHODS /////////////////////////////////////////////////////
@@ -67,6 +68,9 @@
/// Test calcElasticConsts()
void testCalcElasticConsts(void);
+ /// Test updateState()
+ void testUpdateState(void);
+
}; // class TestElasticPlaneStrain
#endif // pylith_materials_testelasticplanestrain_hh
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -81,5 +81,14 @@
_testCalcElasticConsts(&material, data);
} // testElasticConsts
+// ----------------------------------------------------------------------
+// Test updateState()
+void
+pylith::materials::TestElasticPlaneStress::testUpdateState(void)
+{ // testUpdateState
+ ElasticPlaneStress material;
+ material.updateState();
+} // testUpdateState
+
// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticPlaneStress.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -44,6 +44,7 @@
CPPUNIT_TEST( testCalcDensity );
CPPUNIT_TEST( testCalcStress );
CPPUNIT_TEST( testCalcElasticConsts );
+ CPPUNIT_TEST( testUpdateState );
CPPUNIT_TEST_SUITE_END();
// PUBLIC METHODS /////////////////////////////////////////////////////
@@ -67,6 +68,9 @@
/// Test calcElasticConsts()
void testCalcElasticConsts(void);
+ /// Test updateState()
+ void testUpdateState(void);
+
}; // class TestElasticPlaneStress
#endif // pylith_materials_testelasticplanestress_hh
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -81,5 +81,14 @@
_testCalcElasticConsts(&material, data);
} // testElasticConsts
+// ----------------------------------------------------------------------
+// Test updateState()
+void
+pylith::materials::TestElasticStrain1D::testUpdateState(void)
+{ // testUpdateState
+ ElasticStrain1D material;
+ material.updateState();
+} // testUpdateState
+
// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStrain1D.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -44,6 +44,7 @@
CPPUNIT_TEST( testCalcDensity );
CPPUNIT_TEST( testCalcStress );
CPPUNIT_TEST( testCalcElasticConsts );
+ CPPUNIT_TEST( testUpdateState );
CPPUNIT_TEST_SUITE_END();
// PUBLIC METHODS /////////////////////////////////////////////////////
@@ -67,6 +68,9 @@
/// Test calcElasticConsts()
void testCalcElasticConsts(void);
+ /// Test updateState()
+ void testUpdateState(void);
+
}; // class TestElasticStrain1D
#endif // pylith_materials_testelasticstrain1d_hh
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -81,5 +81,14 @@
_testCalcElasticConsts(&material, data);
} // testElasticConsts
+// ----------------------------------------------------------------------
+// Test updateState()
+void
+pylith::materials::TestElasticStress1D::testUpdateState(void)
+{ // testUpdateState
+ ElasticStress1D material;
+ material.updateState();
+} // testUpdateState
+
// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticStress1D.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -44,6 +44,7 @@
CPPUNIT_TEST( testCalcDensity );
CPPUNIT_TEST( testCalcStress );
CPPUNIT_TEST( testCalcElasticConsts );
+ CPPUNIT_TEST( testUpdateState );
CPPUNIT_TEST_SUITE_END();
// PUBLIC METHODS /////////////////////////////////////////////////////
@@ -67,6 +68,9 @@
/// Test calcElasticConsts()
void testCalcElasticConsts(void);
+ /// Test updateState()
+ void testUpdateState(void);
+
}; // class TestElasticStress1D
#endif // pylith_materials_testelasticstress1d_hh
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -205,13 +205,20 @@
const int numParameters = data.numParameters;
double* const parameterDataE = &data.parameterData[iLoc*numParameters];
- double_array parameterData(numParameters);
+ std::vector<double_array> parameterData(numParameters);
+ for (int iParam=0; iParam < numParameters; ++iParam)
+ parameterData[iParam].resize(data.numParamValues[iParam]);
material->_dbToParameters(¶meterData, dbData);
const double tolerance = 1.0e-06;
- for (int i=0; i < numParameters; ++i)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, parameterData[i]/parameterDataE[i],
- tolerance);
+ for (int iParam=0, i=0; iParam < numParameters; ++iParam) {
+ const int numParamValues = data.numParamValues[iParam];
+ CPPUNIT_ASSERT_EQUAL(numParamValues, int(parameterData[i].size()));
+ for (int iValue=0; iValue < numParamValues; ++iValue)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0,
+ parameterData[iParam][iValue]/parameterDataE[i++],
+ tolerance);
+ } // for
} // for
} // _testDBToParameters
@@ -242,11 +249,16 @@
const int numParameters = data.numParameters;
- CPPUNIT_ASSERT(numParameters == material->_numParameters());
+ int_array numParamValues;
+ material->_numParamValues(&numParamValues);
+
+ CPPUNIT_ASSERT_EQUAL(numParameters, int(numParamValues.size()));
char** const namesE = data.parameterNames;
const char** names = material->_parameterNames();
- for (int i=0; i < numParameters; ++i)
+ for (int i=0; i < numParameters; ++i) {
+ CPPUNIT_ASSERT_EQUAL(data.numParamValues[i], numParamValues[i]);
CPPUNIT_ASSERT(0 == strcmp(namesE[i], names[i]));
+ } // for
} // _testParameters
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py 2007-05-16 00:17:55 UTC (rev 6886)
@@ -40,6 +40,7 @@
self.numDBValues = 3
self.dbValues = ["density", "vs", "vp"]
self.numParameters = 3
+ self.numParamValues = [1, 1, 1]
self.parameterNames = ["density", "mu", "lambda"]
densityA = 2500.0
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -23,6 +23,12 @@
const int pylith::materials::ElasticIsotropic3DData::_numLocs = 2;
+const int pylith::materials::ElasticIsotropic3DData::_numParamValues[] = {
+1,
+1,
+1,
+};
+
const char* pylith::materials::ElasticIsotropic3DData::_dbValues[] = {
"density",
"vs",
@@ -139,6 +145,7 @@
numDBValues = _numDBValues;
numParameters = _numParameters;
numLocs = _numLocs;
+ numParamValues = const_cast<int*>(_numParamValues);
dbValues = const_cast<char**>(_dbValues);
parameterNames = const_cast<char**>(_parameterNames);
dbData = const_cast<double*>(_dbData);
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -45,6 +45,8 @@
static const int _numLocs;
+ static const int _numParamValues[];
+
static const char* _dbValues[];
static const char* _parameterNames[];
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py 2007-05-16 00:17:55 UTC (rev 6886)
@@ -61,6 +61,7 @@
self.dimension = None
self.numDBValues = None
self.numParameters = None
+ self.numParamValues = None
self.dbValues = None
self.parameterNames = None
self.dbData = None
@@ -105,6 +106,9 @@
self.data.addScalar(vtype="int", name="_numParameters",
value=self.numParameters,
format="%d")
+ self.data.addArray(vtype="int", name="_numParamValues",
+ values=self.numParamValues,
+ format="%d", ncols=1)
self.data.addArray(vtype="char*", name="_dbValues", values=self.dbValues,
format="\"%s\"", ncols=1)
self.data.addArray(vtype="char*", name="_parameterNames",
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrain.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrain.py 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrain.py 2007-05-16 00:17:55 UTC (rev 6886)
@@ -40,6 +40,7 @@
self.numDBValues = 3
self.dbValues = ["density", "vs", "vp"]
self.numParameters = 3
+ self.numParamValues = [1, 1, 1]
self.parameterNames = ["density", "mu", "lambda"]
densityA = 2500.0
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -23,6 +23,12 @@
const int pylith::materials::ElasticPlaneStrainData::_numLocs = 2;
+const int pylith::materials::ElasticPlaneStrainData::_numParamValues[] = {
+1,
+1,
+1,
+};
+
const char* pylith::materials::ElasticPlaneStrainData::_dbValues[] = {
"density",
"vs",
@@ -97,6 +103,7 @@
numDBValues = _numDBValues;
numParameters = _numParameters;
numLocs = _numLocs;
+ numParamValues = const_cast<int*>(_numParamValues);
dbValues = const_cast<char**>(_dbValues);
parameterNames = const_cast<char**>(_parameterNames);
dbData = const_cast<double*>(_dbData);
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStrainData.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -45,6 +45,8 @@
static const int _numLocs;
+ static const int _numParamValues[];
+
static const char* _dbValues[];
static const char* _parameterNames[];
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStress.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStress.py 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStress.py 2007-05-16 00:17:55 UTC (rev 6886)
@@ -40,6 +40,7 @@
self.numDBValues = 3
self.dbValues = ["density", "vs", "vp"]
self.numParameters = 3
+ self.numParamValues = [1, 1, 1]
self.parameterNames = ["density", "mu", "lambda"]
densityA = 2500.0
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -23,6 +23,12 @@
const int pylith::materials::ElasticPlaneStressData::_numLocs = 2;
+const int pylith::materials::ElasticPlaneStressData::_numParamValues[] = {
+1,
+1,
+1,
+};
+
const char* pylith::materials::ElasticPlaneStressData::_dbValues[] = {
"density",
"vs",
@@ -97,6 +103,7 @@
numDBValues = _numDBValues;
numParameters = _numParameters;
numLocs = _numLocs;
+ numParamValues = const_cast<int*>(_numParamValues);
dbValues = const_cast<char**>(_dbValues);
parameterNames = const_cast<char**>(_parameterNames);
dbData = const_cast<double*>(_dbData);
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticPlaneStressData.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -45,6 +45,8 @@
static const int _numLocs;
+ static const int _numParamValues[];
+
static const char* _dbValues[];
static const char* _parameterNames[];
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1D.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1D.py 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1D.py 2007-05-16 00:17:55 UTC (rev 6886)
@@ -40,6 +40,7 @@
self.numDBValues = 2
self.dbValues = ["density", "vp"]
self.numParameters = 2
+ self.numParamValues = [1, 1]
self.parameterNames = ["density", "lambda2mu"]
densityA = 2500.0
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -23,6 +23,11 @@
const int pylith::materials::ElasticStrain1DData::_numLocs = 2;
+const int pylith::materials::ElasticStrain1DData::_numParamValues[] = {
+1,
+1,
+};
+
const char* pylith::materials::ElasticStrain1DData::_dbValues[] = {
"density",
"vp",
@@ -73,6 +78,7 @@
numDBValues = _numDBValues;
numParameters = _numParameters;
numLocs = _numLocs;
+ numParamValues = const_cast<int*>(_numParamValues);
dbValues = const_cast<char**>(_dbValues);
parameterNames = const_cast<char**>(_parameterNames);
dbData = const_cast<double*>(_dbData);
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStrain1DData.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -45,6 +45,8 @@
static const int _numLocs;
+ static const int _numParamValues[];
+
static const char* _dbValues[];
static const char* _parameterNames[];
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1D.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1D.py 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1D.py 2007-05-16 00:17:55 UTC (rev 6886)
@@ -40,6 +40,7 @@
self.numDBValues = 3
self.dbValues = ["density", "vs", "vp"]
self.numParameters = 3
+ self.numParamValues = [1, 1, 1]
self.parameterNames = ["density", "mu", "lambda"]
densityA = 2500.0
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -23,6 +23,12 @@
const int pylith::materials::ElasticStress1DData::_numLocs = 2;
+const int pylith::materials::ElasticStress1DData::_numParamValues[] = {
+1,
+1,
+1,
+};
+
const char* pylith::materials::ElasticStress1DData::_dbValues[] = {
"density",
"vs",
@@ -79,6 +85,7 @@
numDBValues = _numDBValues;
numParameters = _numParameters;
numLocs = _numLocs;
+ numParamValues = const_cast<int*>(_numParamValues);
dbValues = const_cast<char**>(_dbValues);
parameterNames = const_cast<char**>(_parameterNames);
dbData = const_cast<double*>(_dbData);
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticStress1DData.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -45,6 +45,8 @@
static const int _numLocs;
+ static const int _numParamValues[];
+
static const char* _dbValues[];
static const char* _parameterNames[];
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.cc 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.cc 2007-05-16 00:17:55 UTC (rev 6886)
@@ -19,6 +19,7 @@
numLocs(0),
numDBValues(0),
numParameters(0),
+ numParamValues(0),
dbValues(0),
parameterNames(0)
{ // constructor
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh 2007-05-16 00:14:31 UTC (rev 6885)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh 2007-05-16 00:17:55 UTC (rev 6886)
@@ -39,6 +39,7 @@
int numDBValues; ///< Number of database values
int numParameters; ///< Number of parameters
+ int* numParamValues; ///< Number of values for each parameter
char** dbValues; ///< Aray of names of database values;
char** parameterNames; //< Array of names of parameters
More information about the cig-commits
mailing list