[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(&paramData, 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(&parameterData, 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