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

brad at geodynamics.org brad at geodynamics.org
Fri Apr 30 17:46:22 PDT 2010


Author: brad
Date: 2010-04-30 17:46:21 -0700 (Fri, 30 Apr 2010)
New Revision: 16605

Added:
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityApp.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitApp.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityLgDeformApp.py
Removed:
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py
Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicit.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
Log:
Added unit tests for ElasticityExplicit::integrateResidualLumped().

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/TODO	2010-05-01 00:46:21 UTC (rev 16605)
@@ -38,9 +38,37 @@
   + governing equations
   + Large deformation formulation
   + Lumped solver
+  + Cleanup bulk constitutive models (consistent w/governing eqns)
 
+* Cleanup PETSc setttings in examples
+    ksp_view, monitor, converged reason
+
+* Tutorials
+  3d/hex8
+    1. Dirichlet BC (static)
+    2. Neumann BC (static)
+    3. Earthquake rupture (static)
+    4. Dirichlet BC (quasi-static)
+    5. Dirichlet + Neumann (quasi-static)
+    6. Multiple earthquake rupture + creep (quasi-static)
+    7. Earthquake rupture + creep + Dirichlet BC (quasi-static)
+    8. Add power-law rheology (quasi-static)
+    9. Replace power-law with Drucker-Prager elastoplastic
+   10. Static friction + Dirichlet BC (static)
+   11. Static friction + Dirchlet BC (quasi-static)
+   12. Rate- and state-friction + Dirichlet BC (quasi-static)??
+
+Write up description of Savage and Prescott (1978) benchmark and
+distribute to Greg Lyzenga and Jay Parker
+
+Need full-scale test with variation in physical properties within a material.
+
+----------------------------------------------------------------------
 SECONDARY PRIORITIES
+----------------------------------------------------------------------
 
+* Output to HDF5 files
+
 * Uniform global refinement for tets with faults
 
 * Cleanup
@@ -59,18 +87,20 @@
 FRICTION
 ----------------------------------------------------------------------
 
+TPV205-2D
+  quad4, tri3
 TPV205
+  hex8, tet4
+
 TPV?? (rate and state)
+TPV?? Drucker-Prager
 
-
 ----------------------------------------------------------------------
 LUMPED SOLVER
 ----------------------------------------------------------------------
 
 Unit tests
 
-  ElasticityExplicit
-    integrateResidualLumped()
   ElasticityExplicitTet4
     integrateResidualLumped()
   ElasticityExplicitLgDeform
@@ -81,38 +111,6 @@
     adjustSolnLumped()
 
 ----------------------------------------------------------------------
-TODO BEFORE WORKSHOP 2010
-----------------------------------------------------------------------
-
-Examples
-  Cleanup PETSc setttings
-    ksp_view, monitor, converged reason
-
-Tutorial
-  3d/hex8
-    1. Dirichlet BC (static)
-    2. Neumann BC (static)
-    3. Earthquake rupture (static)
-    4. Dirichlet BC (quasi-static)
-    5. Dirichlet + Neumann (quasi-static)
-    6. Multiple earthquake rupture + creep (quasi-static)
-    7. Earthquake rupture + creep + Dirichlet BC (quasi-static)
-    8. Add power-law rheology (quasi-static)
-    9. Replace power-law with Drucker-Prager elastoplastic
-   10. Static friction + Dirichlet BC (static)
-   11. Static friction + Dirchlet BC (quasi-static)
-   12. Rate- and state-friction + Dirichlet BC (quasi-static)??
-
-Write up description of Savage and Prescott (1978) benchmark and
-distribute to Greg Lyzenga and Jay Parker
-
-Rewrite governing equations to include fault implementation
-
-Rewrite bulk constitutive models
-
-Need full-scale test with variation in physical properties within a material.
-
-----------------------------------------------------------------------
 CLEANUP
 ----------------------------------------------------------------------
 
@@ -329,15 +327,6 @@
 MISC PRIORITIES (Brad)
 ======================================================================
 
-2. Additional unit tests
-  a. FaultCohesive
-    i. Add checking of faultMesh [not currently used]
-
-3. Allow use of all elasticity constants (9 for 2-D, 36 for 3-D).
-   a. Materials C++ code
-   b. Integrator C++ code
-   b. Material C++ unit tests
-
 4. OutputManager
    a. VertexFilterChangeCS
       OutputFilter for writing vertex coordinates in another 
@@ -349,26 +338,6 @@
 ======================================================================
 
 ----------------------------------------------------------------------
-Release 1.5
-----------------------------------------------------------------------
-
-  1. Fault constitutive models
-
-     Static friction
-     Linear slip-weakening
-     Rate- and state-friction w/ageing law
-
-       Spontaneous (dynamic) fault rupture output
-         Slip and tractions (time histories)
-         State variables (time histories)
-         Orientation (diagnostic)
-         Properties (diagnostic)
-
-  2. Large deformations
-
-  3. Finite strain
-
-----------------------------------------------------------------------
 Release 1.6
 ----------------------------------------------------------------------
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2010-05-01 00:46:21 UTC (rev 16605)
@@ -201,6 +201,7 @@
 	data/GeomDataTet3D.cc \
 	data/GeomDataHex3D.cc \
 	data/IntegratorData.cc \
+	data/ElasticityExplicitData.cc \
 	data/ElasticityExplicitData1DLinear.cc \
 	data/ElasticityExplicitData1DQuadratic.cc \
 	data/ElasticityExplicitData2DLinear.cc \
@@ -281,6 +282,7 @@
 	data/GeomDataTet3D.hh \
 	data/GeomDataHex3D.hh \
 	data/IntegratorData.hh \
+	data/ElasticityExplicitData.hh \
 	data/ElasticityExplicitData1DLinear.hh \
 	data/ElasticityExplicitData1DQuadratic.hh \
 	data/ElasticityExplicitData2DLinear.hh \

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -15,7 +15,7 @@
 #include "TestElasticityExplicit.hh" // Implementation of class methods
 
 #include "pylith/feassemble/ElasticityExplicit.hh" // USES ElasticityExplicit
-#include "data/IntegratorData.hh" // USES IntegratorData
+#include "data/ElasticityExplicitData.hh" // USES IntegratorData
 
 #include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
@@ -198,6 +198,46 @@
 } // testIntegrateResidual
 
 // ----------------------------------------------------------------------
+// Test integrateResidual().
+void
+pylith::feassemble::TestElasticityExplicit::testIntegrateResidualLumped(void)
+{ // testIntegrateResidualLumped
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityExplicit integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  topology::Field<topology::Mesh>& residual = fields.get("residual");
+  const double t = 1.0;
+  integrator.integrateResidualLumped(residual, t, &fields);
+
+  const double* valsE = _data->valsResidualLumped;
+  const int sizeE = _data->spaceDim * _data->numVertices;
+
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  CPPUNIT_ASSERT(!residualSection.isNull());
+  const double* vals = residualSection->restrictSpace();
+  const int size = residualSection->sizeWithBC();
+  CPPUNIT_ASSERT_EQUAL(sizeE, size);
+
+#if 0
+  residual.view("RESIDUAL");
+  std::cout << "EXPECTED RESIDUAL" << std::endl;
+  for (int i=0; i < size; ++i)
+    std::cout << "  " << valsE[i] << std::endl;
+#endif
+
+  const double tolerance = 1.0e-06;
+  for (int i=0; i < size; ++i)
+    if (fabs(valsE[i]) > 1.0)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
+    else
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[i], vals[i], tolerance);
+} // testIntegrateResidualLumped
+
+// ----------------------------------------------------------------------
 // Test integrateJacobian().
 void
 pylith::feassemble::TestElasticityExplicit::testIntegrateJacobian(void)
@@ -279,19 +319,8 @@
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.complete();
 
-  const double* valsMatrixE = _data->valsJacobian;
-  const int sizeE = _data->numVertices * _data->spaceDim;
-  double_array valsE(sizeE);
-  const int spaceDim = _data->spaceDim;
-  const int numBasis = _data->numVertices;
-  for (int iBasis=0; iBasis < numBasis; ++iBasis)
-    for (int iDim=0; iDim < spaceDim; ++iDim) {
-      const int indexRow = (iBasis*spaceDim+iDim)*numBasis*spaceDim;
-      double value = 0.0;
-      for (int jBasis=0; jBasis < numBasis; ++jBasis)
-	value += valsMatrixE[indexRow + jBasis*spaceDim+iDim];
-      valsE[iBasis*spaceDim+iDim] = value;
-    } // for
+  double_array valsE;
+  _lumpJacobian(&valsE);
 
 #if 0 // DEBUGGING
   // TEMPORARY
@@ -309,6 +338,7 @@
   CPPUNIT_ASSERT(!jacobianSection.isNull());
   const double* vals = jacobianSection->restrictSpace();
   const int size = jacobianSection->sizeWithBC();
+  const int sizeE = _data->numVertices * _data->spaceDim;
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
   const double tolerance = 1.0e-06;
@@ -486,5 +516,28 @@
   } // for
 } // _initialize
 
+// ----------------------------------------------------------------------
+// Compute lumped Jacobian matrix.
+void
+pylith::feassemble::TestElasticityExplicit::_lumpJacobian(
+						  double_array* jacobian)
+{ // _lumpJacobian
+  assert(0 != jacobian);
 
+  const double* jacobianFull = _data->valsJacobian;
+  const int size = _data->numVertices * _data->spaceDim;
+  jacobian->resize(size);
+  const int spaceDim = _data->spaceDim;
+  const int numBasis = _data->numVertices;
+  for (int iBasis=0; iBasis < numBasis; ++iBasis)
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      const int indexRow = (iBasis*spaceDim+iDim)*numBasis*spaceDim;
+      double value = 0.0;
+      for (int jBasis=0; jBasis < numBasis; ++jBasis)
+	value += jacobianFull[indexRow + jBasis*spaceDim+iDim];
+      (*jacobian)[iBasis*spaceDim+iDim] = value;
+    } // for
+} // _lumpJacobian
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -26,6 +26,7 @@
 #include "pylith/feassemble/feassemblefwd.hh" // forward declarations
 #include "pylith/topology/topologyfwd.hh" // USES Mesh, SolutionFields
 #include "pylith/materials/materialsfwd.hh" // USES ElasticMaterial
+#include "pylith/utils/arrayfwd.hh" // USES double_array
 
 #include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
 
@@ -33,7 +34,7 @@
 namespace pylith {
   namespace feassemble {
     class TestElasticityExplicit;
-    class IntegratorData;
+    class ElasticityExplicitData;
   } // feassemble
 } // pylith
 
@@ -86,6 +87,9 @@
   /// Test integrateResidual().
   void testIntegrateResidual(void);
 
+  /// Test integrateResidualLumped().
+  void testIntegrateResidualLumped(void);
+
   /// Test integrateJacobian().
   void testIntegrateJacobian(void);
 
@@ -101,7 +105,7 @@
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :
 
-  IntegratorData* _data; ///< Data for testing.
+  ElasticityExplicitData* _data; ///< Data for testing.
   materials::ElasticMaterial* _material; ///< Elastic material.
   Quadrature<topology::Mesh>* _quadrature; ///< Quadrature information.
   spatialdata::spatialdb::GravityField* _gravityField; ///< Gravity field.
@@ -119,6 +123,12 @@
 		   ElasticityExplicit* const integrator,
 		   topology::SolutionFields* const fields);
 
+  /** Compute lumped Jacobian matrix.
+   *
+   * @param jacobian Lumped jacobian as an array.
+   */
+  void _lumpJacobian(double_array* jacobian);
+
 }; // class TestElasticityExplicit
 
 #endif // pylith_feassemble_testelasticityexplicit_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,6 +40,7 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,6 +40,7 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,6 +40,7 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,6 +40,7 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,6 +40,7 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,6 +40,7 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,7 +40,9 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,7 +40,9 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,7 +40,9 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,7 +40,9 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,7 +40,9 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -40,7 +40,9 @@
 
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateResidualLumped );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
 
   CPPUNIT_TEST_SUITE_END();

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityApp.py (from rev 16604, short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityApp.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityApp.py	2010-05-01 00:46:21 UTC (rev 16605)
@@ -0,0 +1,304 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/ElasticityApp.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ elasticity integrator objects.
+
+from IntegratorApp import IntegratorApp
+
+import numpy
+import feutils
+
+# ----------------------------------------------------------------------
+
+# ElasticityApp class
+class ElasticityApp(IntegratorApp):
+  """
+  Python application for generating C++ data files for testing C++
+  elasticity integrator objects.
+  """
+  
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  class Inventory(IntegratorApp.Inventory):
+    """Python object for managing IntegratorApp facilities and properties."""
+
+    ## @class Inventory
+    ## Python object for managing ElasticityIntegrator facilities and
+    ## properties.
+    ##
+    ## \b Properties
+    ## @li \b useGravity Include gravitational body forces in residual.
+    ##
+    ## \b Facilities
+    ## @li \b formulation Elasticity formulation.
+
+    import pyre.inventory
+
+    useGravity = pyre.inventory.bool("use_gravity", default=False)
+    useGravity.meta['tip'] = "Include gravitational body forces in residual."
+
+    from ElasticityImplicit import ElasticityImplicit
+    formulation = pyre.inventory.facility("formulation",
+                                          factory=ElasticityImplicit)
+    formulation.meta['tip'] = "Elasticity formulation."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="elasticityapp"):
+    """
+    Constructor.
+    """
+    IntegratorApp.__init__(self, name)
+
+    self.density = None
+    self.lameMu = None
+    self.lameLambda = None
+
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members using inventory.
+    """
+    IntegratorApp._configure(self)
+    self.useGravity = self.inventory.useGravity
+    self.formulation = self.inventory.formulation
+    return
+
+
+  def _calculateResidual(self):
+    """
+    Calculate contribution to residual of operator for integrator.
+    """
+    self.valsResidual = self.formulation.calculateResidual(self)
+    if self.useGravity:
+      self.valsResidual += self._calculateGravityVec()
+    return
+
+
+  def _calculateJacobian(self):
+    """
+    Calculate contribution to Jacobian matrix of operator for integrator.
+    """
+    self.valsJacobian = self.formulation.calculateJacobian(self)
+    return
+
+
+  def _calculateStiffnessMat(self):
+    """
+    Calculate stiffness matrix.
+
+    """
+    import feutils
+
+    K = numpy.zeros( (self.spaceDim*self.numVertices,
+                      self.spaceDim*self.numVertices),
+                     dtype=numpy.float64)
+
+    # Matrix of elasticity values
+    D = self._calculateElasticityMat()
+    
+    for cell in self.cells:
+      cellK = numpy.zeros( (self.spaceDim*self.numBasis,
+                            self.spaceDim*self.numBasis),
+                           dtype=numpy.float64)
+      vertices = self.vertices[cell, :]
+      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
+                 feutils.calculateJacobian(self.quadrature, vertices)
+      for iQuad in xrange(self.numQuadPts):
+        wt = self.quadWts[iQuad] * jacobianDet[iQuad]
+        B = self._calculateBasisDerivMat(basisDeriv, iQuad)
+        cellK[:] += wt * numpy.dot(numpy.dot(B.transpose(), D), B)
+      feutils.assembleMat(K, cellK, cell, self.spaceDim)
+    return K
+
+
+  def _calculateMassMat(self):
+    """
+    Calculate mass matrix.
+    """
+
+    M = numpy.zeros( (self.spaceDim*self.numVertices,
+                      self.spaceDim*self.numVertices),
+                     dtype=numpy.float64)
+
+    for cell in self.cells:
+      cellM = numpy.zeros( (self.spaceDim*self.numBasis,
+                            self.spaceDim*self.numBasis),
+                           dtype=numpy.float64)
+      vertices = self.vertices[cell, :]
+      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
+                 feutils.calculateJacobian(self.quadrature, vertices)
+      for iQuad in xrange(self.numQuadPts):
+        wt = self.quadWts[iQuad] * jacobianDet[iQuad]
+        N = self._calculateBasisMat(iQuad)
+        cellM[:] += self.density * wt * numpy.dot(N.transpose(), N)
+      feutils.assembleMat(M, cellM, cell, self.spaceDim)
+    return M
+
+
+  def _calculateGravityVec(self):
+    """
+    Calculate body force vector.
+    """
+    gravityGlobal = numpy.zeros((self.numVertices*self.spaceDim),
+                                dtype=numpy.float64)
+    for cell in self.cells:
+      gravityCell = numpy.zeros((self.spaceDim*self.numBasis))
+      vertices = self.vertices[cell, :]
+      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
+                 feutils.calculateJacobian(self.quadrature, vertices)
+      for iQuad in xrange(self.numQuadPts):
+        wt = self.quadWts[iQuad] * jacobianDet[iQuad] * self.density
+        for iBasis in xrange(self.numBasis):
+          valI = wt * self.basis[iQuad, iBasis]
+          for iDim in xrange(self.spaceDim):
+            gravityCell[iDim + iBasis * self.spaceDim] += \
+                             valI * self.gravityVec[iDim]
+      feutils.assembleVec(gravityGlobal, gravityCell, cell, self.spaceDim)
+    return gravityGlobal
+    
+
+  def _calculateElasticityMat(self):
+    """
+    Calculate elasticity matrix.
+    """
+    if 1 == self.cellDim:
+      lambda2mu = self.lameLambda + 2*self.lameMu
+      C1111 = lambda2mu
+      D = numpy.array([ [C1111] ],
+                      dtype=numpy.float64)
+    elif 2 == self.cellDim:
+      lambda2mu = self.lameLambda + 2*self.lameMu
+      C1111 = lambda2mu
+      C1122 = self.lameLambda
+      C1112 = 0.0
+      C2211 = self.lameLambda
+      C2222 = lambda2mu
+      C2212 = 0.0
+      C1211 = 0.0
+      C1222 = 0.0
+      C1212 = 2.0*self.lameMu
+      D = numpy.array([ [C1111, C1122, 0.5*C1112],
+                        [C2211, C2222, 0.5*C2212],
+                        [0.5*C1211, 0.5*C1222, 0.5*C1212] ],
+                      dtype=numpy.float64)
+    elif 3 == self.cellDim:
+      lambda2mu = self.lameLambda + 2.0*self.lameMu
+      C1111 = lambda2mu
+      C1122 = self.lameLambda
+      C1133 = self.lameLambda
+      C1112 = 0.0
+      C1123 = 0.0
+      C1113 = 0.0
+      C2211 = self.lameLambda
+      C2222 = lambda2mu
+      C2233 = self.lameLambda
+      C2212 = 0.0
+      C2223 = 0.0
+      C2213 = 0.0
+      C3311 = self.lameLambda
+      C3322 = self.lameLambda
+      C3333 = lambda2mu
+      C3312 = 0.0
+      C3323 = 0.0
+      C3313 = 0.0
+      C1211 = 0.0
+      C1222 = 0.0
+      C1233 = 0.0
+      C1212 = 2.0*self.lameMu
+      C1223 = 0.0
+      C1213 = 0.0
+      C2311 = 0.0
+      C2322 = 0.0
+      C2333 = 0.0
+      C2312 = 0.0
+      C2323 = 2.0*self.lameMu
+      C2313 = 0.0
+      C1311 = 0.0
+      C1322 = 0.0
+      C1333 = 0.0
+      C1312 = 0.0
+      C1323 = 0.0
+      C1313 = 2.0*self.lameMu
+      D = numpy.array([ [C1111, C1122, C1133, 0.5*C1112, 0.5*C1123, 0.5*C1113],
+                        [C2211, C2222, C2233, 0.5*C2212, 0.5*C2223, 0.5*C2213],
+                        [C3311, C3322, C3333, 0.5*C3312, 0.5*C3323, 0.5*C3313],
+                        [0.5*C1211, 0.5*C1222, 0.5*C1233, 0.5*C1212, 0.5*C1223, 0.5*C1213],
+                        [0.5*C2311, 0.5*C2322, 0.5*C2333, 0.5*C2312, 0.5*C2323, 0.5*C2313],
+                        [0.5*C1311, 0.5*C1322, 0.5*C1333, 0.5*C1312, 0.5*C1323, 0.5*C1313] ],
+                      dtype=numpy.float64)
+    return D
+
+
+  def _calculateBasisMat(self, iQuad):
+    """
+    Calculate matrix of basis functions.
+    """
+    N = numpy.zeros( (self.spaceDim, self.spaceDim*self.numBasis),
+                     dtype=numpy.float64)
+    for iBasis in xrange(self.numBasis):
+      for iDim in xrange(self.spaceDim):
+        N[iDim, iBasis*self.spaceDim+iDim] = self.basis[iQuad, iBasis]
+    return N
+
+
+  def _calculateBasisDerivMat(self, basisDeriv, iQuad):
+    """
+    Calculate matrix of derivatives of basis functions.
+    """
+    if 3 == self.spaceDim:
+      B = numpy.zeros( (6, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
+        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
+        B[2, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 2]
+        B[3, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
+        B[3, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
+        B[4, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 2]
+        B[4, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 1]
+        B[5, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 2]
+        B[5, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 0]
+    elif 2 == self.spaceDim:
+      B = numpy.zeros( (3, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
+        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
+        B[2, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
+        B[2, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
+    elif 1 == self.spaceDim:
+      B = numpy.zeros( (1, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
+    else:
+      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
+    return B
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = ElasticityApp()
+  app.run()
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicit.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicit.py	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicit.py	2010-05-01 00:46:21 UTC (rev 16605)
@@ -68,6 +68,55 @@
     return jacobian
 
 
+  def calculateResidualLumped(self, integrator):
+    """
+    Calculate contribution to residual of operator for integrator.
+
+    {r} = (1/dt**2)[M](-{u(t+dt)} + 2 {u(t)} - {u(t-dt)}) -
+          [K]{u(t)}
+    """
+    K = integrator._calculateStiffnessMat()    
+    M = integrator._calculateMassMat()
+    Ml = self._lumpMatrix(M, integrator.numBasis, integrator.spaceDim)
+    
+    vel = (integrator.fieldT + integrator.fieldTIncr - integrator.fieldTmdt) / (2.0*integrator.dt)
+    acc = (integrator.fieldTIncr - integrator.fieldT + integrator.fieldTmdt) / (integrator.dt**2)
+    acc = acc.flatten()
+    residual = -Ml*acc - numpy.dot(K, integrator.fieldT).flatten()
+    return residual.flatten()
+
+
+  def calculateJacobianLumped(self, integrator):
+    """
+    Calculate contribution to Jacobian matrix of operator for integrator.
+
+    [A] = (1/dt**2)[M]
+    """
+    M = integrator._calculateMassMat()
+    Ml = self._lumpMatrix(M, integrator.numBasis, integrator.spaceDim)
+
+    jacobian = 1.0/integrator.dt**2 * Ml
+    return jacobian.flatten()
+
+
+  def _lumpMatrix(self, matrix, numBasis, spaceDim):
+    """
+    Lump matrix.
+    """
+    (nrows,ncols) = matrix.shape
+    assert(numBasis * spaceDim == nrows)
+    assert(nrows == ncols)
+    vector = numpy.zeros( (ncols), dtype=numpy.float64)
+
+    for iBasis in xrange(numBasis):
+      for iDim in xrange(spaceDim):
+        v = 0.0
+        for jBasis in xrange(numBasis):
+          v += matrix[iBasis*spaceDim+iDim,jBasis*spaceDim+iDim]
+        vector[iBasis*spaceDim+iDim] = v
+    return vector
+
+
 # FACTORY //////////////////////////////////////////////////////////////
 def formulation():
   return ElasticityExplicit()

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitApp.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitApp.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitApp.py	2010-05-01 00:46:21 UTC (rev 16605)
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/ElasticityExplicitApp.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ elasticity integrator objects.
+
+from ElasticityApp import ElasticityApp
+
+import numpy
+import feutils
+
+# ----------------------------------------------------------------------
+
+# ElasticityExplicitApp class
+class ElasticityExplicitApp(ElasticityApp):
+  """
+  Python application for generating C++ data files for testing C++
+  elasticity integrator objects.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="elasticityexplicitapp"):
+    """
+    Constructor.
+    """
+    ElasticityApp.__init__(self, name)
+
+    return
+  
+
+  def main(self):
+    """
+    Run the application.
+    """
+    self._collectData()
+    self._calculateResidual()
+    self._calculateJacobian()
+    self._calculateResidualLumped()
+    self._calculateJacobianLumped()
+    self._initData()
+    self.data.write(self.name)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _calculateResidualLumped(self):
+    """
+    Calculate contribution to residual of operator for integrator.
+    """
+    self.valsResidualLumped = self.formulation.calculateResidualLumped(self)
+    if self.useGravity:
+      self.valsResidualLumped += self._calculateGravityVec()
+    return
+
+
+  def _calculateJacobianLumped(self):
+    """
+    Calculate contribution to Jacobian matrix of operator for integrator.
+    """
+    self.valsJacobianLumped = self.formulation.calculateJacobianLumped(self)
+    return
+
+
+  def _initData(self):
+
+    ElasticityApp._initData(self)
+    # Calculated values
+    self.data.addArray(vtype="double", name="_valsResidualLumped",
+                       values=self.valsResidualLumped,
+                       format="%16.8e", ncols=self.spaceDim)
+    self.data.addArray(vtype="double", name="_valsJacobianLumped",
+                       values=self.valsJacobianLumped,
+                       format="%16.8e", ncols=self.spaceDim)
+    return
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = ElasticityExplicitApp()
+  app.run()
+
+
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -0,0 +1,30 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "ElasticityExplicitData.hh"
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::ElasticityExplicitData::ElasticityExplicitData(void) :
+  valsResidualLumped(0),
+  valsJacobianLumped(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::ElasticityExplicitData::~ElasticityExplicitData(void)
+{ // destructor
+} // destructor
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -0,0 +1,48 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_elasticityexplicitdata_hh)
+#define pylith_feassemble_elasticityexplicitdata_hh
+
+#include "IntegratorData.hh" // ISA IntegratorData
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitData;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitData : public IntegratorData
+{
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public :
+  
+  /// Constructor
+  ElasticityExplicitData(void);
+
+  /// Destructor
+  ~ElasticityExplicitData(void);
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public:
+
+  /// @name Calculated values.
+  //@{
+  double* valsResidualLumped; ///< Expected values from residual calculation (lumped Jacobian).
+  double* valsJacobianLumped; ///< Expected values from lumped Jacobian calculation.
+  //@}
+};
+
+#endif // pylith_feassemble_elasticityexplicitdata_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitData1DLinear.hh"
 
@@ -100,6 +100,16 @@
   1.40625000e+07,
 };
 
+const double pylith::feassemble::ElasticityExplicitData1DLinear::_valsResidualLumped[] = {
+  1.59690625e+10,
+ -1.60421875e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitData1DLinear::_valsJacobianLumped[] = {
+  2.81250000e+07,
+  2.81250000e+07,
+};
+
 pylith::feassemble::ElasticityExplicitData1DLinear::ElasticityExplicitData1DLinear(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -126,6 +136,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData1DLinear::~ElasticityExplicitData1DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata1dlinear_hh)
 #define pylith_feassemble_elasticityexplicitdata1dlinear_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitData1DLinear : public IntegratorData
+class pylith::feassemble::ElasticityExplicitData1DLinear : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitdata1dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitData1DQuadratic.hh"
 
@@ -120,6 +120,18 @@
   2.50000000e+07,
 };
 
+const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsResidualLumped[] = {
+  5.59896875e+10,
+  1.36000000e+11,
+ -1.92056250e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsJacobianLumped[] = {
+  9.37500000e+06,
+  9.37500000e+06,
+  3.75000000e+07,
+};
+
 pylith::feassemble::ElasticityExplicitData1DQuadratic::ElasticityExplicitData1DQuadratic(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -146,6 +158,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData1DQuadratic::~ElasticityExplicitData1DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata1dquadratic_hh)
 #define pylith_feassemble_elasticityexplicitdata1dquadratic_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitData1DQuadratic : public IntegratorData
+class pylith::feassemble::ElasticityExplicitData1DQuadratic : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitdata1dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitData2DLinear.hh"
 
@@ -120,6 +120,18 @@
   0.00000000e+00,  3.81944444e+05,
 };
 
+const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidualLumped[] = {
+ -1.66797633e+10,  3.09149858e+10,
+ -2.30569129e+09, -2.72130502e+10,
+  1.89830483e+10, -3.70273769e+09,
+};
+
+const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobianLumped[] = {
+  1.14583333e+06,  1.14583333e+06,
+  1.14583333e+06,  1.14583333e+06,
+  1.14583333e+06,  1.14583333e+06,
+};
+
 pylith::feassemble::ElasticityExplicitData2DLinear::ElasticityExplicitData2DLinear(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -146,6 +158,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData2DLinear::~ElasticityExplicitData2DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata2dlinear_hh)
 #define pylith_feassemble_elasticityexplicitdata2dlinear_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitData2DLinear : public IntegratorData
+class pylith::feassemble::ElasticityExplicitData2DLinear : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitdata2dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitData2DQuadratic.hh"
 
@@ -247,6 +247,24 @@
   0.00000000e+00,  8.46679688e+06,
 };
 
+const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsResidualLumped[] = {
+  1.06607998e+10,  9.01610069e+10,
+ -2.93282002e+10, -4.67480816e+09,
+  4.90766782e+09,  6.17202257e+10,
+  6.30202202e+10,  1.02131902e+11,
+ -6.40793371e+10, -1.84814510e+11,
+  1.48326542e+10, -6.45158012e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsJacobianLumped[] = {
+  4.21875000e+06,  4.21875000e+06,
+  3.98437500e+06,  3.98437500e+06,
+  3.98437500e+06,  3.98437500e+06,
+  2.25000000e+07,  2.25000000e+07,
+  5.15625000e+06,  5.15625000e+06,
+  5.15625000e+06,  5.15625000e+06,
+};
+
 pylith::feassemble::ElasticityExplicitData2DQuadratic::ElasticityExplicitData2DQuadratic(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -273,6 +291,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData2DQuadratic::~ElasticityExplicitData2DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata2dquadratic_hh)
 #define pylith_feassemble_elasticityexplicitdata2dquadratic_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitData2DQuadratic : public IntegratorData
+class pylith::feassemble::ElasticityExplicitData2DQuadratic : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitdata2dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitData3DLinear.hh"
 
@@ -157,6 +157,20 @@
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
 };
 
+const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsResidualLumped[] = {
+ -6.07498709e+09,  3.62529830e+10,  3.19732678e+09,
+ -4.00813455e+09,  6.66863247e+10,  2.19218130e+10,
+  6.67228741e+09, -1.05594008e+11, -3.15003008e+10,
+  3.41419674e+09,  2.65469976e+09,  6.38385094e+09,
+};
+
+const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsJacobianLumped[] = {
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+};
+
 pylith::feassemble::ElasticityExplicitData3DLinear::ElasticityExplicitData3DLinear(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -183,6 +197,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData3DLinear::~ElasticityExplicitData3DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata3dlinear_hh)
 #define pylith_feassemble_elasticityexplicitdata3dlinear_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitData3DLinear : public IntegratorData
+class pylith::feassemble::ElasticityExplicitData3DLinear : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitdata3dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitData3DQuadratic.hh"
 
@@ -496,6 +496,32 @@
   0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
 };
 
+const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsResidualLumped[] = {
+  2.17441536e+10, -9.08020975e+09,  2.06935737e+10,
+  6.22351054e+10, -2.47908763e+10,  7.42269985e+09,
+ -4.60097182e+10, -5.34117225e+10, -3.15185315e+10,
+ -1.00516830e+10,  4.19873726e+10, -3.87317709e+10,
+ -8.42078211e+09,  6.33182361e+10, -3.42844355e+09,
+  6.62278190e+10,  1.09244311e+11, -3.72731067e+10,
+ -9.59516349e+10, -5.29561314e+10, -2.51167317e+10,
+ -1.25237479e+10, -6.06732213e+10,  1.03805264e+10,
+ -3.24416221e+10,  5.14211527e+10,  7.31454785e+09,
+  5.52060281e+10, -6.50368653e+10,  9.02716524e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsJacobianLumped[] = {
+  2.57903646e+06,  2.57903646e+06,  2.57903646e+06,
+  2.40117187e+06,  2.40117187e+06,  2.40117187e+06,
+  2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
+  2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
+  1.20947917e+07,  1.20947917e+07,  1.20947917e+07,
+  8.35963542e+06,  8.35963542e+06,  8.35963542e+06,
+  8.35963542e+06,  8.35963542e+06,  8.35963542e+06,
+  8.35963542e+06,  8.35963542e+06,  8.35963542e+06,
+  1.20947917e+07,  1.20947917e+07,  1.20947917e+07,
+  1.20947917e+07,  1.20947917e+07,  1.20947917e+07,
+};
+
 pylith::feassemble::ElasticityExplicitData3DQuadratic::ElasticityExplicitData3DQuadratic(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -522,6 +548,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData3DQuadratic::~ElasticityExplicitData3DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata3dquadratic_hh)
 #define pylith_feassemble_elasticityexplicitdata3dquadratic_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitData3DQuadratic : public IntegratorData
+class pylith::feassemble::ElasticityExplicitData3DQuadratic : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitdata3dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitGravData1DLinear.hh"
 
@@ -100,6 +100,16 @@
   1.40625000e+07,
 };
 
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsResidualLumped[] = {
+ -2.65280938e+11,
+ -2.97292188e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsJacobianLumped[] = {
+  2.81250000e+07,
+  2.81250000e+07,
+};
+
 pylith::feassemble::ElasticityExplicitGravData1DLinear::ElasticityExplicitGravData1DLinear(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -126,6 +136,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData1DLinear::~ElasticityExplicitGravData1DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitgravdata1dlinear_hh)
 #define pylith_feassemble_elasticityexplicitgravdata1dlinear_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitGravData1DLinear : public IntegratorData
+class pylith::feassemble::ElasticityExplicitGravData1DLinear : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitgravdata1dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitGravData1DQuadratic.hh"
 
@@ -120,6 +120,18 @@
   2.50000000e+07,
 };
 
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsResidualLumped[] = {
+ -3.77603125e+10,
+  4.22500000e+10,
+ -5.67056250e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsJacobianLumped[] = {
+  9.37500000e+06,
+  9.37500000e+06,
+  3.75000000e+07,
+};
+
 pylith::feassemble::ElasticityExplicitGravData1DQuadratic::ElasticityExplicitGravData1DQuadratic(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -146,6 +158,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData1DQuadratic::~ElasticityExplicitGravData1DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitgravdata1dquadratic_hh)
 #define pylith_feassemble_elasticityexplicitgravdata1dquadratic_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitGravData1DQuadratic : public IntegratorData
+class pylith::feassemble::ElasticityExplicitGravData1DQuadratic : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitgravdata1dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitGravData2DLinear.hh"
 
@@ -120,6 +120,18 @@
   0.00000000e+00,  3.81944444e+05,
 };
 
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidualLumped[] = {
+ -1.66797633e+10,  1.94566525e+10,
+ -2.30569129e+09, -3.86713835e+10,
+  1.89830483e+10, -1.51610710e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobianLumped[] = {
+  1.14583333e+06,  1.14583333e+06,
+  1.14583333e+06,  1.14583333e+06,
+  1.14583333e+06,  1.14583333e+06,
+};
+
 pylith::feassemble::ElasticityExplicitGravData2DLinear::ElasticityExplicitGravData2DLinear(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -146,6 +158,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData2DLinear::~ElasticityExplicitGravData2DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitgravdata2dlinear_hh)
 #define pylith_feassemble_elasticityexplicitgravdata2dlinear_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitGravData2DLinear : public IntegratorData
+class pylith::feassemble::ElasticityExplicitGravData2DLinear : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitgravdata2dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitGravData2DQuadratic.hh"
 
@@ -247,6 +247,24 @@
   0.00000000e+00,  8.46679688e+06,
 };
 
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsResidualLumped[] = {
+  1.06607998e+10,  4.79735069e+10,
+ -2.93282002e+10, -4.45185582e+10,
+  4.90766782e+09,  2.18764757e+10,
+  6.30202202e+10, -1.22868098e+11,
+ -6.40793371e+10, -2.36377010e+11,
+  1.48326542e+10, -1.16078301e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsJacobianLumped[] = {
+  4.21875000e+06,  4.21875000e+06,
+  3.98437500e+06,  3.98437500e+06,
+  3.98437500e+06,  3.98437500e+06,
+  2.25000000e+07,  2.25000000e+07,
+  5.15625000e+06,  5.15625000e+06,
+  5.15625000e+06,  5.15625000e+06,
+};
+
 pylith::feassemble::ElasticityExplicitGravData2DQuadratic::ElasticityExplicitGravData2DQuadratic(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -273,6 +291,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData2DQuadratic::~ElasticityExplicitGravData2DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitgravdata2dquadratic_hh)
 #define pylith_feassemble_elasticityexplicitgravdata2dquadratic_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitGravData2DQuadratic : public IntegratorData
+class pylith::feassemble::ElasticityExplicitGravData2DQuadratic : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitgravdata2dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitGravData3DLinear.hh"
 
@@ -157,6 +157,20 @@
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
 };
 
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsResidualLumped[] = {
+ -6.07498709e+09,  3.62529830e+10, -3.04276732e+10,
+ -4.00813455e+09,  6.66863247e+10, -1.17031870e+10,
+  6.67228741e+09, -1.05594008e+11, -6.51253008e+10,
+  3.41419674e+09,  2.65469976e+09, -2.72411491e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsJacobianLumped[] = {
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+  3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
+};
+
 pylith::feassemble::ElasticityExplicitGravData3DLinear::ElasticityExplicitGravData3DLinear(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -183,6 +197,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData3DLinear::~ElasticityExplicitGravData3DLinear(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitgravdata3dlinear_hh)
 #define pylith_feassemble_elasticityexplicitgravdata3dlinear_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitGravData3DLinear : public IntegratorData
+class pylith::feassemble::ElasticityExplicitGravData3DLinear : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitgravdata3dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #include "ElasticityExplicitGravData3DQuadratic.hh"
 
@@ -496,6 +496,32 @@
   0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
 };
 
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsResidualLumped[] = {
+  2.17441536e+10, -9.08020975e+09, -5.09679086e+09,
+  6.22351054e+10, -2.47908763e+10, -1.65890189e+10,
+ -4.60097182e+10, -5.34117225e+10, -5.55302502e+10,
+ -1.00516830e+10,  4.19873726e+10, -6.27434896e+10,
+ -8.42078211e+09,  6.33182361e+10, -1.24376360e+11,
+  6.62278190e+10,  1.09244311e+11, -1.20869461e+11,
+ -9.59516349e+10, -5.29561314e+10, -1.08713086e+11,
+ -1.25237479e+10, -6.06732213e+10, -7.32158278e+10,
+ -3.24416221e+10,  5.14211527e+10, -1.13633369e+11,
+  5.52060281e+10, -6.50368653e+10, -3.06762643e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsJacobianLumped[] = {
+  2.57903646e+06,  2.57903646e+06,  2.57903646e+06,
+  2.40117187e+06,  2.40117187e+06,  2.40117187e+06,
+  2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
+  2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
+  1.20947917e+07,  1.20947917e+07,  1.20947917e+07,
+  8.35963542e+06,  8.35963542e+06,  8.35963542e+06,
+  8.35963542e+06,  8.35963542e+06,  8.35963542e+06,
+  8.35963542e+06,  8.35963542e+06,  8.35963542e+06,
+  1.20947917e+07,  1.20947917e+07,  1.20947917e+07,
+  1.20947917e+07,  1.20947917e+07,  1.20947917e+07,
+};
+
 pylith::feassemble::ElasticityExplicitGravData3DQuadratic::ElasticityExplicitGravData3DQuadratic(void)
 { // constructor
   spaceDim = _spaceDim;
@@ -522,6 +548,8 @@
   fieldTmdt = const_cast<double*>(_fieldTmdt);
   valsResidual = const_cast<double*>(_valsResidual);
   valsJacobian = const_cast<double*>(_valsJacobian);
+  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData3DQuadratic::~ElasticityExplicitGravData3DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -11,12 +11,12 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityexplicitapp.
 
 #if !defined(pylith_feassemble_elasticityexplicitgravdata3dquadratic_hh)
 #define pylith_feassemble_elasticityexplicitgravdata3dquadratic_hh
 
-#include "IntegratorData.hh"
+#include "ElasticityExplicitData.hh"
 
 namespace pylith {
   namespace feassemble {
@@ -24,7 +24,7 @@
   } // pylith
 } // feassemble
 
-class pylith::feassemble::ElasticityExplicitGravData3DQuadratic : public IntegratorData
+class pylith::feassemble::ElasticityExplicitGravData3DQuadratic : public ElasticityExplicitData
 {
 
 public: 
@@ -85,6 +85,10 @@
 
   static const double _valsJacobian[];
 
+  static const double _valsResidualLumped[];
+
+  static const double _valsJacobianLumped[];
+
 };
 
 #endif // pylith_feassemble_elasticityexplicitgravdata3dquadratic_hh

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityLgDeformApp.py (from rev 16604, short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityLgDeformApp.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityLgDeformApp.py	2010-05-01 00:46:21 UTC (rev 16605)
@@ -0,0 +1,347 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/ElasticityAppLgDeform.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ elasticity integrator objects.
+
+from ElasticityApp import ElasticityApp
+
+import numpy
+import feutils
+
+# ----------------------------------------------------------------------
+
+# ElasticityAppLgDeform class
+class ElasticityAppLgDeform(ElasticityApp):
+  """
+  Python application for generating C++ data files for testing C++
+  elasticity integrator objects.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="elasticityapplgdeform"):
+    """
+    Constructor.
+    """
+    ElasticityApp.__init__(self, name)
+
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _calculateStiffnessMat(self):
+    """
+    Calculate stiffness matrix.
+
+    """
+    import feutils
+
+    K = numpy.zeros( (self.spaceDim*self.numVertices,
+                      self.spaceDim*self.numVertices),
+                     dtype=numpy.float64)
+
+    # Matrix of elasticity values
+    D = self._calculateElasticityMat()
+    
+    for cell in self.cells:
+      cellK = numpy.zeros( (self.spaceDim*self.numBasis,
+                            self.spaceDim*self.numBasis),
+                           dtype=numpy.float64)
+      vertices = self.vertices[cell, :]
+      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
+                 feutils.calculateJacobian(self.quadrature, vertices)
+      fieldTpdt = self.fieldT + self.fieldTIncr
+      for iQuad in xrange(self.numQuadPts):
+        wt = self.quadWts[iQuad] * jacobianDet[iQuad]
+        BL0 = self._calculateBasisDerivMatLinear0(basisDeriv, iQuad)
+        BL1 = self._calculateBasisDerivMatLinear1(basisDeriv, iQuad, fieldTpdt)
+        BL = BL0 + BL1
+        cellK[:] += wt * numpy.dot(numpy.dot(BL.transpose(), D), BL)
+        BNL = self._calculateBasisDerivMatNonlinear(basisDeriv, iQuad)
+        strain = self._calculateStrain(basisDeriv, iQuad, fieldTpdt)
+        S = self._calculateStress(strain, D)
+        cellK[:] += wt * numpy.dot(numpy.dot(BNL.transpose(), S), BNL)
+      feutils.assembleMat(K, cellK, cell, self.spaceDim)
+    return K
+
+
+  def _calculateBasisDerivMatLinear0(self, basisDeriv, iQuad):
+    """
+    Calculate matrix of derivatives of basis functions.
+    """
+    if 3 == self.spaceDim:
+      B = numpy.zeros( (6, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
+        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
+        B[2, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 2]
+        B[3, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
+        B[3, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
+        B[4, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 2]
+        B[4, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 1]
+        B[5, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 2]
+        B[5, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 0]
+    elif 2 == self.spaceDim:
+      B = numpy.zeros( (3, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
+        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
+        B[2, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
+        B[2, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
+    elif 1 == self.spaceDim:
+      B = numpy.zeros( (1, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
+    else:
+      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
+    return B
+
+
+  def _calculateBasisDerivMatLinear1(self, basisDeriv, iQuad, disp):
+    """
+    Calculate matrix of derivatives of basis functions.
+    """
+    if 3 == self.spaceDim:
+      B = numpy.zeros( (6, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      l11 = 0.0
+      l12 = 0.0
+      l13 = 0.0
+      l21 = 0.0
+      l22 = 0.0
+      l23 = 0.0
+      l31 = 0.0
+      l32 = 0.0
+      l33 = 0.0
+      for kBasis in xrange(self.numBasis):
+        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
+        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
+        l13 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim  ]
+        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
+        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
+        l23 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+1]
+        l31 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+2]
+        l32 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+2]
+        l33 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+2]
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]*l11
+        B[0, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]*l21
+        B[0, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 0]*l31
+        B[1, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]*l12
+        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]*l22
+        B[1, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 1]*l32
+        B[2, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 2]*l13
+        B[2, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 2]*l23
+        B[2, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 2]*l33
+
+        B[3, iBasis*self.spaceDim+0] = \
+            basisDeriv[iQuad, iBasis, 1]*l11 + basisDeriv[iQuad, iBasis, 0]*l12
+        B[3, iBasis*self.spaceDim+1] = \
+            basisDeriv[iQuad, iBasis, 0]*l22 + basisDeriv[iQuad, iBasis, 1]*l21
+        B[3, iBasis*self.spaceDim+2] = \
+            basisDeriv[iQuad, iBasis, 1]*l31 + basisDeriv[iQuad, iBasis, 0]*l32
+        
+        B[4, iBasis*self.spaceDim+0] = \
+            basisDeriv[iQuad, iBasis, 2]*l12 + basisDeriv[iQuad, iBasis, 1]*l13
+        B[4, iBasis*self.spaceDim+1] = \
+            basisDeriv[iQuad, iBasis, 2]*l22 + basisDeriv[iQuad, iBasis, 1]*l23
+        B[4, iBasis*self.spaceDim+2] = \
+            basisDeriv[iQuad, iBasis, 1]*l33 + basisDeriv[iQuad, iBasis, 2]*l32
+        
+        B[5, iBasis*self.spaceDim+0] = \
+            basisDeriv[iQuad, iBasis, 2]*l11 + basisDeriv[iQuad, iBasis, 0]*l13
+        B[5, iBasis*self.spaceDim+1] = \
+            basisDeriv[iQuad, iBasis, 2]*l21 + basisDeriv[iQuad, iBasis, 0]*l23
+        B[5, iBasis*self.spaceDim+2] = \
+            basisDeriv[iQuad, iBasis, 0]*l33 + basisDeriv[iQuad, iBasis, 2]*l31
+
+    elif 2 == self.spaceDim:
+      B = numpy.zeros( (3, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      l11 = 0.0
+      l12 = 0.0
+      l21 = 0.0
+      l22 = 0.0
+      for kBasis in xrange(self.numBasis):
+        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
+        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
+        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
+        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]*l11
+        B[0, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]*l21
+        B[1, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]*l12
+        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]*l22
+        B[2, iBasis*self.spaceDim+0] = \
+            basisDeriv[iQuad, iBasis, 1]*l11 + basisDeriv[iQuad, iBasis, 0]*l12
+        B[2, iBasis*self.spaceDim+1] = \
+            basisDeriv[iQuad, iBasis, 0]*l22 + basisDeriv[iQuad, iBasis, 1]*l21
+
+    elif 1 == self.spaceDim:
+      B = numpy.zeros( (1, self.spaceDim*self.numBasis),
+                       dtype=numpy.float64)
+      l11 = 0.0
+      for kBasis in xrange(self.numBasis):
+        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis]
+      for iBasis in xrange(self.numBasis):
+        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]*l11
+    else:
+      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
+    return B
+
+
+  def _calculateBasisDerivMatNonlinear(self, basisDeriv, iQuad):
+    """
+    Calculate matrix of derivatives of basis functions.
+    """
+    B = numpy.zeros( (self.spaceDim*self.spaceDim,
+                      self.spaceDim*self.numBasis),
+                     dtype=numpy.float64)
+    for iBasis in xrange(self.numBasis):
+      for iDim in xrange(self.spaceDim):
+        for jDim in xrange(self.spaceDim):
+          B[jDim+iDim*self.spaceDim, iBasis*self.spaceDim+iDim] = \
+              basisDeriv[iQuad, iBasis, jDim]
+    return B
+
+
+  def _calculateStrain(self, basisDeriv, iQuad, disp):
+    """
+    Calculte Green-Lagrange strain. Shear strains are twice the
+    Green-Lagrance values for compatibility with computing the strains
+    using the B matrix in the infinitesimal strain case.
+    """
+    if 3 == self.spaceDim:
+      strain = numpy.zeros( (1,6), dtype=numpy.float64)
+
+      l11 = 0.0
+      l12 = 0.0
+      l13 = 0.0
+      l21 = 0.0
+      l22 = 0.0
+      l23 = 0.0
+      l31 = 0.0
+      l32 = 0.0
+      l33 = 0.0
+      for kBasis in xrange(self.numBasis):
+        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
+        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
+        l13 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim  ]
+        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
+        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
+        l23 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+1]
+        l31 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+2]
+        l32 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+2]
+        l33 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+2]
+      strain[0, 0] = 0.5*(l11*l11 + l21*l21 + l31*l31)
+      strain[0, 1] = 0.5*(l12*l12 + l22*l22 + l32*l32)
+      strain[0, 2] = 0.5*(l13*l13 + l23*l23 + l33*l33)
+      strain[0, 3] = (l11*l12 + l21*l22 + l31*l32) # Use 2*e12 (D has mu)
+      strain[0, 4] = (l12*l13 + l22*l23 + l32*l33)
+      strain[0, 5] = (l11*l13 + l21*l23 + l31*l33)
+      for iBasis in xrange(self.numBasis):
+        strain[0, 0] += \
+            basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim  ]
+        strain[0, 1] += \
+            basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim+1]
+        strain[0, 2] += \
+            basisDeriv[iQuad, iBasis, 2]*disp[iBasis*self.spaceDim+2]
+        strain[0, 3] += \
+            (basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim+1] +
+             basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim  ])
+        strain[0, 4] += \
+            (basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim+2] +
+             basisDeriv[iQuad, iBasis, 2]*disp[iBasis*self.spaceDim+1])
+        strain[0, 5] += \
+            (basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim+2] +
+             basisDeriv[iQuad, iBasis, 2]*disp[iBasis*self.spaceDim  ])
+
+    elif 2 == self.spaceDim:
+      strain = numpy.zeros( (1,3), dtype=numpy.float64)
+      l11 = 0.0
+      l12 = 0.0
+      l21 = 0.0
+      l22 = 0.0
+      for kBasis in xrange(self.numBasis):
+        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
+        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
+        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
+        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
+      strain[0, 0] = 0.5*(l11*l11 + l21*l21)
+      strain[0, 1] = 0.5*(l12*l12 + l22*l22)
+      strain[0, 2] = (l11*l12 + l21*l22) # Use 2*e12 (D has mu, not 2*mu)
+      for iBasis in xrange(self.numBasis):
+        strain[0, 0] += \
+            basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim  ]
+        strain[0, 1] += \
+            basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim+1]
+        strain[0, 2] += \
+            (basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim+1] +
+             basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim  ])
+
+    elif 1 == self.spaceDim:
+      strain = numpy.zeros( (1,1), dtype=numpy.float64)
+      l11 = 0.0
+      for kBasis in xrange(self.numBasis):
+        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis]
+      strain[0, 0] = 0.5*l11*l11
+      for iBasis in xrange(self.numBasis):
+        strain[0, 0] += basisDeriv[iQuad, iBasis, 0]*disp[iBasis]
+    else:
+      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
+      
+    return strain
+
+
+  def _calculateStress(self, strain, D):
+    """
+    Calculte 2nd Priola-Kirchoff stress matrix.
+    """
+    S = numpy.zeros( (self.spaceDim*self.spaceDim,
+                      self.spaceDim*self.spaceDim), dtype=numpy.float64)
+    Svec = numpy.dot(D, strain.transpose())
+    if 3 == self.spaceDim:
+      Smat = numpy.array([[Svec[0,0], Svec[3,0], Svec[5,0]],
+                          [Svec[3,0], Svec[1,0], Svec[4,0]],
+                          [Svec[5,0], Svec[4,0], Svec[2,0]]], 
+                         dtype=numpy.float64)
+      S[0:3,0:3] = Smat[:]
+      S[3:6,3:6] = Smat[:]
+      S[6:9,6:9] = Smat[:]
+    elif 2 == self.spaceDim:
+      Smat = numpy.array([[Svec[0,0], Svec[2,0]],
+                          [Svec[2,0], Svec[1,0]]], dtype=numpy.float64)
+      S[0:2,0:2] = Smat[:]
+      S[2:4,2:4] = Smat[:]
+    elif 1 == self.spaceDim:
+      Smat = numpy.array([[Svec[0]]], dtype=numpy.float64)
+      S[0:1,0:1] = Smat[:]
+    else:
+      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
+    return S
+
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = ElasticityAppLgDeform()
+  app.run()
+
+
+# End of file 

Deleted: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py	2010-05-01 00:46:21 UTC (rev 16605)
@@ -1,304 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file unittests/libtests/feassemble/data/IntegratorElasticity.py
-
-## @brief Python application for generating C++ data files for testing
-## C++ elasticity integrator objects.
-
-from IntegratorApp import IntegratorApp
-
-import numpy
-import feutils
-
-# ----------------------------------------------------------------------
-
-# IntegratorElasticity class
-class IntegratorElasticity(IntegratorApp):
-  """
-  Python application for generating C++ data files for testing C++
-  elasticity integrator objects.
-  """
-  
-  # INVENTORY //////////////////////////////////////////////////////////
-
-  class Inventory(IntegratorApp.Inventory):
-    """Python object for managing IntegratorApp facilities and properties."""
-
-    ## @class Inventory
-    ## Python object for managing ElasticityIntegrator facilities and
-    ## properties.
-    ##
-    ## \b Properties
-    ## @li \b useGravity Include gravitational body forces in residual.
-    ##
-    ## \b Facilities
-    ## @li \b formulation Elasticity formulation.
-
-    import pyre.inventory
-
-    useGravity = pyre.inventory.bool("use_gravity", default=False)
-    useGravity.meta['tip'] = "Include gravitational body forces in residual."
-
-    from ElasticityImplicit import ElasticityImplicit
-    formulation = pyre.inventory.facility("formulation",
-                                          factory=ElasticityImplicit)
-    formulation.meta['tip'] = "Elasticity formulation."
-
-
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-  
-  def __init__(self, name="integratorelasticity"):
-    """
-    Constructor.
-    """
-    IntegratorApp.__init__(self, name)
-
-    self.density = None
-    self.lameMu = None
-    self.lameLambda = None
-
-    return
-  
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Set members using inventory.
-    """
-    IntegratorApp._configure(self)
-    self.useGravity = self.inventory.useGravity
-    self.formulation = self.inventory.formulation
-    return
-
-
-  def _calculateResidual(self):
-    """
-    Calculate contribution to residual of operator for integrator.
-    """
-    self.valsResidual = self.formulation.calculateResidual(self)
-    if self.useGravity:
-      self.valsResidual += self._calculateGravityVec()
-    return
-
-
-  def _calculateJacobian(self):
-    """
-    Calculate contribution to Jacobian matrix of operator for integrator.
-    """
-    self.valsJacobian = self.formulation.calculateJacobian(self)
-    return
-
-
-  def _calculateStiffnessMat(self):
-    """
-    Calculate stiffness matrix.
-
-    """
-    import feutils
-
-    K = numpy.zeros( (self.spaceDim*self.numVertices,
-                      self.spaceDim*self.numVertices),
-                     dtype=numpy.float64)
-
-    # Matrix of elasticity values
-    D = self._calculateElasticityMat()
-    
-    for cell in self.cells:
-      cellK = numpy.zeros( (self.spaceDim*self.numBasis,
-                            self.spaceDim*self.numBasis),
-                           dtype=numpy.float64)
-      vertices = self.vertices[cell, :]
-      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
-                 feutils.calculateJacobian(self.quadrature, vertices)
-      for iQuad in xrange(self.numQuadPts):
-        wt = self.quadWts[iQuad] * jacobianDet[iQuad]
-        B = self._calculateBasisDerivMat(basisDeriv, iQuad)
-        cellK[:] += wt * numpy.dot(numpy.dot(B.transpose(), D), B)
-      feutils.assembleMat(K, cellK, cell, self.spaceDim)
-    return K
-
-
-  def _calculateMassMat(self):
-    """
-    Calculate mass matrix.
-    """
-
-    M = numpy.zeros( (self.spaceDim*self.numVertices,
-                      self.spaceDim*self.numVertices),
-                     dtype=numpy.float64)
-
-    for cell in self.cells:
-      cellM = numpy.zeros( (self.spaceDim*self.numBasis,
-                            self.spaceDim*self.numBasis),
-                           dtype=numpy.float64)
-      vertices = self.vertices[cell, :]
-      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
-                 feutils.calculateJacobian(self.quadrature, vertices)
-      for iQuad in xrange(self.numQuadPts):
-        wt = self.quadWts[iQuad] * jacobianDet[iQuad]
-        N = self._calculateBasisMat(iQuad)
-        cellM[:] += self.density * wt * numpy.dot(N.transpose(), N)
-      feutils.assembleMat(M, cellM, cell, self.spaceDim)
-    return M
-
-
-  def _calculateGravityVec(self):
-    """
-    Calculate body force vector.
-    """
-    gravityGlobal = numpy.zeros((self.numVertices*self.spaceDim),
-                                dtype=numpy.float64)
-    for cell in self.cells:
-      gravityCell = numpy.zeros((self.spaceDim*self.numBasis))
-      vertices = self.vertices[cell, :]
-      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
-                 feutils.calculateJacobian(self.quadrature, vertices)
-      for iQuad in xrange(self.numQuadPts):
-        wt = self.quadWts[iQuad] * jacobianDet[iQuad] * self.density
-        for iBasis in xrange(self.numBasis):
-          valI = wt * self.basis[iQuad, iBasis]
-          for iDim in xrange(self.spaceDim):
-            gravityCell[iDim + iBasis * self.spaceDim] += \
-                             valI * self.gravityVec[iDim]
-      feutils.assembleVec(gravityGlobal, gravityCell, cell, self.spaceDim)
-    return gravityGlobal
-    
-
-  def _calculateElasticityMat(self):
-    """
-    Calculate elasticity matrix.
-    """
-    if 1 == self.cellDim:
-      lambda2mu = self.lameLambda + 2*self.lameMu
-      C1111 = lambda2mu
-      D = numpy.array([ [C1111] ],
-                      dtype=numpy.float64)
-    elif 2 == self.cellDim:
-      lambda2mu = self.lameLambda + 2*self.lameMu
-      C1111 = lambda2mu
-      C1122 = self.lameLambda
-      C1112 = 0.0
-      C2211 = self.lameLambda
-      C2222 = lambda2mu
-      C2212 = 0.0
-      C1211 = 0.0
-      C1222 = 0.0
-      C1212 = 2.0*self.lameMu
-      D = numpy.array([ [C1111, C1122, 0.5*C1112],
-                        [C2211, C2222, 0.5*C2212],
-                        [0.5*C1211, 0.5*C1222, 0.5*C1212] ],
-                      dtype=numpy.float64)
-    elif 3 == self.cellDim:
-      lambda2mu = self.lameLambda + 2.0*self.lameMu
-      C1111 = lambda2mu
-      C1122 = self.lameLambda
-      C1133 = self.lameLambda
-      C1112 = 0.0
-      C1123 = 0.0
-      C1113 = 0.0
-      C2211 = self.lameLambda
-      C2222 = lambda2mu
-      C2233 = self.lameLambda
-      C2212 = 0.0
-      C2223 = 0.0
-      C2213 = 0.0
-      C3311 = self.lameLambda
-      C3322 = self.lameLambda
-      C3333 = lambda2mu
-      C3312 = 0.0
-      C3323 = 0.0
-      C3313 = 0.0
-      C1211 = 0.0
-      C1222 = 0.0
-      C1233 = 0.0
-      C1212 = 2.0*self.lameMu
-      C1223 = 0.0
-      C1213 = 0.0
-      C2311 = 0.0
-      C2322 = 0.0
-      C2333 = 0.0
-      C2312 = 0.0
-      C2323 = 2.0*self.lameMu
-      C2313 = 0.0
-      C1311 = 0.0
-      C1322 = 0.0
-      C1333 = 0.0
-      C1312 = 0.0
-      C1323 = 0.0
-      C1313 = 2.0*self.lameMu
-      D = numpy.array([ [C1111, C1122, C1133, 0.5*C1112, 0.5*C1123, 0.5*C1113],
-                        [C2211, C2222, C2233, 0.5*C2212, 0.5*C2223, 0.5*C2213],
-                        [C3311, C3322, C3333, 0.5*C3312, 0.5*C3323, 0.5*C3313],
-                        [0.5*C1211, 0.5*C1222, 0.5*C1233, 0.5*C1212, 0.5*C1223, 0.5*C1213],
-                        [0.5*C2311, 0.5*C2322, 0.5*C2333, 0.5*C2312, 0.5*C2323, 0.5*C2313],
-                        [0.5*C1311, 0.5*C1322, 0.5*C1333, 0.5*C1312, 0.5*C1323, 0.5*C1313] ],
-                      dtype=numpy.float64)
-    return D
-
-
-  def _calculateBasisMat(self, iQuad):
-    """
-    Calculate matrix of basis functions.
-    """
-    N = numpy.zeros( (self.spaceDim, self.spaceDim*self.numBasis),
-                     dtype=numpy.float64)
-    for iBasis in xrange(self.numBasis):
-      for iDim in xrange(self.spaceDim):
-        N[iDim, iBasis*self.spaceDim+iDim] = self.basis[iQuad, iBasis]
-    return N
-
-
-  def _calculateBasisDerivMat(self, basisDeriv, iQuad):
-    """
-    Calculate matrix of derivatives of basis functions.
-    """
-    if 3 == self.spaceDim:
-      B = numpy.zeros( (6, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
-        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
-        B[2, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 2]
-        B[3, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
-        B[3, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
-        B[4, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 2]
-        B[4, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 1]
-        B[5, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 2]
-        B[5, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 0]
-    elif 2 == self.spaceDim:
-      B = numpy.zeros( (3, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
-        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
-        B[2, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
-        B[2, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
-    elif 1 == self.spaceDim:
-      B = numpy.zeros( (1, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
-    else:
-      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
-    return B
-
-
-# MAIN /////////////////////////////////////////////////////////////////
-if __name__ == "__main__":
-
-  app = IntegratorElasticity()
-  app.run()
-
-
-# End of file 

Deleted: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py	2010-05-01 00:46:21 UTC (rev 16605)
@@ -1,347 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py
-
-## @brief Python application for generating C++ data files for testing
-## C++ elasticity integrator objects.
-
-from IntegratorElasticity import IntegratorElasticity
-
-import numpy
-import feutils
-
-# ----------------------------------------------------------------------
-
-# IntegratorElasticityLgDeform class
-class IntegratorElasticityLgDeform(IntegratorElasticity):
-  """
-  Python application for generating C++ data files for testing C++
-  elasticity integrator objects.
-  """
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-  
-  def __init__(self, name="integratorelasticitylgdeform"):
-    """
-    Constructor.
-    """
-    IntegratorElasticity.__init__(self, name)
-
-    return
-  
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _calculateStiffnessMat(self):
-    """
-    Calculate stiffness matrix.
-
-    """
-    import feutils
-
-    K = numpy.zeros( (self.spaceDim*self.numVertices,
-                      self.spaceDim*self.numVertices),
-                     dtype=numpy.float64)
-
-    # Matrix of elasticity values
-    D = self._calculateElasticityMat()
-    
-    for cell in self.cells:
-      cellK = numpy.zeros( (self.spaceDim*self.numBasis,
-                            self.spaceDim*self.numBasis),
-                           dtype=numpy.float64)
-      vertices = self.vertices[cell, :]
-      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
-                 feutils.calculateJacobian(self.quadrature, vertices)
-      fieldTpdt = self.fieldT + self.fieldTIncr
-      for iQuad in xrange(self.numQuadPts):
-        wt = self.quadWts[iQuad] * jacobianDet[iQuad]
-        BL0 = self._calculateBasisDerivMatLinear0(basisDeriv, iQuad)
-        BL1 = self._calculateBasisDerivMatLinear1(basisDeriv, iQuad, fieldTpdt)
-        BL = BL0 + BL1
-        cellK[:] += wt * numpy.dot(numpy.dot(BL.transpose(), D), BL)
-        BNL = self._calculateBasisDerivMatNonlinear(basisDeriv, iQuad)
-        strain = self._calculateStrain(basisDeriv, iQuad, fieldTpdt)
-        S = self._calculateStress(strain, D)
-        cellK[:] += wt * numpy.dot(numpy.dot(BNL.transpose(), S), BNL)
-      feutils.assembleMat(K, cellK, cell, self.spaceDim)
-    return K
-
-
-  def _calculateBasisDerivMatLinear0(self, basisDeriv, iQuad):
-    """
-    Calculate matrix of derivatives of basis functions.
-    """
-    if 3 == self.spaceDim:
-      B = numpy.zeros( (6, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
-        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
-        B[2, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 2]
-        B[3, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
-        B[3, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
-        B[4, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 2]
-        B[4, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 1]
-        B[5, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 2]
-        B[5, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 0]
-    elif 2 == self.spaceDim:
-      B = numpy.zeros( (3, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
-        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]
-        B[2, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]
-        B[2, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]
-    elif 1 == self.spaceDim:
-      B = numpy.zeros( (1, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]
-    else:
-      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
-    return B
-
-
-  def _calculateBasisDerivMatLinear1(self, basisDeriv, iQuad, disp):
-    """
-    Calculate matrix of derivatives of basis functions.
-    """
-    if 3 == self.spaceDim:
-      B = numpy.zeros( (6, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      l11 = 0.0
-      l12 = 0.0
-      l13 = 0.0
-      l21 = 0.0
-      l22 = 0.0
-      l23 = 0.0
-      l31 = 0.0
-      l32 = 0.0
-      l33 = 0.0
-      for kBasis in xrange(self.numBasis):
-        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
-        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
-        l13 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim  ]
-        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
-        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
-        l23 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+1]
-        l31 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+2]
-        l32 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+2]
-        l33 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+2]
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]*l11
-        B[0, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]*l21
-        B[0, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 0]*l31
-        B[1, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]*l12
-        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]*l22
-        B[1, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 1]*l32
-        B[2, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 2]*l13
-        B[2, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 2]*l23
-        B[2, iBasis*self.spaceDim+2] = basisDeriv[iQuad, iBasis, 2]*l33
-
-        B[3, iBasis*self.spaceDim+0] = \
-            basisDeriv[iQuad, iBasis, 1]*l11 + basisDeriv[iQuad, iBasis, 0]*l12
-        B[3, iBasis*self.spaceDim+1] = \
-            basisDeriv[iQuad, iBasis, 0]*l22 + basisDeriv[iQuad, iBasis, 1]*l21
-        B[3, iBasis*self.spaceDim+2] = \
-            basisDeriv[iQuad, iBasis, 1]*l31 + basisDeriv[iQuad, iBasis, 0]*l32
-        
-        B[4, iBasis*self.spaceDim+0] = \
-            basisDeriv[iQuad, iBasis, 2]*l12 + basisDeriv[iQuad, iBasis, 1]*l13
-        B[4, iBasis*self.spaceDim+1] = \
-            basisDeriv[iQuad, iBasis, 2]*l22 + basisDeriv[iQuad, iBasis, 1]*l23
-        B[4, iBasis*self.spaceDim+2] = \
-            basisDeriv[iQuad, iBasis, 1]*l33 + basisDeriv[iQuad, iBasis, 2]*l32
-        
-        B[5, iBasis*self.spaceDim+0] = \
-            basisDeriv[iQuad, iBasis, 2]*l11 + basisDeriv[iQuad, iBasis, 0]*l13
-        B[5, iBasis*self.spaceDim+1] = \
-            basisDeriv[iQuad, iBasis, 2]*l21 + basisDeriv[iQuad, iBasis, 0]*l23
-        B[5, iBasis*self.spaceDim+2] = \
-            basisDeriv[iQuad, iBasis, 0]*l33 + basisDeriv[iQuad, iBasis, 2]*l31
-
-    elif 2 == self.spaceDim:
-      B = numpy.zeros( (3, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      l11 = 0.0
-      l12 = 0.0
-      l21 = 0.0
-      l22 = 0.0
-      for kBasis in xrange(self.numBasis):
-        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
-        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
-        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
-        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]*l11
-        B[0, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 0]*l21
-        B[1, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 1]*l12
-        B[1, iBasis*self.spaceDim+1] = basisDeriv[iQuad, iBasis, 1]*l22
-        B[2, iBasis*self.spaceDim+0] = \
-            basisDeriv[iQuad, iBasis, 1]*l11 + basisDeriv[iQuad, iBasis, 0]*l12
-        B[2, iBasis*self.spaceDim+1] = \
-            basisDeriv[iQuad, iBasis, 0]*l22 + basisDeriv[iQuad, iBasis, 1]*l21
-
-    elif 1 == self.spaceDim:
-      B = numpy.zeros( (1, self.spaceDim*self.numBasis),
-                       dtype=numpy.float64)
-      l11 = 0.0
-      for kBasis in xrange(self.numBasis):
-        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis]
-      for iBasis in xrange(self.numBasis):
-        B[0, iBasis*self.spaceDim+0] = basisDeriv[iQuad, iBasis, 0]*l11
-    else:
-      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
-    return B
-
-
-  def _calculateBasisDerivMatNonlinear(self, basisDeriv, iQuad):
-    """
-    Calculate matrix of derivatives of basis functions.
-    """
-    B = numpy.zeros( (self.spaceDim*self.spaceDim,
-                      self.spaceDim*self.numBasis),
-                     dtype=numpy.float64)
-    for iBasis in xrange(self.numBasis):
-      for iDim in xrange(self.spaceDim):
-        for jDim in xrange(self.spaceDim):
-          B[jDim+iDim*self.spaceDim, iBasis*self.spaceDim+iDim] = \
-              basisDeriv[iQuad, iBasis, jDim]
-    return B
-
-
-  def _calculateStrain(self, basisDeriv, iQuad, disp):
-    """
-    Calculte Green-Lagrange strain. Shear strains are twice the
-    Green-Lagrance values for compatibility with computing the strains
-    using the B matrix in the infinitesimal strain case.
-    """
-    if 3 == self.spaceDim:
-      strain = numpy.zeros( (1,6), dtype=numpy.float64)
-
-      l11 = 0.0
-      l12 = 0.0
-      l13 = 0.0
-      l21 = 0.0
-      l22 = 0.0
-      l23 = 0.0
-      l31 = 0.0
-      l32 = 0.0
-      l33 = 0.0
-      for kBasis in xrange(self.numBasis):
-        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
-        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
-        l13 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim  ]
-        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
-        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
-        l23 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+1]
-        l31 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+2]
-        l32 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+2]
-        l33 += basisDeriv[iQuad, kBasis, 2]*disp[kBasis*self.spaceDim+2]
-      strain[0, 0] = 0.5*(l11*l11 + l21*l21 + l31*l31)
-      strain[0, 1] = 0.5*(l12*l12 + l22*l22 + l32*l32)
-      strain[0, 2] = 0.5*(l13*l13 + l23*l23 + l33*l33)
-      strain[0, 3] = (l11*l12 + l21*l22 + l31*l32) # Use 2*e12 (D has mu)
-      strain[0, 4] = (l12*l13 + l22*l23 + l32*l33)
-      strain[0, 5] = (l11*l13 + l21*l23 + l31*l33)
-      for iBasis in xrange(self.numBasis):
-        strain[0, 0] += \
-            basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim  ]
-        strain[0, 1] += \
-            basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim+1]
-        strain[0, 2] += \
-            basisDeriv[iQuad, iBasis, 2]*disp[iBasis*self.spaceDim+2]
-        strain[0, 3] += \
-            (basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim+1] +
-             basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim  ])
-        strain[0, 4] += \
-            (basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim+2] +
-             basisDeriv[iQuad, iBasis, 2]*disp[iBasis*self.spaceDim+1])
-        strain[0, 5] += \
-            (basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim+2] +
-             basisDeriv[iQuad, iBasis, 2]*disp[iBasis*self.spaceDim  ])
-
-    elif 2 == self.spaceDim:
-      strain = numpy.zeros( (1,3), dtype=numpy.float64)
-      l11 = 0.0
-      l12 = 0.0
-      l21 = 0.0
-      l22 = 0.0
-      for kBasis in xrange(self.numBasis):
-        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim  ]
-        l12 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim  ]
-        l21 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis*self.spaceDim+1]
-        l22 += basisDeriv[iQuad, kBasis, 1]*disp[kBasis*self.spaceDim+1]
-      strain[0, 0] = 0.5*(l11*l11 + l21*l21)
-      strain[0, 1] = 0.5*(l12*l12 + l22*l22)
-      strain[0, 2] = (l11*l12 + l21*l22) # Use 2*e12 (D has mu, not 2*mu)
-      for iBasis in xrange(self.numBasis):
-        strain[0, 0] += \
-            basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim  ]
-        strain[0, 1] += \
-            basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim+1]
-        strain[0, 2] += \
-            (basisDeriv[iQuad, iBasis, 0]*disp[iBasis*self.spaceDim+1] +
-             basisDeriv[iQuad, iBasis, 1]*disp[iBasis*self.spaceDim  ])
-
-    elif 1 == self.spaceDim:
-      strain = numpy.zeros( (1,1), dtype=numpy.float64)
-      l11 = 0.0
-      for kBasis in xrange(self.numBasis):
-        l11 += basisDeriv[iQuad, kBasis, 0]*disp[kBasis]
-      strain[0, 0] = 0.5*l11*l11
-      for iBasis in xrange(self.numBasis):
-        strain[0, 0] += basisDeriv[iQuad, iBasis, 0]*disp[iBasis]
-    else:
-      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
-      
-    return strain
-
-
-  def _calculateStress(self, strain, D):
-    """
-    Calculte 2nd Priola-Kirchoff stress matrix.
-    """
-    S = numpy.zeros( (self.spaceDim*self.spaceDim,
-                      self.spaceDim*self.spaceDim), dtype=numpy.float64)
-    Svec = numpy.dot(D, strain.transpose())
-    if 3 == self.spaceDim:
-      Smat = numpy.array([[Svec[0,0], Svec[3,0], Svec[5,0]],
-                          [Svec[3,0], Svec[1,0], Svec[4,0]],
-                          [Svec[5,0], Svec[4,0], Svec[2,0]]], 
-                         dtype=numpy.float64)
-      S[0:3,0:3] = Smat[:]
-      S[3:6,3:6] = Smat[:]
-      S[6:9,6:9] = Smat[:]
-    elif 2 == self.spaceDim:
-      Smat = numpy.array([[Svec[0,0], Svec[2,0]],
-                          [Svec[2,0], Svec[1,0]]], dtype=numpy.float64)
-      S[0:2,0:2] = Smat[:]
-      S[2:4,2:4] = Smat[:]
-    elif 1 == self.spaceDim:
-      Smat = numpy.array([[Svec[0]]], dtype=numpy.float64)
-      S[0:1,0:1] = Smat[:]
-    else:
-      raise ValueError("Unknown spatial dimension '%d'." % self.spaceDim)
-    return S
-
-
-# MAIN /////////////////////////////////////////////////////////////////
-if __name__ == "__main__":
-
-  app = IntegratorElasticityLgDeform()
-  app.run()
-
-
-# End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2010-04-30 16:56:33 UTC (rev 16604)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2010-05-01 00:46:21 UTC (rev 16605)
@@ -136,43 +136,43 @@
 
   # 1-D ----------------------------------------------------------------
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData1DLinear \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh1DLinear \
     --quadrature=Quadrature1DLinear \
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData1DQuadratic \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh1DQuadratic \
     --quadrature=Quadrature1DQuadratic \
     --material=MaterialElasticStrain1D \
     --solution=Solution1DQuadratic
 
-    python IntegratorElasticity.py \
+    python ElasticityExplicitApp.py \
     --use_gravity=True \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitGravData1DLinear \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh1DLinear \
     --quadrature=Quadrature1DLinear \
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --use_gravity=True \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitGravData1DQuadratic \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh1DQuadratic \
     --quadrature=Quadrature1DQuadratic \
     --material=MaterialElasticStrain1D \
@@ -180,43 +180,43 @@
 
   # 2-D ----------------------------------------------------------------
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData2DLinear \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh2DLinear \
     --quadrature=Quadrature2DLinear \
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData2DQuadratic \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh2DQuadratic \
     --quadrature=Quadrature2DQuadratic \
     --material=ElasticPlaneStrain \
     --solution=Solution2DQuadratic
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --use_gravity=True \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitGravData2DLinear \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh2DLinear \
     --quadrature=Quadrature2DLinear \
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --use_gravity=True \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitGravData2DQuadratic \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh2DQuadratic \
     --quadrature=Quadrature2DQuadratic \
     --material=ElasticPlaneStrain \
@@ -226,43 +226,43 @@
 
   # 3-D ----------------------------------------------------------------
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData3DLinear \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh3DLinear \
     --quadrature=Quadrature3DLinear \
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData3DQuadratic \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh3DQuadratic \
     --quadrature=Quadrature3DQuadratic \
     --material=ElasticIsotropic3D \
     --solution=Solution3DQuadratic
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --use_gravity=True \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitGravData3DLinear \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh3DLinear \
     --quadrature=Quadrature3DLinear \
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityExplicitApp.py \
     --use_gravity=True \
     --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitGravData3DQuadratic \
-    --data.parent=IntegratorData \
+    --data.parent=ElasticityExplicitData \
     --mesh=Mesh3DQuadratic \
     --quadrature=Quadrature3DQuadratic \
     --material=ElasticIsotropic3D \
@@ -275,7 +275,7 @@
 
   # 1-D ----------------------------------------------------------------
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData1DLinear \
@@ -285,7 +285,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData1DQuadratic \
@@ -295,7 +295,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DQuadratic
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --use_gravity=True \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
@@ -306,7 +306,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --use_gravity=True \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
@@ -319,7 +319,7 @@
 
   # 2-D ----------------------------------------------------------------
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData2DLinear \
@@ -329,7 +329,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData2DQuadratic \
@@ -339,7 +339,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DQuadratic
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --use_gravity=True \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
@@ -350,7 +350,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --use_gravity=True \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
@@ -364,7 +364,7 @@
 
   # 3-D ----------------------------------------------------------------
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData3DLinear \
@@ -374,7 +374,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData3DQuadratic \
@@ -384,7 +384,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DQuadratic
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --use_gravity=True \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
@@ -395,7 +395,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticity.py \
+  python ElasticityApp.py \
     --use_gravity=True \
     --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
@@ -413,7 +413,7 @@
 
   # 1-D ----------------------------------------------------------------
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitLgDeformData1DLinear \
@@ -423,7 +423,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitLgDeformData1DQuadratic \
@@ -433,7 +433,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DQuadratic
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -444,7 +444,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -458,7 +458,7 @@
 
   # 2-D ----------------------------------------------------------------
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitLgDeformData2DLinear \
@@ -468,7 +468,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitLgDeformData2DQuadratic \
@@ -478,7 +478,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DQuadratic
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -489,7 +489,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -503,7 +503,7 @@
 
   # 3-D ----------------------------------------------------------------
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitLgDeformData3DLinear \
@@ -513,7 +513,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitLgDeformData3DQuadratic \
@@ -523,7 +523,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DQuadratic
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -534,7 +534,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityExplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -553,7 +553,7 @@
 
   # 1-D ----------------------------------------------------------------
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitLgDeformData1DLinear \
@@ -563,7 +563,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitLgDeformData1DQuadratic \
@@ -573,7 +573,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DQuadratic
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -584,7 +584,7 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -598,7 +598,7 @@
 
   # 2-D ----------------------------------------------------------------
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitLgDeformData2DLinear \
@@ -608,7 +608,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitLgDeformData2DQuadratic \
@@ -618,7 +618,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DQuadratic
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -629,7 +629,7 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -643,7 +643,7 @@
 
   # 3-D ----------------------------------------------------------------
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitLgDeformData3DLinear \
@@ -653,7 +653,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitLgDeformData3DQuadratic \
@@ -663,7 +663,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DQuadratic
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \
@@ -674,7 +674,7 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python IntegratorElasticityLgDeform.py \
+  python ElasticityAppLgDeform.py \
     --use_gravity=True \
     --formulation=ElasticityImplicitLgDeform \
     --data.namespace=pylith,feassemble \



More information about the CIG-COMMITS mailing list