[cig-commits] r15695 - in short/3D/PyLith/trunk/unittests/libtests/materials: . data

willic3 at geodynamics.org willic3 at geodynamics.org
Sun Sep 27 19:23:23 PDT 2009


Author: willic3
Date: 2009-09-27 19:23:22 -0700 (Sun, 27 Sep 2009)
New Revision: 15695

Added:
   short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElastic.py
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDep.py
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh
Modified:
   short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDep.py
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh
Log:
Created unit tests for MaxwellPlaneStrain and improved the unit tests for
MaxwellIsotropic3D.  The previous tests assumed that the strains were
identical for times t and t+dt, which did not provide a thorough test.



Modified: short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am	2009-09-27 18:02:04 UTC (rev 15694)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am	2009-09-28 02:23:22 UTC (rev 15695)
@@ -30,6 +30,7 @@
 	TestElasticPlaneStress.cc \
 	TestElasticIsotropic3D.cc \
 	TestMaxwellIsotropic3D.cc \
+	TestMaxwellPlaneStrain.cc \
 	TestGenMaxwellIsotropic3D.cc \
 	TestPowerLaw3D.cc \
 	TestEffectiveStress.cc \
@@ -47,6 +48,7 @@
 	TestElasticIsotropic3D.hh \
 	TestGenMaxwellIsotropic3D.hh \
 	TestMaxwellIsotropic3D.hh \
+	TestMaxwellPlaneStrain.hh \
 	TestPowerLaw3D.hh \
 	TestEffectiveStress.hh
 
@@ -61,6 +63,8 @@
 	data/ElasticIsotropic3DData.cc \
 	data/MaxwellIsotropic3DElasticData.cc \
 	data/MaxwellIsotropic3DTimeDepData.cc \
+	data/MaxwellPlaneStrainElasticData.cc \
+	data/MaxwellPlaneStrainTimeDepData.cc \
 	data/GenMaxwellIsotropic3DElasticData.cc \
 	data/GenMaxwellIsotropic3DTimeDepData.cc \
 	data/PowerLaw3DElasticData.cc \
@@ -79,6 +83,8 @@
 	data/GenMaxwellIsotropic3DTimeDepData.hh \
 	data/MaxwellIsotropic3DElasticData.hh \
 	data/MaxwellIsotropic3DTimeDepData.hh \
+	data/MaxwellPlaneStrainElasticData.hh \
+	data/MaxwellPlaneStrainTimeDepData.hh \
 	data/PowerLaw3DElasticData.hh \
 	data/PowerLaw3DTimeDepData.hh \
 	data/header.hh

Added: short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.cc	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,216 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestMaxwellPlaneStrain.hh" // Implementation of class methods
+
+#include "data/MaxwellPlaneStrainElasticData.hh" // USES MaxwellPlaneStrainElasticData
+#include "data/MaxwellPlaneStrainTimeDepData.hh" // USES MaxwellPlaneStrainTimeDepData
+
+#include "pylith/materials/MaxwellPlaneStrain.hh" // USES MaxwellPlaneStrain
+
+#include <cstring> // USES memcpy()
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestMaxwellPlaneStrain );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::materials::TestMaxwellPlaneStrain::setUp(void)
+{ // setUp
+  _material = new MaxwellPlaneStrain();
+  _matElastic = new MaxwellPlaneStrain();
+  _data = new MaxwellPlaneStrainElasticData();
+  _dataElastic = new MaxwellPlaneStrainElasticData();
+  setupNormalizer();
+} // setUp
+
+// ----------------------------------------------------------------------
+// Test timeStep()
+void
+pylith::materials::TestMaxwellPlaneStrain::testTimeStep(void)
+{ // testTimeStep
+  MaxwellPlaneStrain material;
+
+  CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
+
+  const double dt1 = 1.0;
+  material.timeStep(dt1);
+  CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
+  CPPUNIT_ASSERT_EQUAL(false, material.needNewJacobian());
+
+  const double dt2 = 2.0;
+  material.timeStep(dt2);
+  CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
+  CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
+} // testTimeStep
+
+// ----------------------------------------------------------------------
+// Test useElasticBehavior()
+void
+pylith::materials::TestMaxwellPlaneStrain::testUseElasticBehavior(void)
+{ // testUseElasticBehavior
+  MaxwellPlaneStrain material;
+
+  material.useElasticBehavior(true);
+  
+  // Some compilers/operating systems (cygwin) don't allow comparing
+  // pointers. Use first test to determine if we can compare pointers.
+  if (&pylith::materials::MaxwellPlaneStrain::_calcStressElastic == 
+      material._calcStressFn) {
+    CPPUNIT_ASSERT(&pylith::materials::MaxwellPlaneStrain::_calcStressElastic ==
+		   material._calcStressFn);
+    CPPUNIT_ASSERT(&pylith::materials::MaxwellPlaneStrain::_calcElasticConstsElastic ==
+		   material._calcElasticConstsFn);
+    CPPUNIT_ASSERT(&pylith::materials::MaxwellPlaneStrain::_updateStateVarsElastic ==
+		   material._updateStateVarsFn);
+
+    material.useElasticBehavior(false);
+    CPPUNIT_ASSERT(&pylith::materials::MaxwellPlaneStrain::_calcStressViscoelastic ==
+		   material._calcStressFn);
+    CPPUNIT_ASSERT(&pylith::materials::MaxwellPlaneStrain::_calcElasticConstsViscoelastic ==
+		   material._calcElasticConstsFn);
+    CPPUNIT_ASSERT(&pylith::materials::MaxwellPlaneStrain::_updateStateVarsViscoelastic ==
+		   material._updateStateVarsFn);
+  } // if
+} // testUseElasticBehavior
+
+// ----------------------------------------------------------------------
+// Test usesHasStateVars()
+void
+pylith::materials::TestMaxwellPlaneStrain::testHasStateVars(void)
+{ // testHasStateVars
+  MaxwellPlaneStrain material;
+  CPPUNIT_ASSERT_EQUAL(true, material.hasStateVars());
+} // testHasStateVars
+
+// ----------------------------------------------------------------------
+// Test _calcStressElastic()
+void
+pylith::materials::TestMaxwellPlaneStrain::test_calcStressElastic(void)
+{ // test_calcStressElastic
+  CPPUNIT_ASSERT(0 != _matElastic);
+  _matElastic->useElasticBehavior(true);
+
+  test_calcStress();
+} // test_calcStressElastic
+
+// ----------------------------------------------------------------------
+// Test calcElasticConstsElastic()
+void
+pylith::materials::TestMaxwellPlaneStrain::test_calcElasticConstsElastic(void)
+{ // test_calcElasticConstsElastic
+  CPPUNIT_ASSERT(0 != _matElastic);
+  _matElastic->useElasticBehavior(true);
+
+  test_calcElasticConsts();
+} // test_calcElasticConstsElastic
+
+// ----------------------------------------------------------------------
+// Test _updateStateVarsElastic()
+void
+pylith::materials::TestMaxwellPlaneStrain::test_updateStateVarsElastic(void)
+{ // test_updateStateVarsElastic
+  CPPUNIT_ASSERT(0 != _matElastic);
+  _matElastic->useElasticBehavior(true);
+
+  test_updateStateVars();
+} // test_updateStateVarsElastic
+
+// ----------------------------------------------------------------------
+// Test _calcStressTimeDep()
+void
+pylith::materials::TestMaxwellPlaneStrain::test_calcStressTimeDep(void)
+{ // test_calcStressTimeDep
+  CPPUNIT_ASSERT(0 != _matElastic);
+  _matElastic->useElasticBehavior(false);
+
+  delete _dataElastic; _dataElastic = new MaxwellPlaneStrainTimeDepData();
+
+  double dt = 2.0e+5;
+  _matElastic->timeStep(dt);
+  test_calcStress();
+} // test_calcStressTimeDep
+
+// ----------------------------------------------------------------------
+// Test _calcElasticConstsTimeDep()
+void
+pylith::materials::TestMaxwellPlaneStrain::test_calcElasticConstsTimeDep(void)
+{ // test_calcElasticConstsTimeDep
+  CPPUNIT_ASSERT(0 != _matElastic);
+  _matElastic->useElasticBehavior(false);
+
+  delete _dataElastic; _dataElastic = new MaxwellPlaneStrainTimeDepData();
+
+  double dt = 2.0e+5;
+  _matElastic->timeStep(dt);
+  test_calcElasticConsts();
+} // test_calcElasticConstsTimeDep
+
+// ----------------------------------------------------------------------
+// Test _updateStateVarsTimeDep()
+void
+pylith::materials::TestMaxwellPlaneStrain::test_updateStateVarsTimeDep(void)
+{ // test_updateStateVarsTimeDep
+  CPPUNIT_ASSERT(0 != _matElastic);
+   _matElastic->useElasticBehavior(false);
+
+  delete _dataElastic; _dataElastic = new MaxwellPlaneStrainTimeDepData();
+
+  double dt = 2.0e+5;
+  _matElastic->timeStep(dt);
+  test_updateStateVars();
+
+} // test_updateStateVarsTimeDep
+
+// ----------------------------------------------------------------------
+// Test _stableTimeStepImplicit()
+void
+pylith::materials::TestMaxwellPlaneStrain::test_stableTimeStepImplicit(void)
+{ // test_stableTimeStepImplicit
+  CPPUNIT_ASSERT(0 != _matElastic);
+
+  delete _dataElastic; _dataElastic = new MaxwellPlaneStrainTimeDepData();
+
+  TestElasticMaterial::test_stableTimeStepImplicit();
+} // test_stableTimeStepImplicit
+
+// ----------------------------------------------------------------------
+// Test hasProperty().
+void
+pylith::materials::TestMaxwellPlaneStrain::testHasProperty(void)
+{ // testHasProperty
+  MaxwellPlaneStrain material;
+
+  CPPUNIT_ASSERT(material.hasProperty("mu"));
+  CPPUNIT_ASSERT(material.hasProperty("lambda"));
+  CPPUNIT_ASSERT(material.hasProperty("density"));
+  CPPUNIT_ASSERT(material.hasProperty("maxwell_time"));
+  CPPUNIT_ASSERT(!material.hasProperty("aaa"));
+} // testHasProperty
+
+// ----------------------------------------------------------------------
+// Test hasStateVar().
+void
+pylith::materials::TestMaxwellPlaneStrain::testHasStateVar(void)
+{ // testHasStateVar
+  MaxwellPlaneStrain material;
+
+  CPPUNIT_ASSERT(material.hasStateVar("total_strain"));
+  CPPUNIT_ASSERT(material.hasStateVar("viscous_strain"));
+  CPPUNIT_ASSERT(!material.hasStateVar("stress"));
+} // testHasStateVar
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestMaxwellPlaneStrain.hh	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,117 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/materials/TestMaxwellPlaneStrain.hh
+ *
+ * @brief C++ TestMaxwellPlaneStrain object
+ *
+ * C++ unit testing for MaxwellPlaneStrain.
+ */
+
+#if !defined(pylith_materials_testmaxwellplanestrain_hh)
+#define pylith_materials_testmaxwellplanestrain_hh
+
+#include "TestElasticMaterial.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace materials {
+    class TestMaxwellPlaneStrain;
+    class MaxwellPlaneStrainElasticData;
+    class MaxwellPlaneStrainTimeDepData;
+  } // materials
+} // pylith
+
+/// C++ unit testing for MaxwellPlaneStrain
+class pylith::materials::TestMaxwellPlaneStrain : public TestElasticMaterial
+{ // class TestMaxwellPlaneStrain
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestMaxwellPlaneStrain );
+
+  CPPUNIT_TEST( testDimension );
+  CPPUNIT_TEST( testTensorSize );
+  CPPUNIT_TEST( testDBToProperties );
+  CPPUNIT_TEST( testNonDimProperties );
+  CPPUNIT_TEST( testDimProperties );
+  CPPUNIT_TEST( testDBToStateVars );
+  CPPUNIT_TEST( testNonDimStateVars );
+  CPPUNIT_TEST( testDimStateVars );
+  CPPUNIT_TEST( test_calcDensity );
+  CPPUNIT_TEST( test_stableTimeStepImplicit );
+
+  // Need to test Maxwell viscoelastic specific behavior.
+  CPPUNIT_TEST( testTimeStep );
+  CPPUNIT_TEST( testUseElasticBehavior );
+  CPPUNIT_TEST( testHasStateVars );
+
+  CPPUNIT_TEST( test_calcStressElastic );
+  CPPUNIT_TEST( test_calcStressTimeDep );
+  CPPUNIT_TEST( test_calcElasticConstsElastic );
+  CPPUNIT_TEST( test_calcElasticConstsTimeDep );
+  CPPUNIT_TEST( test_updateStateVarsElastic );
+  CPPUNIT_TEST( test_updateStateVarsTimeDep );
+
+  CPPUNIT_TEST( testHasProperty );
+  CPPUNIT_TEST( testHasStateVar );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Test timeStep()
+  void testTimeStep(void);
+
+  /// Test useElasticBehavior()
+  void testUseElasticBehavior(void);
+
+  /// Test hasStateVars()
+  void testHasStateVars(void);
+
+  /// Test _calcStressElastic()
+  void test_calcStressElastic(void);
+
+  /// Test _calcElasticConstsElastic()
+  void test_calcElasticConstsElastic(void);
+
+  /// Test _updateStateVarsElastic()
+  void test_updateStateVarsElastic(void);
+
+  /// Test _calcStressTimeDep()
+  void test_calcStressTimeDep(void);
+
+  /// Test _calcElasticConstsTimeDep()
+  void test_calcElasticConstsTimeDep(void);
+
+  /// Test _updateStatevarsTimeDep()
+  void test_updateStateVarsTimeDep(void);
+
+  /// Test _stableTimeStepImplicit()
+  void test_stableTimeStepImplicit(void);
+
+  /// Test hasProperty().
+  void testHasProperty(void);
+
+  /// Test hasStateVar().
+  void testHasStateVar(void);
+
+}; // class TestMaxwellPlaneStrain
+
+#endif // pylith_materials_testmaxwellplanestrain_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDep.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDep.py	2009-09-27 18:02:04 UTC (rev 15694)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDep.py	2009-09-28 02:23:22 UTC (rev 15695)
@@ -85,7 +85,6 @@
     vsB = 1200.0
     vpB = vsB*3**0.5
     viscosityB = 1.0e19
-    strainB = [1.2e-4, 2.3e-4, 3.4e-4, 4.5e-4, 5.6e-4, 6.7e-4]
     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-5, 6.2e-5, 6.3e-5, 6.6e-5, 6.5e-5, 6.4e-5]
@@ -94,10 +93,6 @@
     maxwellTimeB = viscosityB / muB
     meanStrainB = (strainB[0] + strainB[1] + strainB[2])/3.0
 
-    # TEMPORARY, need to determine how to use initial strain
-    # initialStrainA = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
-    # initialStrainB = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
-    
     diag = numpy.array([1.0, 1.0, 1.0, 0.0, 0.0, 0.0],
                        dtype=numpy.float64)
 
@@ -142,16 +137,29 @@
     # after the elastic solution.  In that case, both the total strain
     # from the last step (total_strain) and the total viscous strain
     # (viscous_strain) are defined by the assigned elastic strain.
-    totalStrainA = strainA
-    totalStrainB = strainB
+    # Revised approach.  For a better test, I am setting the total strain
+    # for the current time step to be equal to the strain from the previous
+    # time step plus a constant amount.
+    totalStrainA = [strainA[0] + 1.0e-5,
+                    strainA[1] + 1.0e-5,
+                    strainA[2] + 1.0e-5,
+                    strainA[3] + 1.0e-5,
+                    strainA[4] + 1.0e-5,
+                    strainA[5] + 1.0e-5]
+    totalStrainB = [strainB[0] + 1.0e-5,
+                    strainB[1] + 1.0e-5,
+                    strainB[2] + 1.0e-5,
+                    strainB[3] + 1.0e-5,
+                    strainB[4] + 1.0e-5,
+                    strainB[5] + 1.0e-5]
     viscousStrainA = numpy.array(strainA) - diag * meanStrainA
     viscousStrainB = numpy.array(strainB) - diag * meanStrainB
-    self.stateVars = numpy.array([ [totalStrainA, viscousStrainA],
-                                   [totalStrainB, viscousStrainB] ],
+    self.stateVars = numpy.array([ [strainA, viscousStrainA],
+                                   [strainB, viscousStrainB] ],
                                  dtype=numpy.float64)
     self.stateVarsNondim = self.stateVars # no scaling
     
-    self.strain = numpy.array([strainA, strainB],
+    self.strain = numpy.array([totalStrainA, totalStrainB],
                                dtype=numpy.float64)
     self.stress = numpy.zeros( (numLocs, tensorSize), dtype=numpy.float64)
     self.stateVarsUpdated = numpy.zeros( (numLocs, tensorSize + tensorSize),
@@ -275,8 +283,8 @@
     import scipy.misc
 
     # Define some numpy arrays
-    strainTpdt = numpy.array(strainV, dtype=numpy.float64)
-    strainT = numpy.array(totalStrainV, dtype=numpy.float64)
+    strainTpdt = numpy.array(totalStrainV, dtype=numpy.float64)
+    strainT = numpy.array(strainV, dtype=numpy.float64)
     viscousStrainT = numpy.array(viscousStrainV, dtype=numpy.float64)
     initialStress = numpy.array(initialStressV, dtype=numpy.float64)
     initialStrain = numpy.array(initialStrainV, dtype=numpy.float64)

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc	2009-09-27 18:02:04 UTC (rev 15694)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc	2009-09-28 02:23:22 UTC (rev 15695)
@@ -183,37 +183,37 @@
 };
 
 const double pylith::materials::MaxwellIsotropic3DTimeDepData::_strain[] = {
-  1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
   1.40000000e-04,
   1.50000000e-04,
   1.60000000e-04,
-  4.10000000e-04,
+  1.70000000e-04,
   4.20000000e-04,
   4.30000000e-04,
   4.40000000e-04,
   4.50000000e-04,
   4.60000000e-04,
+  4.70000000e-04,
 };
 
 const double pylith::materials::MaxwellIsotropic3DTimeDepData::_stress[] = {
-  9.09052045e+06,
-  9.58450000e+06,
-  1.00784795e+07,
-  4.81071369e+06,
-  5.30469324e+06,
-  5.79867279e+06,
-  5.15436332e+06,
-  5.20720000e+06,
-  5.26003668e+06,
-  2.20809402e+06,
-  2.27245071e+06,
-  2.33680739e+06,
+  1.02155205e+07,
+  1.07095000e+07,
+  1.12034795e+07,
+  5.25970271e+06,
+  5.75368226e+06,
+  6.24766181e+06,
+  5.29836332e+06,
+  5.35120000e+06,
+  5.40403668e+06,
+  2.26569236e+06,
+  2.33004905e+06,
+  2.39440573e+06,
 };
 
 const double pylith::materials::MaxwellIsotropic3DTimeDepData::_elasticConsts[] = {
-  6.74326010e+10,
+  6.74326019e+10,
   2.25336999e+10,
   2.25336999e+10,
   0.00000000e+00,
@@ -228,12 +228,12 @@
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
-  4.48989016e+10,
+  4.48989011e+10,
   0.00000000e+00,
   0.00000000e+00,
   4.48989016e+10,
   0.00000000e+00,
-  4.48989011e+10,
+  4.48989016e+10,
   8.63988977e+09,
   2.88005546e+09,
   2.88005546e+09,
@@ -288,30 +288,30 @@
 };
 
 const double pylith::materials::MaxwellIsotropic3DTimeDepData::_stateVarsUpdated[] = {
-  1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
   1.40000000e-04,
   1.50000000e-04,
   1.60000000e-04,
+  1.70000000e-04,
  -9.95510110e-06,
-  1.34916778e-20,
+  2.70137575e-20,
   9.95510110e-06,
-  1.39371415e-04,
-  1.49326516e-04,
-  1.59281618e-04,
-  4.10000000e-04,
+  1.49348949e-04,
+  1.59304050e-04,
+  1.69259151e-04,
   4.20000000e-04,
   4.30000000e-04,
   4.40000000e-04,
   4.50000000e-04,
   4.60000000e-04,
+  4.70000000e-04,
  -9.99942402e-06,
   0.00000000e+00,
   9.99942402e-06,
-  4.39974657e-04,
-  4.49974081e-04,
-  4.59973505e-04,
+  4.49974369e-04,
+  4.59973793e-04,
+  4.69973217e-04,
 };
 
 pylith::materials::MaxwellIsotropic3DTimeDepData::MaxwellIsotropic3DTimeDepData(void)

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElastic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElastic.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElastic.py	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,185 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/materials/data/MaxwellPlaneStrainElastic.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ MaxwellPlaneStrain object with elastic behavior.
+
+from ElasticMaterialApp import ElasticMaterialApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+dimension = 2
+numElasticConsts = 6
+tensorSize = 3
+
+# MaxwellPlaneStrainElastic class
+class MaxwellPlaneStrainElastic(ElasticMaterialApp):
+  """
+  Python application for generating C++ data files for testing C++
+  MaxwellPlaneStrain object with elastic behavior.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="maxwellplanestrainelastic"):
+    """
+    Constructor.
+    """
+    ElasticMaterialApp.__init__(self, name)
+
+    # import pdb
+    # pdb.set_trace()
+
+    numLocs = 2
+
+    self.dimension = dimension
+    self.numLocs = numLocs
+
+    self.dbPropertyValues = ["density", "vs", "vp", "viscosity"]
+    self.numPropertyValues = numpy.array([1, 1, 1, 1], dtype=numpy.int32)
+
+    self.dbStateVarValues = ["total-strain-xx",
+                             "total-strain-yy",
+                             "total-strain-xy",
+                             "viscous-strain-xx",
+                             "viscous-strain-yy",
+                             "viscous-strain-zz",
+                             "viscous-strain-xy"
+                             ]
+    self.numStateVarValues = numpy.array([3, 4], dtype=numpy.int32)
+    
+    densityA = 2500.0
+    vsA = 3000.0
+    vpA = vsA*3**0.5
+    viscosityA = 1.0e18
+    strainA = [1.1e-4, 1.2e-4, 1.4e-4]
+    initialStressA = [2.1e4, 2.2e4, 2.4e4]
+    initialStrainA = [3.1e-5, 3.2e-5, 3.4e-5]
+    muA = vsA*vsA*densityA
+    lambdaA = vpA*vpA*densityA - 2.0*muA
+    maxwellTimeA = viscosityA / muA
+    
+    densityB = 2000.0
+    vsB = 1200.0
+    vpB = vsB*3**0.5
+    viscosityB = 1.0e18
+    strainB = [4.1e-4, 4.2e-4, 4.4e-4]
+    initialStressB = [5.1e4, 5.2e4, 5.4e4]
+    initialStrainB = [6.1e-5, 6.2e-5, 6.4e-5]
+    muB = vsB*vsB*densityB
+    lambdaB = vpB*vpB*densityB - 2.0*muB
+    maxwellTimeB = viscosityB / muB
+
+    self.lengthScale = 1.0e+3
+    self.pressureScale = muA
+    self.timeScale = 1.0
+    self.densityScale = 1.0e+3
+
+    self.dbProperties = numpy.array([ [densityA, vsA, vpA, viscosityA],
+                                      [densityB, vsB, vpB, viscosityB] ], 
+                                    dtype=numpy.float64)
+    self.properties = numpy.array([ [densityA, muA, lambdaA, maxwellTimeA],
+                                    [densityB, muB, lambdaB, maxwellTimeB] ],
+                                     dtype=numpy.float64)
+
+    # TEMPORARY, need to determine how to use initial state variables
+    self.dbStateVars = numpy.zeros( (numLocs, tensorSize+4),
+                                    dtype=numpy.float64)
+    self.stateVars = numpy.zeros( (numLocs, tensorSize+4),
+                                  dtype=numpy.float64)
+
+    mu0 = self.pressureScale
+    density0 = self.densityScale
+    time0 = self.timeScale
+    self.propertiesNondim = \
+        numpy.array([ [densityA/density0, muA/mu0, lambdaA/mu0, maxwellTimeA/time0],
+                      [densityB/density0, muB/mu0, lambdaB/mu0, maxwellTimeB/time0] ],
+                    dtype=numpy.float64)
+
+    self.stateVarsNondim = self.stateVars # no scaling
+
+    self.initialStress = numpy.array([initialStressA,
+                                      initialStressB],
+                                    dtype=numpy.float64)
+    self.initialStrain = numpy.array([initialStrainA,
+                                      initialStrainB],
+                                    dtype=numpy.float64)
+    
+    self.density = numpy.array([densityA,
+                                densityB],
+                               dtype=numpy.float64)
+
+    self.strain = numpy.array([strainA,
+                               strainB],
+                               dtype=numpy.float64)
+    
+    self.stress = numpy.zeros( (numLocs, tensorSize), dtype=numpy.float64)
+    self.elasticConsts = numpy.zeros( (numLocs, numElasticConsts), \
+                                      dtype=numpy.float64)
+    self.stateVarsUpdated = numpy.zeros( (numLocs, tensorSize + 4), \
+                                         dtype=numpy.float64)
+
+    (self.elasticConsts[0,:], self.stress[0,:], self.stateVarsUpdated[0,:]) = \
+        self._calcStress(strainA, muA, lambdaA, \
+                           initialStressA, initialStrainA)
+    (self.elasticConsts[1,:], self.stress[1,:], self.stateVarsUpdated[1,:]) = \
+        self._calcStress(strainB, muB, lambdaB, \
+                           initialStressB, initialStrainB)
+    self.dtStableImplicit = 0.2*min(maxwellTimeA, maxwellTimeB)
+    return
+
+
+  def _calcStress(self, strainV, muV, lambdaV, initialStressV, initialStrainV):
+    """
+    Compute stress and derivative of elasticity matrix.
+    """
+    C1111 = lambdaV + 2.0*muV
+    C1122 = lambdaV
+    C1112 = 0.0
+    C2222 = lambdaV + 2.0*muV
+    C2212 = 0.0
+    C1212 = 2.0*muV
+    elasticConsts = numpy.array([C1111, C1122, C1112,
+                                 C2222, C2212,
+                                 C1212], dtype=numpy.float64)
+
+    strain = numpy.reshape(strainV, (tensorSize,1))
+    initialStress = numpy.reshape(initialStressV, (tensorSize,1))
+    initialStrain = numpy.reshape(initialStrainV, (tensorSize,1))
+    elastic = numpy.array([ [C1111, C1122, C1112],
+                            [C1122, C2222, C2212],
+                            [C1112, C2212, C1212] ], dtype=numpy.float64)
+    stress = numpy.dot(elastic, strain-initialStrain) + initialStress
+    meanStrain = (strain[0,0] + strain[1,0])/3.0
+    viscousStrain = numpy.array([strain[0,0] - meanStrain,
+                                 strain[1,0] - meanStrain,
+                                 -meanStrain,
+                                 strain[2,0]],
+                                dtype=numpy.float64)
+    viscousStrainVec = numpy.ravel(viscousStrain)
+    strainVec = numpy.ravel(strain)
+    
+    stateVarsUpdated = numpy.concatenate((strainVec, viscousStrainVec))
+    return (elasticConsts, numpy.ravel(stress), numpy.ravel(stateVarsUpdated))
+  
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = MaxwellPlaneStrainElastic()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,268 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application maxwellplanestrainelastic.
+
+#include "MaxwellPlaneStrainElasticData.hh"
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_dimension = 2;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numLocs = 2;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numProperties = 4;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numStateVars = 2;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numDBProperties = 4;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numDBStateVars = 7;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numPropsQuadPt = 4;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numVarsQuadPt = 7;
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_lengthScale =   1.00000000e+03;
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_timeScale =   1.00000000e+00;
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_pressureScale =   2.25000000e+10;
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_densityScale =   1.00000000e+03;
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_dtStableImplicit =   8.88888889e+06;
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numPropertyValues[] = {
+1,
+1,
+1,
+1,
+};
+
+const int pylith::materials::MaxwellPlaneStrainElasticData::_numStateVarValues[] = {
+3,
+4,
+};
+
+const char* pylith::materials::MaxwellPlaneStrainElasticData::_dbPropertyValues[] = {
+"density",
+"vs",
+"vp",
+"viscosity",
+};
+
+const char* pylith::materials::MaxwellPlaneStrainElasticData::_dbStateVarValues[] = {
+"total-strain-xx",
+"total-strain-yy",
+"total-strain-xy",
+"viscous-strain-xx",
+"viscous-strain-yy",
+"viscous-strain-zz",
+"viscous-strain-xy",
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_dbProperties[] = {
+  2.50000000e+03,
+  3.00000000e+03,
+  5.19615242e+03,
+  1.00000000e+18,
+  2.00000000e+03,
+  1.20000000e+03,
+  2.07846097e+03,
+  1.00000000e+18,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_dbStateVars[] = {
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_properties[] = {
+  2.50000000e+03,
+  2.25000000e+10,
+  2.25000000e+10,
+  4.44444444e+07,
+  2.00000000e+03,
+  2.88000000e+09,
+  2.88000000e+09,
+  3.47222222e+08,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_stateVars[] = {
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_propertiesNondim[] = {
+  2.50000000e+00,
+  1.00000000e+00,
+  1.00000000e+00,
+  4.44444444e+07,
+  2.00000000e+00,
+  1.28000000e-01,
+  1.28000000e-01,
+  3.47222222e+08,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_stateVarsNondim[] = {
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_density[] = {
+  2.50000000e+03,
+  2.00000000e+03,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_strain[] = {
+  1.10000000e-04,
+  1.20000000e-04,
+  1.40000000e-04,
+  4.10000000e-04,
+  4.20000000e-04,
+  4.40000000e-04,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_stress[] = {
+  7.33350000e+06,
+  7.73950000e+06,
+  4.79400000e+06,
+  4.09740000e+06,
+  4.15024000e+06,
+  2.21976000e+06,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_elasticConsts[] = {
+  6.75000000e+10,
+  2.25000000e+10,
+  0.00000000e+00,
+  6.75000000e+10,
+  0.00000000e+00,
+  4.50000000e+10,
+  8.64000000e+09,
+  2.88000000e+09,
+  0.00000000e+00,
+  8.64000000e+09,
+  0.00000000e+00,
+  5.76000000e+09,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_initialStress[] = {
+  2.10000000e+04,
+  2.20000000e+04,
+  2.40000000e+04,
+  5.10000000e+04,
+  5.20000000e+04,
+  5.40000000e+04,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_initialStrain[] = {
+  3.10000000e-05,
+  3.20000000e-05,
+  3.40000000e-05,
+  6.10000000e-05,
+  6.20000000e-05,
+  6.40000000e-05,
+};
+
+const double pylith::materials::MaxwellPlaneStrainElasticData::_stateVarsUpdated[] = {
+  1.10000000e-04,
+  1.20000000e-04,
+  1.40000000e-04,
+  3.33333333e-05,
+  4.33333333e-05,
+ -7.66666667e-05,
+  1.40000000e-04,
+  4.10000000e-04,
+  4.20000000e-04,
+  4.40000000e-04,
+  1.33333333e-04,
+  1.43333333e-04,
+ -2.76666667e-04,
+  4.40000000e-04,
+};
+
+pylith::materials::MaxwellPlaneStrainElasticData::MaxwellPlaneStrainElasticData(void)
+{ // constructor
+  dimension = _dimension;
+  numLocs = _numLocs;
+  numProperties = _numProperties;
+  numStateVars = _numStateVars;
+  numDBProperties = _numDBProperties;
+  numDBStateVars = _numDBStateVars;
+  numPropsQuadPt = _numPropsQuadPt;
+  numVarsQuadPt = _numVarsQuadPt;
+  lengthScale = _lengthScale;
+  timeScale = _timeScale;
+  pressureScale = _pressureScale;
+  densityScale = _densityScale;
+  dtStableImplicit = _dtStableImplicit;
+  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::MaxwellPlaneStrainElasticData::~MaxwellPlaneStrainElasticData(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,104 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application maxwellplanestrainelastic.
+
+#if !defined(pylith_materials_maxwellplanestrainelasticdata_hh)
+#define pylith_materials_maxwellplanestrainelasticdata_hh
+
+#include "ElasticMaterialData.hh"
+
+namespace pylith {
+  namespace materials {
+     class MaxwellPlaneStrainElasticData;
+  } // pylith
+} // materials
+
+class pylith::materials::MaxwellPlaneStrainElasticData : public ElasticMaterialData
+{
+
+public: 
+
+  /// Constructor
+  MaxwellPlaneStrainElasticData(void);
+
+  /// Destructor
+  ~MaxwellPlaneStrainElasticData(void);
+
+private:
+
+  static const int _dimension;
+
+  static const int _numLocs;
+
+  static const int _numProperties;
+
+  static const int _numStateVars;
+
+  static const int _numDBProperties;
+
+  static const int _numDBStateVars;
+
+  static const int _numPropsQuadPt;
+
+  static const int _numVarsQuadPt;
+
+  static const double _lengthScale;
+
+  static const double _timeScale;
+
+  static const double _pressureScale;
+
+  static const double _densityScale;
+
+  static const double _dtStableImplicit;
+
+  static const int _numPropertyValues[];
+
+  static const int _numStateVarValues[];
+
+  static const char* _dbPropertyValues[];
+
+  static const char* _dbStateVarValues[];
+
+  static const double _dbProperties[];
+
+  static const double _dbStateVars[];
+
+  static const double _properties[];
+
+  static const double _stateVars[];
+
+  static const double _propertiesNondim[];
+
+  static const double _stateVarsNondim[];
+
+  static const double _density[];
+
+  static const double _strain[];
+
+  static const double _stress[];
+
+  static const double _elasticConsts[];
+
+  static const double _initialStress[];
+
+  static const double _initialStrain[];
+
+  static const double _stateVarsUpdated[];
+
+};
+
+#endif // pylith_materials_maxwellplanestrainelasticdata_hh
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDep.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDep.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDep.py	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,370 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/materials/data/MaxwellPlaneStrainTimeDep.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ MaxwellPlaneStrain object with viscoelastic behavior.
+
+from ElasticMaterialApp import ElasticMaterialApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+dimension = 2
+numElasticConsts = 6
+tensorSize = 3
+
+# MaxwellPlaneStrainTimeDep class
+class MaxwellPlaneStrainTimeDep(ElasticMaterialApp):
+  """
+  Python application for generating C++ data files for testing C++
+  MaxwellPlaneStrain object using viscoelastic behavior.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="maxwellplanestraintimedep"):
+    """
+    Constructor.
+    """
+    ElasticMaterialApp.__init__(self, name)
+
+    # import pdb
+    # pdb.set_trace()
+
+    numLocs = 2
+
+    self.dimension = dimension
+    self.numLocs = numLocs
+
+    self.dbPropertyValues = ["density", "vs", "vp", "viscosity"]
+    self.propertyValues = ["density", "mu", "lambda", "maxwellTime"]
+    self.numPropertyValues = numpy.array([1, 1, 1, 1], dtype=numpy.int32)
+
+    self.dbStateVarValues = ["total-strain-xx",
+                             "total-strain-yy",
+                             "total-strain-xy",
+                             "viscous-strain-xx",
+                             "viscous-strain-yy",
+                             "viscous-strain-zz",
+                             "viscous-strain-xy"
+                             ]
+    self.stateVarValues = ["total-strain", "viscous-strain"]
+    self.numStateVarValues = numpy.array([3, 4], dtype=numpy.int32)
+
+    self.dt = 2.0e5
+
+    densityA = 2500.0
+    vsA = 3000.0
+    vpA = vsA*3**0.5
+    viscosityA = 1.0e18
+    strainA = [1.1e-4, 1.2e-4, 1.4e-4]
+    initialStressA = [2.1e4, 2.2e4, 2.4e4]
+    initialStrainA = [3.6e-5, 3.5e-5, 3.3e-5]
+    muA = vsA*vsA*densityA
+    lambdaA = vpA*vpA*densityA - 2.0*muA
+    maxwellTimeA = viscosityA / muA
+    meanStrainA = (strainA[0] + strainA[1])/3.0
+
+    densityB = 2000.0
+    vsB = 1200.0
+    vpB = vsB*3**0.5
+    viscosityB = 1.0e19
+    strainB = [4.1e-4, 4.2e-4, 4.4e-4]
+    initialStressB = [5.1e4, 5.2e4, 5.4e4]
+    initialStrainB = [6.1e-5, 6.2e-5, 6.6e-5]
+    muB = vsB*vsB*densityB
+    lambdaB = vpB*vpB*densityB - 2.0*muB
+    maxwellTimeB = viscosityB / muB
+    meanStrainB = (strainB[0] + strainB[1])/3.0
+
+    diag = numpy.array([1.0, 1.0, 1.0, 0.0],
+                       dtype=numpy.float64)
+
+    strainTA = [strainA[0], strainA[1], 0.0, strainA[2]]
+    strainTB = [strainB[0], strainB[1], 0.0, strainB[2]]
+
+    self.lengthScale = 1.0e+3
+    self.pressureScale = muA
+    self.timeScale = 1.0
+    self.densityScale = 1.0e+3
+
+    self.dbProperties = numpy.array([ [densityA, vsA, vpA, viscosityA],
+                                      [densityB, vsB, vpB, viscosityB] ], 
+                                    dtype=numpy.float64)
+    self.properties = numpy.array([ [densityA, muA, lambdaA, maxwellTimeA],
+                                    [densityB, muB, lambdaB, maxwellTimeB] ],
+                                     dtype=numpy.float64)
+
+    # TEMPORARY, need to determine how to use initial state variables
+    self.dbStateVars = numpy.zeros( (numLocs, tensorSize+4),
+                                    dtype=numpy.float64)
+
+    mu0 = self.pressureScale
+    density0 = self.densityScale
+    time0 = self.timeScale
+    self.propertiesNondim = \
+        numpy.array([ [densityA/density0, muA/mu0, lambdaA/mu0, \
+                       maxwellTimeA/time0],
+                      [densityB/density0, muB/mu0, lambdaB/mu0, \
+                       maxwellTimeB/time0] ],
+                    dtype=numpy.float64)
+
+    self.initialStress = numpy.array([initialStressA,
+                                      initialStressB],
+                                    dtype=numpy.float64)
+    self.initialStrain = numpy.array([initialStrainA,
+                                      initialStrainB],
+                                    dtype=numpy.float64)
+    
+    self.density = numpy.array([densityA,
+                                densityB],
+                               dtype=numpy.float64)
+
+    # Simplest approach for now is to assume this is the first step
+    # after the elastic solution.  In that case, both the total strain
+    # from the last step (total_strain) and the total viscous strain
+    # (viscous_strain) are defined by the assigned elastic strain.
+    # Revised approach.  For a better test, I am setting the total strain
+    # for the current time step to be equal to the strain from the previous
+    # time step plus a constant amount.
+    totalStrainA = [strainA[0] + 1.0e-5,
+                    strainA[1] + 1.0e-5,
+                    strainA[2] + 1.0e-5]
+    totalStrainB = [strainB[0] + 1.0e-5,
+                    strainB[1] + 1.0e-5,
+                    strainB[2] + 1.0e-5]
+    viscousStrainA = numpy.array(strainTA) - diag * meanStrainA
+    viscousStrainB = numpy.array(strainTB) - diag * meanStrainB
+    viscousStrainVecA = numpy.ravel(viscousStrainA)
+    viscousStrainVecB = numpy.ravel(viscousStrainB)
+    strainVecA = numpy.array(strainA, dtype=numpy.float64)
+    strainVecB = numpy.array(strainB, dtype=numpy.float64)
+    stateVarsA = numpy.concatenate((strainVecA, viscousStrainVecA))
+    stateVarsB = numpy.concatenate((strainVecB, viscousStrainVecB))
+    self.stateVars = numpy.array([ [stateVarsA],
+                                   [stateVarsB] ],
+                                 dtype=numpy.float64)
+    self.stateVarsNondim = self.stateVars # no scaling
+    
+    self.strain = numpy.array([totalStrainA, totalStrainB],
+                               dtype=numpy.float64)
+    self.stress = numpy.zeros( (numLocs, tensorSize), dtype=numpy.float64)
+    self.stateVarsUpdated = numpy.zeros( (numLocs, tensorSize + 4),
+                                         dtype=numpy.float64)
+    self.elasticConsts = numpy.zeros( (numLocs, numElasticConsts),
+                                      dtype=numpy.float64)
+
+    (self.elasticConsts[0,:], self.stress[0,:], self.stateVarsUpdated[0,:]) = \
+                     self._calcStress(strainA, 
+                                      muA, lambdaA, maxwellTimeA,
+                                      totalStrainA, viscousStrainA,
+                                      initialStressA, initialStrainA)
+    (self.elasticConsts[1,:], self.stress[1,:], self.stateVarsUpdated[1,:]) = \
+                              self._calcStress(strainB, 
+                                               muB, lambdaB, maxwellTimeB, 
+                                               totalStrainB, viscousStrainB,
+                                               initialStressB, initialStrainB)
+
+    self.dtStableImplicit = 0.2*min(maxwellTimeA, maxwellTimeB)
+    return
+
+
+  def _calcStressComponent(self, strainVal, strainComp, stressComp, strainTpdt,
+                         muV, lambdaV, maxwellTimeV, dqV, totalStrainT,
+                         viscousStrainT, initialStress, initialStrain):
+    """
+    Function to compute a particular stress component as a function of a
+    strain component.
+    """
+    strainTest = numpy.array(strainTpdt, dtype=numpy.float64)
+    strainTest[strainComp] = strainVal
+    stressTpdt, viscousStrainTpdt = self._computeStress(strainTest,
+                                                        muV,
+                                                        lambdaV,
+                                                        maxwellTimeV,
+                                                        dqV,
+                                                        totalStrainT,
+                                                        viscousStrainT,
+                                                        initialStress,
+                                                        initialStrain)
+    return stressTpdt[stressComp]
+
+
+  def _computeStress(self, strainTpdt, muV, lambdaV, maxwellTimeV, dqV,
+                     strainT, viscousStrainT,
+                     initialStress, initialStrain):
+    """
+    Function to compute stresses and viscous strains for a given strain.
+    """
+    import math
+    
+    bulkModulus = lambdaV + 2.0 * muV / 3.0
+    diag = [1.0, 1.0, 0.0]
+
+    # Initial stresses and strains
+    meanStrainInitial = \
+    (initialStrain[0] + initialStrain[1]) / 3.0
+    meanStressInitial = \
+    (initialStress[0] + initialStress[1]) / 3.0
+
+    devStrainInitial = initialStrain - numpy.array(diag) * meanStrainInitial
+    devStressInitial = initialStress - numpy.array(diag) * meanStressInitial
+
+    meanStrainT = (strainT[0] + strainT[1]) / 3.0
+    meanStrainTpdt = (strainTpdt[0] + strainTpdt[1]) / 3.0
+    meanStressTpdt = 3.0 * bulkModulus * \
+                     (meanStrainTpdt - meanStrainInitial) + meanStressInitial
+
+    stressTpdt = numpy.zeros( (tensorSize), dtype=numpy.float64)
+    viscousStrainTpdt = numpy.zeros( (4), dtype=numpy.float64)
+
+    expFac = math.exp(-self.dt/maxwellTimeV)
+    elasFac = 2.0 * muV
+
+    devStrainTpdt11 = strainTpdt[0] - meanStrainTpdt
+    devStrainTpdt22 = strainTpdt[1] - meanStrainTpdt
+    devStrainTpdt33 = -meanStrainTpdt
+    devStrainTpdt12 = strainTpdt[2]
+
+    devStrainT11 = strainT[0] - meanStrainT
+    devStrainT22 = strainT[1] - meanStrainT
+    devStrainT33 = -meanStrainT
+    devStrainT12 = strainT[2]
+
+    viscousStrainTpdt = [expFac * viscousStrainT[0] + \
+                        dqV * (devStrainTpdt11 - devStrainT11),
+                        expFac * viscousStrainT[1] + \
+                        dqV * (devStrainTpdt22 - devStrainT22),
+                        expFac * viscousStrainT[2] + \
+                        dqV * (devStrainTpdt33 - devStrainT33),
+                        expFac * viscousStrainT[3] + \
+                        dqV * (devStrainTpdt12 - devStrainT12)]
+
+    devStressTpdt11 = elasFac * \
+                      (viscousStrainTpdt[0] - devStrainInitial[0]) + \
+                      devStressInitial[0]
+    devStressTpdt22 = elasFac * \
+                      (viscousStrainTpdt[1] - devStrainInitial[1]) + \
+                      devStressInitial[1]
+    # This is somewhat messed up, since we can't specify initial stresses or
+    # strains in the out-of-plane direction.
+    devStressTpdt33 = elasFac * viscousStrainTpdt[2]
+    devStressTpdt12 = elasFac * \
+                      (viscousStrainTpdt[3] - devStrainInitial[2]) + \
+                      devStressInitial[2]
+
+    stressTpdt = [meanStressTpdt + devStressTpdt11,
+                  meanStressTpdt + devStressTpdt22,
+                  devStressTpdt12]
+      
+    return stressTpdt, viscousStrainTpdt
+
+                                                        
+  def _computeViscousFactor(self, maxwellTime):
+    """
+    Compute viscous strain factor for a given Maxwell time.
+    """
+    import math
+    
+    timeFrac = 1.0e-5
+    numTerms = 5
+    dq = 0.0
+    if maxwellTime < timeFrac*self.dt:
+      fSign = 1.0
+      factorial = 1.0
+      fraction = 1.0
+      dq = 1.0
+      for iTerm in range(2, numTerms + 1):
+        factorial *= iTerm
+        fSign *= -1.0
+        fraction *= self.dt/maxwellTime
+        dq += fSign*fraction/factorial
+    else:
+      dq = maxwellTime*(1.0-math.exp(-self.dt/maxwellTime))/self.dt
+
+    return dq
+
+  
+  def _calcStress(self, strainV, muV, lambdaV, maxwellTimeV, totalStrainV,
+                  viscousStrainV, initialStressV, initialStrainV):
+    """
+    Compute stress, derivative of elasticity matrix, and updated state
+    variables. This assumes behavior is always viscoelastic.
+    """
+    import scipy.misc
+
+    # Define some numpy arrays
+    strainTpdt = numpy.array(totalStrainV, dtype=numpy.float64)
+    strainT = numpy.array(strainV, dtype=numpy.float64)
+    viscousStrainT = numpy.array(viscousStrainV, dtype=numpy.float64)
+    initialStress = numpy.array(initialStressV, dtype=numpy.float64)
+    initialStrain = numpy.array(initialStrainV, dtype=numpy.float64)
+    
+    # Compute current stress and viscous strain.
+    dqV = self._computeViscousFactor(maxwellTimeV)
+    stressTpdt, viscousStrainTpdt = self._computeStress(strainTpdt,
+                                                        muV,
+                                                        lambdaV,
+                                                        maxwellTimeV,
+                                                        dqV,
+                                                        strainT,
+                                                        viscousStrainT,
+                                                        initialStress,
+                                                        initialStrain)
+                                                        
+    # Form updated state variables
+    strainTpdtVec = numpy.ravel(strainTpdt)
+    viscousStrainTpdtVec = numpy.ravel(viscousStrainTpdt)
+    stateVarsUpdated = numpy.concatenate((strainTpdtVec, viscousStrainTpdtVec))
+
+    # Compute components of tangent constitutive matrix using numerical
+    # derivatives.
+    derivDx = 1.0e-12
+    derivOrder = 3
+    elasticConstsList = []
+
+    for stressComp in range(tensorSize):
+      for strainComp in range(stressComp, tensorSize):
+        dStressDStrain = stressComp + strainComp
+        dStressDStrain = scipy.misc.derivative(self._calcStressComponent,
+                                               strainTpdt[strainComp],
+                                               dx=derivDx,
+                                               args=(strainComp,
+                                                     stressComp,
+                                                     strainTpdt,
+                                                     muV,
+                                                     lambdaV,
+                                                     maxwellTimeV,
+                                                     dqV,
+                                                     strainT,
+                                                     viscousStrainT,
+                                                     initialStress,
+                                                     initialStrain),
+                                               order=derivOrder)
+        elasticConstsList.append(dStressDStrain)
+
+    elasticConsts = numpy.array(elasticConstsList, dtype=numpy.float64)
+
+    return (elasticConsts, numpy.ravel(stressTpdt),
+            numpy.ravel(stateVarsUpdated))
+  
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = MaxwellPlaneStrainTimeDep()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,268 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application maxwellplanestraintimedep.
+
+#include "MaxwellPlaneStrainTimeDepData.hh"
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_dimension = 2;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numLocs = 2;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numProperties = 4;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numStateVars = 2;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numDBProperties = 4;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numDBStateVars = 7;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numPropsQuadPt = 4;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numVarsQuadPt = 7;
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_lengthScale =   1.00000000e+03;
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_timeScale =   1.00000000e+00;
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_pressureScale =   2.25000000e+10;
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_densityScale =   1.00000000e+03;
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_dtStableImplicit =   8.88888889e+06;
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numPropertyValues[] = {
+1,
+1,
+1,
+1,
+};
+
+const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numStateVarValues[] = {
+3,
+4,
+};
+
+const char* pylith::materials::MaxwellPlaneStrainTimeDepData::_dbPropertyValues[] = {
+"density",
+"vs",
+"vp",
+"viscosity",
+};
+
+const char* pylith::materials::MaxwellPlaneStrainTimeDepData::_dbStateVarValues[] = {
+"total-strain-xx",
+"total-strain-yy",
+"total-strain-xy",
+"viscous-strain-xx",
+"viscous-strain-yy",
+"viscous-strain-zz",
+"viscous-strain-xy",
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_dbProperties[] = {
+  2.50000000e+03,
+  3.00000000e+03,
+  5.19615242e+03,
+  1.00000000e+18,
+  2.00000000e+03,
+  1.20000000e+03,
+  2.07846097e+03,
+  1.00000000e+19,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_dbStateVars[] = {
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_properties[] = {
+  2.50000000e+03,
+  2.25000000e+10,
+  2.25000000e+10,
+  4.44444444e+07,
+  2.00000000e+03,
+  2.88000000e+09,
+  2.88000000e+09,
+  3.47222222e+09,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVars[] = {
+  1.10000000e-04,
+  1.20000000e-04,
+  1.40000000e-04,
+  3.33333333e-05,
+  4.33333333e-05,
+ -7.66666667e-05,
+  1.40000000e-04,
+  4.10000000e-04,
+  4.20000000e-04,
+  4.40000000e-04,
+  1.33333333e-04,
+  1.43333333e-04,
+ -2.76666667e-04,
+  4.40000000e-04,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_propertiesNondim[] = {
+  2.50000000e+00,
+  1.00000000e+00,
+  1.00000000e+00,
+  4.44444444e+07,
+  2.00000000e+00,
+  1.28000000e-01,
+  1.28000000e-01,
+  3.47222222e+09,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVarsNondim[] = {
+  1.10000000e-04,
+  1.20000000e-04,
+  1.40000000e-04,
+  3.33333333e-05,
+  4.33333333e-05,
+ -7.66666667e-05,
+  1.40000000e-04,
+  4.10000000e-04,
+  4.20000000e-04,
+  4.40000000e-04,
+  1.33333333e-04,
+  1.43333333e-04,
+ -2.76666667e-04,
+  4.40000000e-04,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_density[] = {
+  2.50000000e+03,
+  2.00000000e+03,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_strain[] = {
+  1.20000000e-04,
+  1.30000000e-04,
+  1.50000000e-04,
+  4.20000000e-04,
+  4.30000000e-04,
+  4.50000000e-04,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stress[] = {
+  7.82142817e+06,
+  8.31540772e+06,
+  5.25970271e+06,
+  4.21255521e+06,
+  4.26539189e+06,
+  2.26569236e+06,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_elasticConsts[] = {
+  6.74326010e+10,
+  2.25336989e+10,
+  0.00000000e+00,
+  6.74326005e+10,
+  0.00000000e+00,
+  4.48989011e+10,
+  8.63988977e+09,
+  2.88005546e+09,
+  0.00000000e+00,
+  8.63988977e+09,
+  0.00000000e+00,
+  5.75983408e+09,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_initialStress[] = {
+  2.10000000e+04,
+  2.20000000e+04,
+  2.40000000e+04,
+  5.10000000e+04,
+  5.20000000e+04,
+  5.40000000e+04,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_initialStrain[] = {
+  3.60000000e-05,
+  3.50000000e-05,
+  3.30000000e-05,
+  6.10000000e-05,
+  6.20000000e-05,
+  6.60000000e-05,
+};
+
+const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVarsUpdated[] = {
+  1.20000000e-04,
+  1.30000000e-04,
+  1.50000000e-04,
+  3.65095149e-05,
+  4.64646160e-05,
+ -8.29741309e-05,
+  1.49348949e-04,
+  4.20000000e-04,
+  4.30000000e-04,
+  4.50000000e-04,
+  1.36658891e-04,
+  1.46658315e-04,
+ -2.83317206e-04,
+  4.49974369e-04,
+};
+
+pylith::materials::MaxwellPlaneStrainTimeDepData::MaxwellPlaneStrainTimeDepData(void)
+{ // constructor
+  dimension = _dimension;
+  numLocs = _numLocs;
+  numProperties = _numProperties;
+  numStateVars = _numStateVars;
+  numDBProperties = _numDBProperties;
+  numDBStateVars = _numDBStateVars;
+  numPropsQuadPt = _numPropsQuadPt;
+  numVarsQuadPt = _numVarsQuadPt;
+  lengthScale = _lengthScale;
+  timeScale = _timeScale;
+  pressureScale = _pressureScale;
+  densityScale = _densityScale;
+  dtStableImplicit = _dtStableImplicit;
+  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::MaxwellPlaneStrainTimeDepData::~MaxwellPlaneStrainTimeDepData(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh	2009-09-28 02:23:22 UTC (rev 15695)
@@ -0,0 +1,104 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application maxwellplanestraintimedep.
+
+#if !defined(pylith_materials_maxwellplanestraintimedepdata_hh)
+#define pylith_materials_maxwellplanestraintimedepdata_hh
+
+#include "ElasticMaterialData.hh"
+
+namespace pylith {
+  namespace materials {
+     class MaxwellPlaneStrainTimeDepData;
+  } // pylith
+} // materials
+
+class pylith::materials::MaxwellPlaneStrainTimeDepData : public ElasticMaterialData
+{
+
+public: 
+
+  /// Constructor
+  MaxwellPlaneStrainTimeDepData(void);
+
+  /// Destructor
+  ~MaxwellPlaneStrainTimeDepData(void);
+
+private:
+
+  static const int _dimension;
+
+  static const int _numLocs;
+
+  static const int _numProperties;
+
+  static const int _numStateVars;
+
+  static const int _numDBProperties;
+
+  static const int _numDBStateVars;
+
+  static const int _numPropsQuadPt;
+
+  static const int _numVarsQuadPt;
+
+  static const double _lengthScale;
+
+  static const double _timeScale;
+
+  static const double _pressureScale;
+
+  static const double _densityScale;
+
+  static const double _dtStableImplicit;
+
+  static const int _numPropertyValues[];
+
+  static const int _numStateVarValues[];
+
+  static const char* _dbPropertyValues[];
+
+  static const char* _dbStateVarValues[];
+
+  static const double _dbProperties[];
+
+  static const double _dbStateVars[];
+
+  static const double _properties[];
+
+  static const double _stateVars[];
+
+  static const double _propertiesNondim[];
+
+  static const double _stateVarsNondim[];
+
+  static const double _density[];
+
+  static const double _strain[];
+
+  static const double _stress[];
+
+  static const double _elasticConsts[];
+
+  static const double _initialStress[];
+
+  static const double _initialStrain[];
+
+  static const double _stateVarsUpdated[];
+
+};
+
+#endif // pylith_materials_maxwellplanestraintimedepdata_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh	2009-09-27 18:02:04 UTC (rev 15694)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh	2009-09-28 02:23:22 UTC (rev 15695)
@@ -52,6 +52,11 @@
     --data.object=ElasticPlaneStressData \
     --data.parent=ElasticMaterialData
 
+  python MaxwellPlaneStrainElastic.py \
+    --data.namespace=pylith,materials \
+    --data.object=MaxwellPlaneStrainElasticData \
+    --data.parent=ElasticMaterialData
+
   # 1-D ----------------------------------------------------------------
 
   python ElasticStrain1D.py \
@@ -79,6 +84,11 @@
     --data.object=MaxwellIsotropic3DTimeDepData \
     --data.parent=ElasticMaterialData
 
+  python MaxwellPlaneStrainTimeDep.py \
+    --data.namespace=pylith,materials \
+    --data.object=MaxwellPlaneStrainTimeDepData \
+    --data.parent=ElasticMaterialData
+
   python PowerLaw3DTimeDep.py \
     --data.namespace=pylith,materials \
     --data.object=PowerLaw3DTimeDepData \



More information about the CIG-COMMITS mailing list