[cig-commits] r14116 - in short/3D/PyLith/branches/pylith-swig: pylith/utils unittests/libtests/materials unittests/libtests/materials/data

brad at geodynamics.org brad at geodynamics.org
Sun Feb 22 14:59:10 PST 2009


Author: brad
Date: 2009-02-22 14:59:10 -0800 (Sun, 22 Feb 2009)
New Revision: 14116

Added:
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.cc
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.hh
Modified:
   short/3D/PyLith/branches/pylith-swig/pylith/utils/CppData.py
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/Makefile.am
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.cc
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.hh
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.cc
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.hh
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMaterial.cc
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3D.py
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialApp.py
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.cc
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.hh
   short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/generate.sh
Log:
More work on updating testing of materials.

Modified: short/3D/PyLith/branches/pylith-swig/pylith/utils/CppData.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/utils/CppData.py	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/pylith/utils/CppData.py	2009-02-22 22:59:10 UTC (rev 14116)
@@ -201,7 +201,11 @@
 
     # Write array information
     for array in self.arrays:
-      fileOut.write("  static const %s %s[];\n\n" % \
+      if array['values'] is None:
+        fileOut.write("  static const %s* %s;\n\n" % \
+                        (array['type'], array['name']))
+      else:
+        fileOut.write("  static const %s %s[];\n\n" % \
                     (array['type'], array['name']))
 
 
@@ -237,20 +241,27 @@
 
     # Write array information
     for array in self.arrays:
-      cppformat = "const %s %s::%s::%s[] = {\n"
-      fileOut.write(cppformat % \
-                    (array['type'],
-                     string.join(self.namespace, "::"), self.objname,
-                     array['name']))
-      icol = 0
-      for value in numpy.ravel(array['values']):
-        cppformat = "%s," % array['format']
-        fileOut.write(cppformat % value)
-        icol += 1
-        if icol == array['ncols']:
-          fileOut.write("\n")
-          icol = 0
-      fileOut.write("};\n\n")
+      if array['values'] is None:
+        cppformat = "const %s* %s::%s::%s = 0;\n\n"
+        fileOut.write(cppformat % \
+                        (array['type'],
+                         string.join(self.namespace, "::"), self.objname,
+                         array['name']))
+      else:
+        cppformat = "const %s %s::%s::%s[] = {\n"
+        fileOut.write(cppformat % \
+                        (array['type'],
+                         string.join(self.namespace, "::"), self.objname,
+                         array['name']))
+        icol = 0
+        for value in numpy.ravel(array['values']):
+          cppformat = "%s," % array['format']
+          fileOut.write(cppformat % value)
+          icol += 1
+          if icol == array['ncols']:
+            fileOut.write("\n")
+            icol = 0
+        fileOut.write("};\n\n")
 
     if self.parent != "":
       self._writeLifecycle(fileOut)

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/Makefile.am	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/Makefile.am	2009-02-22 22:59:10 UTC (rev 14116)
@@ -23,10 +23,10 @@
 testmaterials_SOURCES = \
 	TestMetadata.cc \
 	TestMaterial.cc \
+	TestElasticMaterial.cc \
+	TestElasticIsotropic3D.cc \
 	test_materials.cc
 
-#	TestElasticMaterial.cc \
-#	TestElasticIsotropic3D.cc \
 #	TestElasticPlaneStrain.cc \
 #	TestElasticPlaneStress.cc \
 #	TestElasticStrain1D.cc \
@@ -49,10 +49,10 @@
 
 # Source files associated with testing data
 testmaterials_SOURCES += \
-	data/MaterialData.cc 
+	data/MaterialData.cc \
+	data/ElasticMaterialData.cc \
+	data/ElasticIsotropic3DData.cc 
 
-#	data/ElasticMaterialData.cc \
-#	data/ElasticIsotropic3DData.cc \
 #	data/ElasticPlaneStrainData.cc \
 #	data/ElasticPlaneStressData.cc \
 #	data/ElasticStrain1DData.cc \

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.cc	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.cc	2009-02-22 22:59:10 UTC (rev 14116)
@@ -32,53 +32,5 @@
   _dataElastic = new ElasticIsotropic3DData();
 } // setUp
 
-// ----------------------------------------------------------------------
-// Test usesUpdateState()
-void
-pylith::materials::TestElasticIsotropic3D::testUsesUpdateProperties(void)
-{ // testUsesUpdateProperties
-  ElasticIsotropic3D material;
-  CPPUNIT_ASSERT_EQUAL(false, material.usesUpdateProperties());
-} // testUsesUpdateProperties
 
-// ----------------------------------------------------------------------
-// Test updateProperties()
-void
-pylith::materials::TestElasticIsotropic3D::testUpdateProperties(void)
-{ // testUpdateProperties
-  ElasticIsotropic3D material;
-  ElasticIsotropic3DData data;
-
-  const int numParams = data.numParameters;
-
-  double_array parameters(numParams);
-  const int paramsSize = 1;
-  for (int i=0; i < numParams; ++i) {
-    for (int j=0; j < paramsSize; ++j)
-      parameters[i*paramsSize+j] = i+j;
-  } // for
-    
-  const int tensorSize = 9;
-  const int initialStateSize = 9;
-  double_array totalStrain(tensorSize);
-  double_array initialState(initialStateSize);
-  for (int i=0; i < tensorSize; ++i) {
-    totalStrain[i] = i;
-    initialState[i] = 0.1*i;
-  } // for
-  
-  material._updateProperties(&parameters[0], numParams, &totalStrain[0],
-		  tensorSize, &initialState[0], initialStateSize);
-
-  const double tolerance = 1.0e-06;
-  for (int i=0; i < numParams; ++i)
-    for (int j=0; j < paramsSize; ++j)
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(double(i+j), parameters[i*paramsSize+j],
-				   tolerance);
-    
-  for (int i=0; i < tensorSize; ++i)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(i), totalStrain[i], tolerance);
-} // testUpdateProperties
-
-
 // End of file 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.hh	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticIsotropic3D.hh	2009-02-22 22:59:10 UTC (rev 14116)
@@ -40,16 +40,17 @@
   CPPUNIT_TEST_SUITE( TestElasticIsotropic3D );
 
   CPPUNIT_TEST( testDBToProperties );
-  CPPUNIT_TEST( testDBValues );
-  CPPUNIT_TEST( testProperties );
+  CPPUNIT_TEST( testNonDimProperties );
+  CPPUNIT_TEST( testDimProperties );
+  CPPUNIT_TEST( testDBToStateVars );
+  CPPUNIT_TEST( testNonDimStateVars );
+  CPPUNIT_TEST( testDimStateVars );
   CPPUNIT_TEST( test_calcDensity );
   CPPUNIT_TEST( test_calcStress );
   CPPUNIT_TEST( test_calcElasticConsts );
+  CPPUNIT_TEST( test_updateStateVars );
   CPPUNIT_TEST( test_stableTimeStepImplicit );
 
-  CPPUNIT_TEST( testUsesUpdateProperties );
-  CPPUNIT_TEST( testUpdateProperties );
-
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////
@@ -58,12 +59,6 @@
   /// Setup testing data.
   void setUp(void);
 
-  /// Test usesUpdateProperties().
-  void testUsesUpdateProperties(void);
-
-  /// Test updateProperties()
-  void testUpdateProperties(void);
-
 }; // class TestElasticIsotropic3D
 
 #endif // pylith_materials_testelasticisotropic3d_hh

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.cc	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.cc	2009-02-22 22:59:10 UTC (rev 14116)
@@ -15,12 +15,16 @@
 #include "TestElasticMaterial.hh" // Implementation of class methods
 
 #include "data/ElasticMaterialData.hh" // USES ElasticMaterialData
-#include "data/ElasticIsotropic3DData.hh" // USES ElasticIsotropic3DData
+//#include "data/ElasticIsotropic3DData.hh" // USES ElasticIsotropic3DData
 
 #include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
 #include "pylith/utils/array.hh" // USES double_array
-#include "pylith/topology/FieldsManager.hh" // USES FieldsManager
 
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestElasticMaterial );
 
@@ -56,11 +60,18 @@
   CPPUNIT_ASSERT_EQUAL(label, std::string(material._dbInitialStrain->label()));
 } // testDBInitialStrain
 
+#if 0
 // ----------------------------------------------------------------------
 // Test initialize()
 void
 pylith::materials::TestElasticMaterial::testInitialize(void)
 { // testInitialize
+  topology::Mesh mesh;
+  Quadrature<topology::Mesh> quadrature;
+  ElasticStrain1D material;
+  ElasticStrain1DData data;
+  _initialize(&mesh, &quadrature, &material, &data);
+
   CPPUNIT_ASSERT(false);
 } // testInitialize
 
@@ -69,61 +80,24 @@
 void
 pylith::materials::TestElasticMaterial::testCalcDensity(void)
 { // testCalcDensity
-  ALE::Obj<Mesh> mesh;
-  { // create mesh
-    const int cellDim = 1;
-    const int numCorners = 2;
-    const int spaceDim = 1;
-    const int numVertices = 2;
-    const int numCells = 1;
-    const double vertCoords[] = { -1.0, 1.0};
-    const int cells[] = { 0, 1};
-    CPPUNIT_ASSERT(0 != vertCoords);
-    CPPUNIT_ASSERT(0 != cells);
+  topology::Mesh mesh;
+  Quadrature<topology::Mesh> quadrature;
+  ElasticStrain1D material;
+  ElasticStrain1DData data;
+  _initialize(&mesh, &quadrature, &material, &data);
 
-    mesh = new Mesh(PETSC_COMM_WORLD, cellDim);
-    ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
-
-    const bool interpolate = false;
-    ALE::Obj<ALE::Mesh::sieve_type> s = new ALE::Mesh::sieve_type(sieve->comm(), sieve->debug());
-
-    ALE::SieveBuilder<ALE::Mesh>::buildTopology(s, cellDim, numCells,
-	       const_cast<int*>(cells), numVertices, interpolate, numCorners);
-    std::map<Mesh::point_type,Mesh::point_type> renumbering;
-    ALE::ISieveConverter::convertSieve(*s, *sieve, renumbering);
-    mesh->setSieve(sieve);
-    mesh->stratify();
-    ALE::SieveBuilder<Mesh>::buildCoordinates(mesh, spaceDim, vertCoords);
-  } // create mesh
-
   // Get cells associated with material
-  const ALE::Obj<real_section_type>& coordinates = 
-    mesh->getRealSection("coordinates");
-  const ALE::Obj<Mesh::label_sequence>& cells = mesh->heightStratum(0);
+  const ALE::Obj<SieveMesh::label_sequence>& cells = mesh->heightStratum(0);
+  SieveMesh::label_sequence::iterator c_iter = cells->begin();
+  material.retrievePropsAndVars(*c_iter);
+  const double_array& density = material.calcDensity();
 
-  ElasticIsotropic3D material;
-  ElasticIsotropic3DData data;
-  const int numQuadPts = 2;
-  const int numParams = data.numParameters;
-  const int numParamsQuadPt = data.numParamsQuadPt;
-  
-  Mesh::label_sequence::iterator c_iter = cells->begin();
+  CPPUNIT_ASSERT_EQUAL(data._numQuadPts, density.size());
 
-  const int fiberDim = numQuadPts * numParamsQuadPt;
-  material._properties = new real_section_type(mesh->comm(), mesh->debug());
-  material._properties->setChart(mesh->getSieve()->getChart());
-  material._properties->setFiberDimension(cells, fiberDim);
-  mesh->allocate(material._properties);
-
-  material._properties->updatePoint(*c_iter, data.parameterData);
-
-  material.getPropertiesCell(*c_iter, numQuadPts);
-  const double_array& density = material.calcDensity();
-
   const double tolerance = 1.0e-06;
   const double* densityE = data.density;
   CPPUNIT_ASSERT(0 != densityE);
-  const double size = numQuadPts;
+  const double size = data._numQuadPts;
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density[i]/densityE[i], tolerance);
 } // testCalcDensity
@@ -367,23 +341,8 @@
   const double dtE = data.dtStableImplicit;
   CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, dt/dtE, tolerance);
 } // testStableTimeStepImplicit
-    
-// ----------------------------------------------------------------------
-// Test useElasticBehavior()
-void
-pylith::materials::TestElasticMaterial::testUseElasticBehavior(void)
-{ // testUseElasticBehavior
-  ElasticIsotropic3D material;
+#endif    
 
-  bool flag = false;
-  material.useElasticBehavior(flag);
-  CPPUNIT_ASSERT_EQUAL(flag, material._useElasticBehavior);
-
-  bool flag = true;
-  material.useElasticBehavior(flag);
-  CPPUNIT_ASSERT_EQUAL(flag, material._useElasticBehavior);
-} // testUseElasticBehavior
-
 // ----------------------------------------------------------------------
 // Setup testing data.
 void
@@ -413,46 +372,87 @@
   CPPUNIT_ASSERT(0 != _dataElastic);
   const ElasticMaterialData* data = _dataElastic;
 
-  double_array density(1);
-  _matElastic->_calcDensity(&density[0], data->parameterData, data->numParamsQuadPt);
+  const int numLocs = _data->numLocs;
+  const int numPropsQuadPt = _data->numPropsQuadPt;
+  const int numVarsQuadPt = _data->numVarsQuadPt;
+  
+  double density = 0;
+  double_array properties(numPropsQuadPt);
+  double_array stateVars(numVarsQuadPt);
 
-  const double* densityE = data->density;
-  CPPUNIT_ASSERT(0 != densityE);
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    memcpy(&properties[0], &_data->properties[iLoc*numPropsQuadPt],
+	   numPropsQuadPt*sizeof(double));
+    memcpy(&stateVars[0], &_data->stateVars[iLoc*numVarsQuadPt],
+	   numVarsQuadPt*sizeof(double));
 
-  const double tolerance = 1.0e-06;
-  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density[0]/densityE[0], tolerance);
+    _matElastic->_calcDensity(&density, 
+			      &properties[0], properties.size(),
+			      &stateVars[0], stateVars.size());
+    
+    const double* densityE = data->density;
+    CPPUNIT_ASSERT(0 != densityE);
+    
+    const double tolerance = 1.0e-06;
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density/densityE[0], tolerance);
+  } // for
 } // _testCalcDensity
 
 // ----------------------------------------------------------------------
 // Test _calcStress()
 void
 pylith::materials::TestElasticMaterial::test_calcStress(void)
-{ // _testCalcElasticConsts
+{ // _testCalcStress
   CPPUNIT_ASSERT(0 != _matElastic);
   CPPUNIT_ASSERT(0 != _dataElastic);
   const ElasticMaterialData* data = _dataElastic;
 
   const bool computeStateVars = true;
 
-  const int stressSize = _matElastic->_tensorSize;
-  double_array stress(stressSize);
-  _matElastic->_calcStress(&stress[0], stress.size(),
-			 data->parameterData, data->numParamsQuadPt,
-			   data->strain, stressSize, 
-			   data->initialState, data->numInitialStateValues,
-			   computeStateVars);
+  const int numLocs = _data->numLocs;
+  const int numPropsQuadPt = _data->numPropsQuadPt;
+  const int numVarsQuadPt = _data->numVarsQuadPt;
+  const int tensorSize = _matElastic->_tensorSize;
   
-  const double* stressE = data->stress;
-  CPPUNIT_ASSERT(0 != stressE);
+  double_array stress(tensorSize);
+  double_array properties(numPropsQuadPt);
+  double_array stateVars(numVarsQuadPt);
+  double_array strain(tensorSize);
+  double_array initialStress(tensorSize);
+  double_array initialStrain(tensorSize);
 
-  const double tolerance = 1.0e-06;
-  for (int i=0; i < stressSize; ++i)
-    if (fabs(stressE[i]) > tolerance)
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stress[i]/stressE[i], 
-				   tolerance);
-    else
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(stressE[i], stress[i],
-				   tolerance);
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
+	   numPropsQuadPt*sizeof(double));
+    memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
+	   numVarsQuadPt*sizeof(double));
+    memcpy(&strain[0], &data->strain[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+    memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+    memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+
+    _matElastic->_calcStress(&stress[0], stress.size(),
+			     &properties[0], properties.size(),
+			     &stateVars[0], stateVars.size(),
+			     &strain[0], strain.size(),
+			     &initialStress[0], initialStress.size(),
+			     &initialStrain[0], initialStrain.size(),
+			     computeStateVars);
+  
+    const double* stressE = data->stress;
+    CPPUNIT_ASSERT(0 != stressE);
+
+    const double tolerance = 1.0e-06;
+    for (int i=0; i < tensorSize; ++i)
+      if (fabs(stressE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stress[i]/stressE[i], 
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(stressE[i], stress[i],
+				     tolerance);
+  } // for
 } // _testCalcStress
 
 // ----------------------------------------------------------------------
@@ -465,40 +465,64 @@
   const ElasticMaterialData* data = _dataElastic;
 
   int numConsts = 0;
-  int strainSize = 0;
+  int tensorSize = 0;
   switch(data->dimension)
     { // switch
     case 1 :
       numConsts = 1;
-      strainSize = 1;
+      tensorSize = 1;
       break;
     case 2 :
       numConsts = 6;
-      strainSize = 3;
+      tensorSize = 3;
       break;
     case 3 :
       numConsts = 21;
-      strainSize = 6;
+      tensorSize = 6;
       break;
     } // switch
+  const int numLocs = _data->numLocs;
+  const int numPropsQuadPt = _data->numPropsQuadPt;
+  const int numVarsQuadPt = _data->numVarsQuadPt;
+  
   double_array elasticConsts(numConsts);
-  _matElastic->_calcElasticConsts(&elasticConsts[0], numConsts,
-				data->parameterData, data->numParamsQuadPt,
-				data->strain, strainSize,
-				data->initialState,
-				data->numInitialStateValues);
+  double_array properties(numPropsQuadPt);
+  double_array stateVars(numVarsQuadPt);
+  double_array strain(tensorSize);
+  double_array initialStress(tensorSize);
+  double_array initialStrain(tensorSize);
 
-  const double* elasticConstsE = data->elasticConsts;
-  CPPUNIT_ASSERT(0 != elasticConstsE);
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
+	   numPropsQuadPt*sizeof(double));
+    memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
+	   numVarsQuadPt*sizeof(double));
+    memcpy(&strain[0], &data->strain[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+    memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+    memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
 
-  const double tolerance = 1.0e-06;
-  for (int i=0; i < numConsts; ++i)
-    if (fabs(elasticConstsE[i]) > tolerance)
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, elasticConsts[i]/elasticConstsE[i], 
-				   tolerance);
-    else
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(elasticConstsE[i], elasticConsts[i],
-				   tolerance);
+    _matElastic->_calcElasticConsts(&elasticConsts[0], elasticConsts.size(),
+				    &properties[0], properties.size(),
+				    &stateVars[0], stateVars.size(),
+				    &strain[0], strain.size(),
+				    &initialStress[0], initialStress.size(),
+				    &initialStrain[0], initialStrain.size());
+
+    const double* elasticConstsE = data->elasticConsts;
+    CPPUNIT_ASSERT(0 != elasticConstsE);
+    
+    const double tolerance = 1.0e-06;
+    for (int i=0; i < numConsts; ++i)
+      if (fabs(elasticConstsE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, elasticConsts[i]/elasticConstsE[i], 
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(elasticConstsE[i], elasticConsts[i],
+				     tolerance);
+  } // for
 } // _testCalcElasticConsts
 
 // ----------------------------------------------------------------------
@@ -506,7 +530,55 @@
 void
 pylith::materials::TestElasticMaterial::test_updateStateVars(void)
 { // test_updateStateVars
-  CPPUNIT_ASSERT(false);
+  CPPUNIT_ASSERT(0 != _matElastic);
+  CPPUNIT_ASSERT(0 != _dataElastic);
+  const ElasticMaterialData* data = _dataElastic;
+
+  const bool computeStateVars = true;
+
+  const int numLocs = _data->numLocs;
+  const int numPropsQuadPt = _data->numPropsQuadPt;
+  const int numVarsQuadPt = _data->numVarsQuadPt;
+  const int tensorSize = _matElastic->_tensorSize;
+  
+  double_array properties(numPropsQuadPt);
+  double_array stateVars(numVarsQuadPt);
+  double_array strain(tensorSize);
+  double_array initialStress(tensorSize);
+  double_array initialStrain(tensorSize);
+
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
+	   numPropsQuadPt*sizeof(double));
+    memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
+	   numVarsQuadPt*sizeof(double));
+    memcpy(&strain[0], &data->strain[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+    memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+    memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
+	   tensorSize*sizeof(double));
+
+    _matElastic->_updateStateVars(&stateVars[0], stateVars.size(),
+				  &properties[0], properties.size(),
+				  &strain[0], strain.size(),
+				  &initialStress[0], initialStress.size(),
+				  &initialStrain[0], initialStrain.size());
+    
+    const double* stateVarsE = 
+      (numVarsQuadPt > 0) ? data->stateVarsUpdated : 0;
+    CPPUNIT_ASSERT( (0 < numVarsQuadPt && 0 != stateVarsE) ||
+		    (0 == numVarsQuadPt && 0 == stateVarsE) );
+
+    const double tolerance = 1.0e-06;
+    for (int i=0; i < numVarsQuadPt; ++i)
+      if (fabs(stateVarsE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i], 
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i],
+				     tolerance);
+  } // for
 } // test_updateStateVars
 
 // ----------------------------------------------------------------------
@@ -519,8 +591,8 @@
   const ElasticMaterialData* data = _dataElastic;
 
   const double dt =
-  _matElastic->_stableTimeStepImplicit(data->parameterData, 
-				       data->numParamsQuadPt);
+    _matElastic->_stableTimeStepImplicit(data->properties, data->numPropsQuadPt,
+					 data->stateVars, data->numVarsQuadPt);
 
   const double dtE = data->dtStableImplicit;
 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.hh	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestElasticMaterial.hh	2009-02-22 22:59:10 UTC (rev 14116)
@@ -22,6 +22,7 @@
 #define pylith_materials_testelasticmaterial_hh
 
 #include "TestMaterial.hh"
+#include "pylith/materials/materialsfwd.hh" // forward declarations
 
 /// Namespace for pylith package
 namespace pylith {
@@ -40,6 +41,7 @@
 
   CPPUNIT_TEST( testDBInitialStress );
   CPPUNIT_TEST( testDBInitialStrain );
+#if 0
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TETS( testRetrievePropsAndVars );
   CPPUNIT_TEST( testCalcDensity );
@@ -47,7 +49,7 @@
   CPPUNIT_TEST( testCalcDerivElastic );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testStableTimeStepImplicit );
-  CPPUNIT_TEST( testUseElasticBehavior );
+#endif
 
   CPPUNIT_TEST_SUITE_END();
 
@@ -81,9 +83,6 @@
   /// Test stableTimeStepImplicit().
   void testStableTimeStepImplicit(void);
 
-  /// Test useElasticBehavior().
-  void testUseElasticBehavior(void);
-
   // PUBLIC METHODS /////////////////////////////////////////////////////
 public :
 
@@ -119,6 +118,20 @@
   ElasticMaterial* _matElastic; ///< Test subject.
   ElasticMaterialData* _dataElastic; ///< Data for tests.
 
+  // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+#if 0
+  /** Setup mesh and material.
+   *
+   * @param mesh Finite-element mesh.
+   * @param material Elastic material.
+   * @param data Data with properties for elastic material.
+   */
+  void _initialize(topology::Mesh* mesh,
+		   ElasticMaterial* material,
+		   const ElasticMaterialData* data);
+#endif
 }; // class TestElasticMaterial
 
 #endif // pylith_materials_testelasticmaterial_hh

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMaterial.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMaterial.cc	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMaterial.cc	2009-02-22 22:59:10 UTC (rev 14116)
@@ -27,11 +27,9 @@
 #include "spatialdata/geocoords/CSCart.hh" // USES CSCart
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
 
-#include "pylith/utils/sievetypes.hh" // USES Mesh
+#include <cstring> // USES strcmp()
+#include <cassert> // USES assert()
 
-#include <string.h> // USES strcmp()
-#include <math.h> // USES assert()
-
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestMaterial );
 
@@ -141,51 +139,20 @@
 void
 pylith::materials::TestMaterial::testInitialize(void)
 { // testInitialize
+  // Setup mesh
   topology::Mesh mesh;
-  const int materialID = 24;
-  { // create mesh
-    const int cellDim = 1;
-    const int numCorners = 3;
-    const int spaceDim = 1;
-    const int numVertices = 3;
-    const int numCells = 1;
-    const double vertCoords[] = { -1.0, 0.0, 1.0};
-    const int cells[] = { 0, 1, 2 };
-    CPPUNIT_ASSERT(0 != vertCoords);
-    CPPUNIT_ASSERT(0 != cells);
+  meshio::MeshIOAscii iohandler;
+  iohandler.filename("");
+  iohandler.read(&mesh);
 
-    mesh = new Mesh(PETSC_COMM_WORLD, cellDim);
-    ALE::Obj<sieve_type> sieve = new sieve_type(mesh->comm());
-
-    const bool interpolate = false;
-    ALE::Obj<ALE::Mesh::sieve_type> s = new ALE::Mesh::sieve_type(sieve->comm(), sieve->debug());
-
-    ALE::SieveBuilder<ALE::Mesh>::buildTopology(s, cellDim, numCells,
-                                                const_cast<int*>(cells), numVertices,
-                                                interpolate, numCorners);
-    std::map<Mesh::point_type,Mesh::point_type> renumbering;
-    ALE::ISieveConverter::convertSieve(*s, *sieve, renumbering);
-    mesh->setSieve(sieve);
-    mesh->stratify();
-    ALE::SieveBuilder<Mesh>::buildCoordinates(mesh, spaceDim, vertCoords);
-
-  } // create mesh
-
-  { // set material ids
-    const ALE::Obj<Mesh::label_sequence>& cells = mesh->heightStratum(0);
-    const ALE::Obj<Mesh::label_type>& labelMaterials = mesh->createLabel("material-id");
-    int i = 0;
-    for(Mesh::label_sequence::iterator e_iter = cells->begin();
-	e_iter != cells->end();
-	++e_iter)
-      mesh->setValue(labelMaterials, *e_iter, materialID);
-  } // set material ids
-
+  // Set up coordinates
   spatialdata::geocoords::CSCart cs;
-  cs.setSpaceDim(1);
+  cs.setSpaceDim(mesh.dimension());
   cs.initialize();
+  mesh.coordsys(&cs);
 
-  feassemble::Quadrature1D quadrature;
+  // Setup quadrature
+  feassemble::Quadrature<topology::Mesh> quadrature;
   feassemble::GeometryLine1D geometry;
   quadrature.refGeometry(&geometry);
   const int cellDim = 1;
@@ -199,6 +166,7 @@
   quadrature.initialize(basis, basisDeriv, quadPtsRef, quadWts,
 			cellDim, numCorners, numQuadPts, spaceDim);
 
+
   spatialdata::spatialdb::SimpleDB db;
   spatialdata::spatialdb::SimpleIOAscii iohandler;
   iohandler.filename("data/matinitialize.spatialdb");
@@ -207,12 +175,13 @@
   
   spatialdata::units::Nondimensional normalizer;
 
-  ElasticIsotropic3D material;
-  material.db(&db);
+  const int materialID = 24;
+  ElasticStrain1D material;
+  material.dbProperties(&db);
   material.id(materialID);
   material.label("my_material");
   material.normalizer(normalizer);
-  material.initialize(mesh, &cs, &quadrature);
+  material.initialize(mesh, &quadrature);
 
   const double densityA = 2000.0;
   const double vsA = 100.0;
@@ -334,22 +303,26 @@
   const int numLocs = _data->numLocs;
   const int propertiesSize = _data->numPropsQuadPt;
   double_array propertiesNondim(propertiesSize);
+  double_array properties(propertiesSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
-    _material->_nondimProperties(&_data->properties[0], propertiesSize);
+    memcpy(&properties[iLoc*propertiesSize], _data->properties,
+	   propertiesSize*sizeof(double));
+    _material->_nondimProperties(&properties[0], properties.size());
     
     const double* const propertiesNondimE =
       &_data->propertiesNondim[iLoc*propertiesSize];
+    CPPUNIT_ASSERT(0 != propertiesNondimE);
 
     const double tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesNondimE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
-				     propertiesNondim[i]/propertiesNondimE[i],
+				     properties[i]/propertiesNondimE[i],
 				     tolerance);
       else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesNondimE[i], propertiesNondim[i],
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesNondimE[i], properties[i],
 				     tolerance);
     } // for
   } // for
@@ -369,10 +342,13 @@
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
-    _material->_dimProperties(&_data->propertiesNondim[0], propertiesSize);
+    memcpy(&properties[iLoc*propertiesSize], _data->propertiesNondim, 
+	   propertiesSize*sizeof(double));
+    _material->_dimProperties(&properties[0], properties.size());
     
     const double* const propertiesE =
       &_data->properties[iLoc*propertiesSize];
+    CPPUNIT_ASSERT(0 != propertiesE);
 
     const double tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
@@ -399,7 +375,7 @@
   const int numDBStateVars = _data->numDBStateVars;
   double_array dbValues(numDBStateVars);
 
-  const int stateVarsSize = _data->numPropsQuadPt;
+  const int stateVarsSize = _data->numVarsQuadPt;
   double_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
@@ -408,7 +384,10 @@
 
     _material->_dbToStateVars(&stateVars[0], dbValues);
     
-    const double* const stateVarsE = &_data->stateVars[iLoc*stateVarsSize];
+    const double* const stateVarsE = 
+      (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
+    CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
+		    (0 == stateVarsSize && 0 == stateVarsE) );
     const double tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsE[i]) > tolerance)
@@ -431,24 +410,28 @@
   CPPUNIT_ASSERT(0 != _data);
   
   const int numLocs = _data->numLocs;
-  const int stateVarsSize = _data->numPropsQuadPt;
-  double_array stateVarsNondim(stateVarsSize);
+  const int stateVarsSize = _data->numVarsQuadPt;
+  double_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
-    _material->_nondimStateVars(&_data->stateVars[0], stateVarsSize);
+    memcpy(&stateVars[iLoc*stateVarsSize], _data->stateVars,
+	   stateVarsSize*sizeof(double));
+    _material->_nondimStateVars(&stateVars[0], stateVars.size());
     
     const double* const stateVarsNondimE =
-      &_data->stateVarsNondim[iLoc*stateVarsSize];
+      (stateVarsSize > 0) ? &_data->stateVarsNondim[iLoc*stateVarsSize] : 0;
+    CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsNondimE) ||
+		    (0 == stateVarsSize && 0 == stateVarsNondimE) );
 
     const double tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsNondimE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
-				     stateVarsNondim[i]/stateVarsNondimE[i],
+				     stateVars[i]/stateVarsNondimE[i],
 				     tolerance);
       else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsNondimE[i], stateVarsNondim[i],
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsNondimE[i], stateVars[i],
 				     tolerance);
     } // for
   } // for
@@ -463,15 +446,19 @@
   CPPUNIT_ASSERT(0 != _data);
   
   const int numLocs = _data->numLocs;
-  const int stateVarsSize = _data->numPropsQuadPt;
+  const int stateVarsSize = _data->numVarsQuadPt;
   double_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
-    _material->_dimStateVars(&_data->stateVarsNondim[0], stateVarsSize);
+    memcpy(&stateVars[iLoc*stateVarsSize], _data->stateVarsNondim,
+	   stateVarsSize*sizeof(double));
+    _material->_dimStateVars(&stateVars[0], stateVars.size());
     
     const double* const stateVarsE =
-      &_data->stateVars[iLoc*stateVarsSize];
+      (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
+    CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
+		    (0 == stateVarsSize && 0 == stateVarsE) );
 
     const double tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {

Added: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.cc	2009-02-22 22:59:10 UTC (rev 14116)
@@ -0,0 +1,217 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestMetadata.hh" // Implementation of class methods
+
+#include "pylith/materials/Metadata.hh" // USES Metadata
+#include "pylith/utils/array.hh" // USES double_array
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestMetadata );
+
+// ----------------------------------------------------------------------
+namespace pylith {
+  namespace materials {
+    namespace _TestMetadata {
+      const Metadata::ParamDescription properties[] = {
+	{ "one", 1, pylith::topology::FieldBase::SCALAR },
+	{ "two", 2, pylith::topology::FieldBase::VECTOR },
+	{ "three", 3, pylith::topology::FieldBase::TENSOR },
+      };
+      const int numProperties = 3;
+      const char* dbProperties[] = {
+	"prop_one", "prop_two", "prop_three", "prop_four",
+      };
+      const int numDBProperties = 4;
+      const Metadata::ParamDescription stateVars[] = {
+	{ "var1", 1, pylith::topology::FieldBase::TENSOR },
+	{ "var2", 3, pylith::topology::FieldBase::VECTOR },
+      };
+      const int numStateVars = 2;
+      const char* dbStateVars[] = {
+	"var_one", "var_two", "var_three",
+      };
+      const int numDBStateVars = 3;
+    } // _TestMetadata
+  } // materials
+} // pylith
+
+// ----------------------------------------------------------------------
+// Setup test data.
+void
+pylith::materials::TestMetadata::setUp(void)
+{ // setUp
+  _metadata = new Metadata(_TestMetadata::properties,
+			   _TestMetadata::numProperties,
+			   _TestMetadata::dbProperties,
+			   _TestMetadata::numDBProperties,
+			   _TestMetadata::stateVars,
+			   _TestMetadata::numStateVars,
+			   _TestMetadata::dbStateVars,
+			   _TestMetadata::numDBStateVars);
+  CPPUNIT_ASSERT(0 != _metadata);
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down test data.
+void
+pylith::materials::TestMetadata::tearDown(void)
+{ // tearDown
+  delete _metadata; _metadata = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::materials::TestMetadata::testConstructor(void)
+{ // testConstructor
+  CPPUNIT_ASSERT(0 != _metadata);
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test copy constructor.
+void
+pylith::materials::TestMetadata::testCopyConstructor(void)
+{ // testCopyConstructor
+  Metadata m(*_metadata);
+
+  delete _metadata; _metadata = &m;
+  testProperties();
+  testStateVars();
+  testFiberDim();
+  testFieldType();
+  testDBProperties();
+  testDBStateVars();
+
+  _metadata = 0;
+} // testCopyConstructor
+
+// ----------------------------------------------------------------------
+// Test properties().
+void
+pylith::materials::TestMetadata::testProperties(void)
+{ // testProperties
+  CPPUNIT_ASSERT(0 != _metadata);
+
+  const string_vector& properties = _metadata->properties();
+  const size_t numProperties = _TestMetadata::numProperties;
+  CPPUNIT_ASSERT_EQUAL(numProperties, properties.size());
+  for (size_t i=0; i < numProperties; ++i)
+    CPPUNIT_ASSERT_EQUAL(std::string(_TestMetadata::properties[i].name),
+			 properties[i]);
+} // testProperties
+
+// ----------------------------------------------------------------------
+// Test stateVars().
+void
+pylith::materials::TestMetadata::testStateVars(void)
+{ // testStateVars
+  CPPUNIT_ASSERT(0 != _metadata);
+
+  const string_vector& stateVars = _metadata->stateVars();
+  const size_t numStateVars = _TestMetadata::numStateVars;
+  CPPUNIT_ASSERT_EQUAL(numStateVars, stateVars.size());
+  for (size_t i=0; i < numStateVars; ++i)
+    CPPUNIT_ASSERT_EQUAL(std::string(_TestMetadata::stateVars[i].name),
+			 stateVars[i]);
+} // testStateVars
+
+// ----------------------------------------------------------------------
+// Test fiberDim().
+void
+pylith::materials::TestMetadata::testFiberDim(void)
+{ // testFiberDim
+  CPPUNIT_ASSERT(0 != _metadata);
+
+  { // check property
+  const int index = 1;
+  const char* property = _TestMetadata::properties[index].name;
+  const int fiberDimE = _TestMetadata::properties[index].fiberDim;
+  const int fiberDim = _metadata->fiberDim(property, Metadata::PROPERTY);
+  CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
+  } // check property
+
+  { // check state variable
+  const int index = 1;
+  const char* stateVar = _TestMetadata::stateVars[index].name;
+  const int fiberDimE = _TestMetadata::stateVars[index].fiberDim;
+  const int fiberDim = _metadata->fiberDim(stateVar, Metadata::STATEVAR);
+  CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
+  } // check state variable
+} // testFiberDim
+
+// ----------------------------------------------------------------------
+// Test fieldType().
+void
+pylith::materials::TestMetadata::testFieldType(void)
+{ // testFieldType
+  CPPUNIT_ASSERT(0 != _metadata);
+
+  { // check property
+  const int index = 2;
+  const char* property = _TestMetadata::properties[index].name;
+  const topology::FieldBase::VectorFieldEnum fieldTypeE = 
+    _TestMetadata::properties[index].fieldType;
+  const topology::FieldBase::VectorFieldEnum fieldType =
+    _metadata->fieldType(property, Metadata::PROPERTY);
+  CPPUNIT_ASSERT_EQUAL(fieldTypeE, fieldType);
+  } // check property
+
+  { // check state variable
+  const int index = 0;
+  const char* stateVar = _TestMetadata::stateVars[index].name;
+  const topology::FieldBase::VectorFieldEnum fieldTypeE = 
+    _TestMetadata::stateVars[index].fieldType;
+  const topology::FieldBase::VectorFieldEnum fieldType =
+    _metadata->fieldType(stateVar, Metadata::STATEVAR);
+  CPPUNIT_ASSERT_EQUAL(fieldTypeE, fieldType);
+  } // check state variable
+} // testFieldType
+
+// ----------------------------------------------------------------------
+// Test dbProperties().
+void
+pylith::materials::TestMetadata::testDBProperties(void)
+{ // testDBProperties
+  CPPUNIT_ASSERT(0 != _metadata);
+
+  const int numDBProperties = _TestMetadata::numDBProperties;
+  CPPUNIT_ASSERT_EQUAL(numDBProperties, _metadata->numDBProperties());
+
+  const char* const* dbPropertiesE = _TestMetadata::dbProperties;
+  const char* const* dbProperties = _metadata->dbProperties();
+ 
+  for (int i=0; i < numDBProperties; ++i)
+    CPPUNIT_ASSERT(0 == strcmp(dbPropertiesE[i], dbProperties[i]));
+} // testDBProperties
+
+// ----------------------------------------------------------------------
+// Test dbStateVars().
+void
+pylith::materials::TestMetadata::testDBStateVars(void)
+{ // testDBStateVars
+  CPPUNIT_ASSERT(0 != _metadata);
+
+  const int numDBStateVars = _TestMetadata::numDBStateVars;
+  CPPUNIT_ASSERT_EQUAL(numDBStateVars, _metadata->numDBStateVars());
+
+  const char* const* dbStateVarsE = _TestMetadata::dbStateVars;
+  const char* const* dbStateVars = _metadata->dbStateVars();
+ 
+  for (int i=0; i < numDBStateVars; ++i)
+    CPPUNIT_ASSERT(0 == strcmp(dbStateVarsE[i], dbStateVars[i]));
+} // testDBStateVars
+
+
+// End of file 

Added: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/TestMetadata.hh	2009-02-22 22:59:10 UTC (rev 14116)
@@ -0,0 +1,95 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/materials/TestMetadata.hh
+ *
+ * @brief C++ TestMetadata object
+ *
+ * C++ unit testing for Material.
+ */
+
+#if !defined(pylith_materials_testmetadata_hh)
+#define pylith_materials_testmetadata_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "pylith/materials/materialsfwd.hh" // forward declarations
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace materials {
+    class TestMetadata;
+  } // materials
+} // pylith
+
+/// C++ unit testing for Material
+class pylith::materials::TestMetadata : public CppUnit::TestFixture
+{ // class TestMetadata
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestMetadata );
+
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testCopyConstructor );
+  CPPUNIT_TEST( testProperties );
+  CPPUNIT_TEST( testStateVars );
+  CPPUNIT_TEST( testFiberDim );
+  CPPUNIT_TEST( testFieldType );
+  CPPUNIT_TEST( testDBProperties );
+  CPPUNIT_TEST( testDBStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup test data.
+  void setUp(void);
+
+  /// Tear down test data.
+  void tearDown(void);
+
+  /// Test constructor.
+  void testConstructor(void);
+
+  /// Test copy constructor.
+  void testCopyConstructor(void);
+
+  /// Test properties().
+  void testProperties(void);
+
+  /// Test stateVars().
+  void testStateVars(void);
+
+  /// Test fiberDim().
+  void testFiberDim(void);
+
+  /// Test fieldType().
+  void testFieldType(void);
+
+  /// Test dbProperties() and numDBProperties().
+  void testDBProperties(void);
+
+  /// Test dbStateVars() and numDBStateVars().
+  void testDBStateVars(void);
+
+  // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+  Metadata* _metadata; ///< Object for testing
+
+}; // class TestMetadata
+
+#endif // pylith_materials_testmetadata_hh
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3D.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3D.py	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3D.py	2009-02-22 22:59:10 UTC (rev 14116)
@@ -20,6 +20,10 @@
 import numpy
 
 # ----------------------------------------------------------------------
+dimension = 3
+numElasticConsts = 21
+tensorSize = 6
+
 # ElasticIsotropic3D class
 class ElasticIsotropic3D(ElasticMaterialApp):
   """
@@ -35,67 +39,72 @@
     """
     ElasticMaterialApp.__init__(self, name)
 
-    self.dimension = 3
+    numLocs = 2
 
-    self.numDBValues = 3
-    self.numInitialStateValues = 6
-    self.dbValues = ["density", "vs", "vp"]
-    self.initialStateDBValues = ["stress_xx", "stress_yy", "stress_zz",
-		                 "stress_xy", "stress_yz", "stress_xz" ]
-    self.numParameters = 3
-    self.numParamValues = [1, 1, 1]
-    self.parameterNames = ["density", "mu", "lambda"]
+    self.dimension = dimension
+    self.numLocs = numLocs
+    
+    self.dbPropertyValues = ["density", "vs", "vp"]    
+    self.propertyValues = ["density", "mu", "lambda"]
+    self.numPropertyValues = numpy.array([1, 1, 1], dtype=numpy.int32)
 
     densityA = 2500.0
     vsA = 3000.0
     vpA = vsA*3**0.5
-    strainA = [1.1e-4, 2.2e-4, 3.3e-4, 4.4e-4, 5.5e-4, 6.6e-4]
-    initialStateA = [1.2e4, 2.3e4, 3.4e4, 4.5e4, 5.6e4, 6.7e4]
+    strainA = [1.1e-4, 1.2e-4, 1.3e-4, 1.4e-4, 1.5e-4, 1.6e-4]
+    initialStressA = [2.1e4, 2.2e4, 2.3e4, 2.4e4, 2.5e4, 2.6e4]
+    initialStrainA = [3.1e-4, 3.2e-4, 3.3e-4, 3.4e-4, 3.5e-6, 3.6e-4]
     
     densityB = 2000.0
     vsB = 1200.0
     vpB = vsB*3**0.5
-    strainB = [1.2e-4, 2.3e-4, 3.4e-4, 4.5e-4, 5.6e-4, 6.7e-4]
-    initialStateB = [2.1e4, 3.2e4, 4.3e4, 5.4e4, 6.5e4, 7.6e4]
-
-    self.dbData = numpy.array([ [densityA, vsA, vpA],
-                                [densityB, vsB, vpB] ],
-                              dtype=numpy.float64)
+    strainB = [4.1e-4, 4.2e-4, 4.3e-4, 4.4e-4, 4.5e-4, 4.6e-4]
+    initialStressB = [5.1e4, 5.2e4, 5.3e4, 5.4e4, 5.5e4, 5.6e4]
+    initialStrainB = [6.1e-4, 6.2e-4, 6.3e-4, 6.4e-4, 6.5e-6, 6.6e-4]
+    
+    self.dbProperties = numpy.array([ [densityA, vsA, vpA],
+                                      [densityB, vsB, vpB] ], 
+                                    dtype=numpy.float64)
     muA = vsA*vsA*densityA
     lambdaA = vpA*vpA*densityA - 2.0*muA
     muB = vsB*vsB*densityB
     lambdaB = vpB*vpB*densityB - 2.0*muB
-    self.parameterData = numpy.array([ [densityA, muA, lambdaA],
-                                       [densityB, muB, lambdaB] ],
+    self.properties = numpy.array([ [densityA, muA, lambdaA],                                                       [densityB, muB, lambdaB] ],
                                      dtype=numpy.float64)
 
-    self.initialStateDBData = numpy.array([initialStateA, initialStateB],
+    self.initialStress = numpy.array([initialStressA,
+                                      initialStressB],
                                     dtype=numpy.float64)
-    self.initialState = numpy.array([initialStateA, initialStateB],
+    self.initialStrain = numpy.array([initialStrainA,
+                                      initialStrainB],
                                     dtype=numpy.float64)
     
-    self.numLocs = 2
-    numElasticConsts = 21
-    self.density = numpy.array([densityA, densityB],
+    self.density = numpy.array([densityA,
+                                densityB],
                                dtype=numpy.float64)
 
-    self.strain = numpy.array([strainA, strainB],
+    self.strain = numpy.array([strainA,
+                               strainB],
                                dtype=numpy.float64)
     
-    self.stress = numpy.zeros( (self.numLocs, 6), dtype=numpy.float64)
-    self.elasticConsts = numpy.zeros( (self.numLocs, numElasticConsts),
-                                      dtype=numpy.float64)
+    stress = numpy.zeros( (numLocs, tensorSize), dtype=numpy.float64)
+    elasticConsts = numpy.zeros( (numLocs, numElasticConsts),
+                                 dtype=numpy.float64)
 
-    (self.elasticConsts[0,:], self.stress[0,:]) = \
-                              self._calcStress(strainA, densityA, muA, lambdaA,
-                                               initialStateA)
-    (self.elasticConsts[1,:], self.stress[1,:]) = \
-                              self._calcStress(strainB, densityB, muB, lambdaB,
-                                               initialStateB)
+    (elasticConsts[0,:], stress[0,:]) = \
+        self._calcStress(strainA, densityA, muA, lambdaA,
+                         initialStressA, initialStrainA)
+    (elasticConsts[1,:], stress[1,:]) = \
+        self._calcStress(strainB, densityB, muB, lambdaB,
+                         initialStressB, initialStrainB)
+
+    self.stress = stress
+    self.elasticConsts = elasticConsts
     return
 
 
-  def _calcStress(self, strainV, densityV, muV, lambdaV, initialStateV):
+  def _calcStress(self, strainV, densityV, muV, lambdaV,
+                  initialStressV, initialStrainV):
     """
     Compute stress and derivative of elasticity matrix.
     """
@@ -127,8 +136,9 @@
                                  C2323, C2313,
                                  C1313], dtype=numpy.float64)
 
-    strain = numpy.reshape(strainV, (6,1))
-    initialState = numpy.reshape(initialStateV, (6,1))
+    strain = numpy.reshape(strainV, (tensorSize,1))
+    initialStress = numpy.reshape(initialStressV, (tensorSize,1))
+    initialStrain = numpy.reshape(initialStrainV, (tensorSize,1))
     elastic = numpy.array([ [C1111, C1122, C1133, C1112, C1123, C1113],
                             [C1122, C2222, C2233, C2212, C2223, C2213],
                             [C1133, C2233, C3333, C3312, C3323, C3313],
@@ -136,7 +146,7 @@
                             [C1123, C2223, C3323, C1223, C2323, C2313],
                             [C1113, C2213, C3313, C1213, C2313, C1313] ],
                           dtype=numpy.float64)
-    stress = numpy.dot(elastic, strain) + initialState
+    stress = initialStress + numpy.dot(elastic, initialStrain + strain)
     return (elasticConsts, numpy.ravel(stress))
   
 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.cc	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.cc	2009-02-22 22:59:10 UTC (rev 14116)
@@ -17,40 +17,39 @@
 
 const int pylith::materials::ElasticIsotropic3DData::_dimension = 3;
 
-const int pylith::materials::ElasticIsotropic3DData::_numDBValues = 3;
+const int pylith::materials::ElasticIsotropic3DData::_numLocs = 2;
 
-const int pylith::materials::ElasticIsotropic3DData::_numInitialStateValues = 6;
+const int pylith::materials::ElasticIsotropic3DData::_numProperties = 3;
 
-const int pylith::materials::ElasticIsotropic3DData::_numParameters = 3;
+const int pylith::materials::ElasticIsotropic3DData::_numStateVars = 0;
 
-const int pylith::materials::ElasticIsotropic3DData::_numParamsQuadPt = 3;
+const int pylith::materials::ElasticIsotropic3DData::_numDBProperties = 3;
 
-const int pylith::materials::ElasticIsotropic3DData::_numLocs = 2;
+const int pylith::materials::ElasticIsotropic3DData::_numDBStateVars = 0;
 
+const int pylith::materials::ElasticIsotropic3DData::_numPropsQuadPt = 3;
+
+const int pylith::materials::ElasticIsotropic3DData::_numVarsQuadPt = 0;
+
 const double pylith::materials::ElasticIsotropic3DData::_dtStableImplicit =   1.00000000e+30;
 
-const int pylith::materials::ElasticIsotropic3DData::_numParamValues[] = {
+const int pylith::materials::ElasticIsotropic3DData::_numPropertyValues[] = {
 1,
 1,
 1,
 };
 
-const char* pylith::materials::ElasticIsotropic3DData::_dbValues[] = {
+const int* pylith::materials::ElasticIsotropic3DData::_numStateVarValues = 0;
+
+const char* pylith::materials::ElasticIsotropic3DData::_dbPropertyValues[] = {
 "density",
 "vs",
 "vp",
 };
 
-const char* pylith::materials::ElasticIsotropic3DData::_initialStateDBValues[] = {
-"stress_xx",
-"stress_yy",
-"stress_zz",
-"stress_xy",
-"stress_yz",
-"stress_xz",
-};
+const char** pylith::materials::ElasticIsotropic3DData::_dbStateVarValues = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_dbData[] = {
+const double pylith::materials::ElasticIsotropic3DData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -59,22 +58,9 @@
   2.07846097e+03,
 };
 
-const double pylith::materials::ElasticIsotropic3DData::_initialStateDBData[] = {
-  1.20000000e+04,
-  2.30000000e+04,
-  3.40000000e+04,
-  4.50000000e+04,
-  5.60000000e+04,
-  6.70000000e+04,
-  2.10000000e+04,
-  3.20000000e+04,
-  4.30000000e+04,
-  5.40000000e+04,
-  6.50000000e+04,
-  7.60000000e+04,
-};
+const double* pylith::materials::ElasticIsotropic3DData::_dbStateVars = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_parameterData[] = {
+const double pylith::materials::ElasticIsotropic3DData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -83,21 +69,16 @@
   2.88000000e+09,
 };
 
-const double pylith::materials::ElasticIsotropic3DData::_initialState[] = {
-  1.20000000e+04,
-  2.30000000e+04,
-  3.40000000e+04,
-  4.50000000e+04,
-  5.60000000e+04,
-  6.70000000e+04,
-  2.10000000e+04,
-  3.20000000e+04,
-  4.30000000e+04,
-  5.40000000e+04,
-  6.50000000e+04,
-  7.60000000e+04,
+const double* pylith::materials::ElasticIsotropic3DData::_stateVars = 0;
+
+const double pylith::materials::ElasticIsotropic3DData::_propertiesNondim[] = {
+  0.00000000e+00,
 };
 
+const double pylith::materials::ElasticIsotropic3DData::_stateVarsNondim[] = {
+  0.00000000e+00,
+};
+
 const double pylith::materials::ElasticIsotropic3DData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
@@ -105,32 +86,32 @@
 
 const double pylith::materials::ElasticIsotropic3DData::_strain[] = {
   1.10000000e-04,
-  2.20000000e-04,
-  3.30000000e-04,
+  1.20000000e-04,
+  1.30000000e-04,
+  1.40000000e-04,
+  1.50000000e-04,
+  1.60000000e-04,
+  4.10000000e-04,
+  4.20000000e-04,
+  4.30000000e-04,
   4.40000000e-04,
-  5.50000000e-04,
-  6.60000000e-04,
-  1.20000000e-04,
-  2.30000000e-04,
-  3.40000000e-04,
   4.50000000e-04,
-  5.60000000e-04,
-  6.70000000e-04,
+  4.60000000e-04,
 };
 
 const double pylith::materials::ElasticIsotropic3DData::_stress[] = {
-  1.98120000e+07,
-  2.47730000e+07,
-  2.97340000e+07,
-  1.98450000e+07,
-  2.48060000e+07,
-  2.97670000e+07,
-  2.69940000e+06,
-  3.34400000e+06,
-  3.98860000e+06,
-  2.64600000e+06,
-  3.29060000e+06,
-  3.93520000e+06,
+  4.86210000e+07,
+  4.95220000e+07,
+  5.04230000e+07,
+  2.16240000e+07,
+  6.93250000e+06,
+  2.34260000e+07,
+  1.49118000e+07,
+  1.50280000e+07,
+  1.51442000e+07,
+  6.27480000e+06,
+  2.68444000e+06,
+  6.50720000e+06,
 };
 
 const double pylith::materials::ElasticIsotropic3DData::_elasticConsts[] = {
@@ -178,26 +159,66 @@
   5.76000000e+09,
 };
 
+const double pylith::materials::ElasticIsotropic3DData::_initialStress[] = {
+  2.10000000e+04,
+  2.20000000e+04,
+  2.30000000e+04,
+  2.40000000e+04,
+  2.50000000e+04,
+  2.60000000e+04,
+  5.10000000e+04,
+  5.20000000e+04,
+  5.30000000e+04,
+  5.40000000e+04,
+  5.50000000e+04,
+  5.60000000e+04,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_initialStrain[] = {
+  3.10000000e-04,
+  3.20000000e-04,
+  3.30000000e-04,
+  3.40000000e-04,
+  3.50000000e-06,
+  3.60000000e-04,
+  6.10000000e-04,
+  6.20000000e-04,
+  6.30000000e-04,
+  6.40000000e-04,
+  6.50000000e-06,
+  6.60000000e-04,
+};
+
+const double* pylith::materials::ElasticIsotropic3DData::_stateVarsUpdated = 0;
+
 pylith::materials::ElasticIsotropic3DData::ElasticIsotropic3DData(void)
 { // constructor
   dimension = _dimension;
-  numDBValues = _numDBValues;
-  numInitialStateValues = _numInitialStateValues;
-  numParameters = _numParameters;
-  numParamsQuadPt = _numParamsQuadPt;
   numLocs = _numLocs;
+  numProperties = _numProperties;
+  numStateVars = _numStateVars;
+  numDBProperties = _numDBProperties;
+  numDBStateVars = _numDBStateVars;
+  numPropsQuadPt = _numPropsQuadPt;
+  numVarsQuadPt = _numVarsQuadPt;
   dtStableImplicit = _dtStableImplicit;
-  numParamValues = const_cast<int*>(_numParamValues);
-  dbValues = const_cast<char**>(_dbValues);
-  initialStateDBValues = const_cast<char**>(_initialStateDBValues);
-  dbData = const_cast<double*>(_dbData);
-  initialStateDBData = const_cast<double*>(_initialStateDBData);
-  parameterData = const_cast<double*>(_parameterData);
-  initialState = const_cast<double*>(_initialState);
+  numPropertyValues = const_cast<int*>(_numPropertyValues);
+  numStateVarValues = const_cast<int*>(_numStateVarValues);
+  dbPropertyValues = const_cast<char**>(_dbPropertyValues);
+  dbStateVarValues = const_cast<char**>(_dbStateVarValues);
+  dbProperties = const_cast<double*>(_dbProperties);
+  dbStateVars = const_cast<double*>(_dbStateVars);
+  properties = const_cast<double*>(_properties);
+  stateVars = const_cast<double*>(_stateVars);
+  propertiesNondim = const_cast<double*>(_propertiesNondim);
+  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
   density = const_cast<double*>(_density);
   strain = const_cast<double*>(_strain);
   stress = const_cast<double*>(_stress);
   elasticConsts = const_cast<double*>(_elasticConsts);
+  initialStress = const_cast<double*>(_initialStress);
+  initialStrain = const_cast<double*>(_initialStrain);
+  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::ElasticIsotropic3DData::~ElasticIsotropic3DData(void)

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.hh	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticIsotropic3DData.hh	2009-02-22 22:59:10 UTC (rev 14116)
@@ -39,32 +39,42 @@
 
   static const int _dimension;
 
-  static const int _numDBValues;
+  static const int _numLocs;
 
-  static const int _numInitialStateValues;
+  static const int _numProperties;
 
-  static const int _numParameters;
+  static const int _numStateVars;
 
-  static const int _numParamsQuadPt;
+  static const int _numDBProperties;
 
-  static const int _numLocs;
+  static const int _numDBStateVars;
 
+  static const int _numPropsQuadPt;
+
+  static const int _numVarsQuadPt;
+
   static const double _dtStableImplicit;
 
-  static const int _numParamValues[];
+  static const int _numPropertyValues[];
 
-  static const char* _dbValues[];
+  static const int* _numStateVarValues;
 
-  static const char* _initialStateDBValues[];
+  static const char* _dbPropertyValues[];
 
-  static const double _dbData[];
+  static const char** _dbStateVarValues;
 
-  static const double _initialStateDBData[];
+  static const double _dbProperties[];
 
-  static const double _parameterData[];
+  static const double* _dbStateVars;
 
-  static const double _initialState[];
+  static const double _properties[];
 
+  static const double* _stateVars;
+
+  static const double _propertiesNondim[];
+
+  static const double _stateVarsNondim[];
+
   static const double _density[];
 
   static const double _strain[];
@@ -73,6 +83,12 @@
 
   static const double _elasticConsts[];
 
+  static const double _initialStress[];
+
+  static const double _initialStrain[];
+
+  static const double* _stateVarsUpdated;
+
 };
 
 #endif // pylith_materials_elasticisotropic3ddata_hh

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialApp.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialApp.py	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialApp.py	2009-02-22 22:59:10 UTC (rev 14116)
@@ -58,26 +58,34 @@
     Script.__init__(self, name)
 
     # Material information
-    self.dimension = None
-    self.numDBValues = None
-    self.numInitialStateValues = None
-    self.numParameters = None
-    self.numParamsQuadPt = None
-    self.numParamValues = None
-    self.dbValues = None
-    self.initialStateDBValues = None
-    self.dbData = None
-    self.initialStateDBData = None
-    self.parameterData = None
-    self.initialState = None
+    self.dimension = 0
+    self.numLocs = 0
+    self.numProperties = 0;
+    self.numStateVars = 0;
+    self.numDBProperties = 0;
+    self.numDBStateVars = 0;
+    self.numPropsQuadPt = 0;
+    self.numVarsQuadPt = 0;
+    self.numPropertyValues = None;
+    self.numStateVarValues = None;
+    self.dbPropertyValues = None;
+    self.dbStateVarValues = None;
+    self.dbProperties = None;
+    self.dbStateVars = None;
+    self.properties = None;
+    self.stateVars = None;
+    self.propertiesNondim = 0;
+    self.stateVarsNondim = 0;
 
     # Elastic material information
-    self.numLocs = None
+    self.dtStableImplicit = 1.0e+30
     self.density = None
     self.strain = None
     self.stress = None
     self.elasticConsts = None
-    self.dtStableImplicit = 1.0e+30
+    self.initialStress = None
+    self.initialStrain = None
+    self.stateVarsUpdated = None
     return
 
 
@@ -102,45 +110,74 @@
 
 
   def _initData(self):
-    self.numParamsQuadPt = numpy.sum(self.numParamValues)
+    self.numDBProperties = len(self.dbPropertyValues)
+    if not self.dbStateVarValues is None:
+      self.numDBStateVars = len(self.dbStateVarValues)
+    self.numPropsQuadPt = numpy.sum(self.numPropertyValues)
+    if not self.numStateVarValues is None:
+      self.numVarsQuadPt = numpy.sum(self.numStateVarValues)
+    self.numProperties = self.numPropertyValues.shape[0]
+    if not self.numStateVarValues is None:
+      self.numStateVars = self.numStateVarValues.shape[0]
 
     self.data.addScalar(vtype="int", name="_dimension",
                         value=self.dimension,
                         format="%d")
-    self.data.addScalar(vtype="int", name="_numDBValues",
-                        value=self.numDBValues,
+    self.data.addScalar(vtype="int", name="_numLocs",
+                        value=self.numLocs,
                         format="%d")
-    self.data.addScalar(vtype="int", name="_numInitialStateValues",
-                        value=self.numInitialStateValues,
+    self.data.addScalar(vtype="int", name="_numProperties",
+                        value=self.numProperties,
                         format="%d")
-    self.data.addScalar(vtype="int", name="_numParameters",
-                        value=self.numParameters,
+    self.data.addScalar(vtype="int", name="_numStateVars",
+                        value=self.numStateVars,
                         format="%d")
-    self.data.addScalar(vtype="int", name="_numParamsQuadPt",
-                        value=self.numParamsQuadPt,
+    self.data.addScalar(vtype="int", name="_numDBProperties",
+                        value=self.numDBProperties,
                         format="%d")
-    self.data.addArray(vtype="int", name="_numParamValues",
-                        values=self.numParamValues,
+    self.data.addScalar(vtype="int", name="_numDBStateVars",
+                        value=self.numDBStateVars,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_numPropsQuadPt",
+                        value=self.numPropsQuadPt,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_numVarsQuadPt",
+                        value=self.numVarsQuadPt,
+                        format="%d")
+    self.data.addArray(vtype="int", name="_numPropertyValues",
+                        values=self.numPropertyValues,
                         format="%d", ncols=1)
-    self.data.addArray(vtype="char*", name="_dbValues", values=self.dbValues,
+    self.data.addArray(vtype="int", name="_numStateVarValues",
+                        values=self.numStateVarValues,
+                        format="%d", ncols=1)
+    self.data.addArray(vtype="char*", name="_dbPropertyValues",
+                       values=self.dbPropertyValues,
                        format="\"%s\"", ncols=1)
-    self.data.addArray(vtype="char*", name="_initialStateDBValues",
-                       values=self.initialStateDBValues,
+    self.data.addArray(vtype="char*", name="_dbStateVarValues",
+                       values=self.dbStateVarValues,
 		       format="\"%s\"", ncols=1)
-    self.data.addArray(vtype="double", name="_dbData", values=self.dbData,
+    self.data.addArray(vtype="double", name="_dbProperties",
+                       values=self.dbProperties,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_initialStateDBData",
-                       values=self.initialStateDBData,
+    self.data.addArray(vtype="double", name="_dbStateVars",
+                       values=self.dbStateVars,
 		       format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_parameterData",
-                       values=self.parameterData,
+    self.data.addArray(vtype="double", name="_properties",
+                       values=self.properties,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_initialState",
-                       values=self.initialState,
+    self.data.addArray(vtype="double", name="_stateVars",
+                       values=self.stateVars,
                        format="%16.8e", ncols=1)
+    self.data.addArray(vtype="double", name="_propertiesNondim",
+                       values=self.propertiesNondim,
+                       format="%16.8e", ncols=1)
+    self.data.addArray(vtype="double", name="_stateVarsNondim",
+                       values=self.stateVarsNondim,
+                       format="%16.8e", ncols=1)
 
-    self.data.addScalar(vtype="int", name="_numLocs", value=self.numLocs,
-                        format="%d")
+    self.data.addScalar(vtype="double", name="_dtStableImplicit",
+                        value=self.dtStableImplicit,
+                        format="%16.8e")
     self.data.addArray(vtype="double", name="_density",
                        values=self.density,
                        format="%16.8e", ncols=1)
@@ -153,9 +190,15 @@
     self.data.addArray(vtype="double", name="_elasticConsts",
                        values=self.elasticConsts,
                        format="%16.8e", ncols=1)
-    self.data.addScalar(vtype="double", name="_dtStableImplicit",
-                        value=self.dtStableImplicit,
-                        format="%16.8e")
+    self.data.addArray(vtype="double", name="_initialStress",
+                       values=self.initialStress,
+                       format="%16.8e", ncols=1)
+    self.data.addArray(vtype="double", name="_initialStrain",
+                       values=self.initialStrain,
+                       format="%16.8e", ncols=1)
+    self.data.addArray(vtype="double", name="_stateVarsUpdated",
+                       values=self.stateVarsUpdated,
+                       format="%16.8e", ncols=1)
       
     return
 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.cc	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.cc	2009-02-22 22:59:10 UTC (rev 14116)
@@ -17,7 +17,10 @@
   density(0),
   strain(0),
   stress(0),
-  elasticConsts(0)
+  elasticConsts(0),
+  initialStress(0),
+  initialStrain(0),
+  stateVarsUpdated(0)
 { // constructor
 } // constructor
 

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.hh	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/ElasticMaterialData.hh	2009-02-22 22:59:10 UTC (rev 14116)
@@ -36,12 +36,17 @@
 // PUBLIC MEMBERS ///////////////////////////////////////////////////////
 public:
 
-  double dtStableImplicit; ///< Stable time step for implicit time stepping
-  double* density; ///< Density at locations
-  double* strain; ///< Strain at locations
-  double* stress; ///< Stress at locations
-  double* elasticConsts; ///< Elastic constants at locations
+  double dtStableImplicit; ///< Stable time step for implicit time stepping.
+  double* density; ///< Density at location.
+  double* strain; ///< Strain at location.
+  double* stress; ///< Stress at location.
+  double* elasticConsts; ///< Elastic constants at location.
 
+  double* initialStress; ///< Initial stress at location.
+  double* initialStrain; ///< Initial strain at location.
+
+  double* stateVarsUpdated; ///< Updated state variables at location.
+
 };
 
 #endif // pylith_materials_elasticmaterialdata_hh

Modified: short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/generate.sh
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/generate.sh	2009-02-22 14:30:42 UTC (rev 14115)
+++ short/3D/PyLith/branches/pylith-swig/unittests/libtests/materials/data/generate.sh	2009-02-22 22:59:10 UTC (rev 14116)
@@ -25,39 +25,39 @@
     --data.object=ElasticIsotropic3DData \
     --data.parent=ElasticMaterialData
 
-  python GenMaxwellIsotropic3DElastic.py \
-    --data.namespace=pylith,materials \
-    --data.object=GenMaxwellIsotropic3DElasticData \
-    --data.parent=ElasticMaterialData
+#  python GenMaxwellIsotropic3DElastic.py \
+#    --data.namespace=pylith,materials \
+#    --data.object=GenMaxwellIsotropic3DElasticData \
+#    --data.parent=ElasticMaterialData
 
-  python MaxwellIsotropic3DElastic.py \
-    --data.namespace=pylith,materials \
-    --data.object=MaxwellIsotropic3DElasticData \
-    --data.parent=ElasticMaterialData
+#  python MaxwellIsotropic3DElastic.py \
+#    --data.namespace=pylith,materials \
+#    --data.object=MaxwellIsotropic3DElasticData \
+#    --data.parent=ElasticMaterialData
 
   # 2-D ----------------------------------------------------------------
 
-  python ElasticPlaneStrain.py \
-    --data.namespace=pylith,materials \
-    --data.object=ElasticPlaneStrainData \
-    --data.parent=ElasticMaterialData
+#  python ElasticPlaneStrain.py \
+#    --data.namespace=pylith,materials \
+#    --data.object=ElasticPlaneStrainData \
+#    --data.parent=ElasticMaterialData
 
-  python ElasticPlaneStress.py \
-    --data.namespace=pylith,materials \
-    --data.object=ElasticPlaneStressData \
-    --data.parent=ElasticMaterialData
+#  python ElasticPlaneStress.py \
+#    --data.namespace=pylith,materials \
+#    --data.object=ElasticPlaneStressData \
+#    --data.parent=ElasticMaterialData
 
   # 1-D ----------------------------------------------------------------
 
-  python ElasticStrain1D.py \
-    --data.namespace=pylith,materials \
-    --data.object=ElasticStrain1DData \
-    --data.parent=ElasticMaterialData
+#  python ElasticStrain1D.py \
+#    --data.namespace=pylith,materials \
+#    --data.object=ElasticStrain1DData \
+#    --data.parent=ElasticMaterialData
 
-  python ElasticStress1D.py \
-    --data.namespace=pylith,materials \
-    --data.object=ElasticStress1DData \
-    --data.parent=ElasticMaterialData
+#  python ElasticStress1D.py \
+#    --data.namespace=pylith,materials \
+#    --data.object=ElasticStress1DData \
+#    --data.parent=ElasticMaterialData
 
 fi
 



More information about the CIG-COMMITS mailing list