[cig-commits] r16094 - in short/3D/PyLith/trunk: . applications applications/utilities doc doc/developer doc/install doc/presentations doc/refguide doc/releasenotes doc/userguide doc/userguide/materials examples examples/3d examples/3d/hex8 examples/3d/tet4 examples/bar_shearwave examples/bar_shearwave/hex8 examples/bar_shearwave/hex8/output examples/bar_shearwave/quad4 examples/bar_shearwave/quad4/output examples/bar_shearwave/tet4 examples/bar_shearwave/tet4/output examples/bar_shearwave/tri3 examples/bar_shearwave/tri3/output examples/greensfns examples/greensfns/hex8 examples/greensfns/hex8/gfimpulses examples/greensfns/hex8/gfresponses examples/twocells examples/twocells/twohex8 examples/twocells/twoquad4 examples/twocells/twotet4 examples/twocells/twotet4-geoproj examples/twocells/twotri3 libsrc libsrc/bc libsrc/faults libsrc/feassemble libsrc/materials libsrc/meshio libsrc/problems libsrc/topology libsrc/utils modulesrc/faults modulesrc/feassemble modulesrc/include modulesrc/meshio playpen pylith pylith/faults pylith/feassemble pylith/meshio pylith/problems pylith/tests pylith/utils share templates tests tests/1d tests/1d/line2 tests/1d/line3 tests/2d tests/2d/quad4 tests/2d/tri3 tests/3d tests/3dnew/hex8 tests/petsc unittests unittests/libtests unittests/libtests/bc unittests/libtests/bc/data unittests/libtests/faults unittests/libtests/faults/data unittests/libtests/feassemble unittests/libtests/feassemble/data unittests/libtests/materials unittests/libtests/materials/data unittests/libtests/meshio unittests/libtests/meshio/data unittests/libtests/topology unittests/libtests/topology/data unittests/libtests/utils unittests/pytests unittests/pytests/bc unittests/pytests/bc/data unittests/pytests/faults unittests/pytests/faults/data unittests/pytests/feassemble unittests/pytests/feassemble/data unittests/pytests/materials unittests/pytests/materials/data unittests/pytests/meshio unittests/pytests/meshio/data unittests/pytests/mpi unittests/pytests/problems unittests/pytests/problems/data unittests/pytests/topology unittests/pytests/topology/data unittests/pytests/utils

brad at geodynamics.org brad at geodynamics.org
Wed Dec 9 17:52:49 PST 2009


Author: brad
Date: 2009-12-09 17:52:12 -0800 (Wed, 09 Dec 2009)
New Revision: 16094

Added:
   short/3D/PyLith/trunk/doc/releasenotes/announce_v1.5.0.txt
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.icc
   short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.cc
   short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.hh
   short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.icc
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.cc
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.hh
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.cc
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.hh
   short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.cc
   short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.hh
   short/3D/PyLith/trunk/libsrc/feassemble/jacobian2d_lgdeform.wxm
   short/3D/PyLith/trunk/libsrc/feassemble/jacobian3d_lgdeform.wxm
   short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc
   short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh
   short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i
   short/3D/PyLith/trunk/modulesrc/faults/TimeHistorySlipFn.i
   short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityExplicitLgDeform.i
   short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityImplicitLgDeform.i
   short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticityLgDeform.i
   short/3D/PyLith/trunk/playpen/friction/
   short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDyn.py
   short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDynL.py
   short/3D/PyLith/trunk/pylith/faults/TimeHistorySlipFn.py
   short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicitLgDeform.py
   short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicitLgDeform.py
   short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticityLgDeform.py
   short/3D/PyLith/trunk/pylith/meshio/OutputFaultDyn.py
   short/3D/PyLith/trunk/pylith/problems/ExplicitLgDeform.py
   short/3D/PyLith/trunk/pylith/problems/ExplicitLumped.py
   short/3D/PyLith/trunk/pylith/problems/ImplicitLgDeform.py
   short/3D/PyLith/trunk/pylith/problems/SolverLumped.py
   short/3D/PyLith/trunk/tests/1d/line2/lgdeformtranslation.cfg
   short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformRigidBody.py
   short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformTraction.py
   short/3D/PyLith/trunk/tests/2d/quad4/lgdeformrigidbody.cfg
   short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction.cfg
   short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction_soln.py
   short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_gendb.py
   short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_soln.py
   short/3D/PyLith/trunk/tests/3dnew/
   short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/slipfn.timedb
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.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/ElasticityExplicitLgDeform.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeform.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py
   short/3D/PyLith/trunk/unittests/pytests/faults/TestTimeHistorySlipFn.py
   short/3D/PyLith/trunk/unittests/pytests/faults/data/slipfn.timedb
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py
Removed:
   short/3D/PyLith/trunk/tests/3d/bar_hex8/
   short/3D/PyLith/trunk/tests/3d/bar_tet4/
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGrav.py
Modified:
   short/3D/PyLith/trunk/
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/applications/
   short/3D/PyLith/trunk/applications/utilities/
   short/3D/PyLith/trunk/configure.ac
   short/3D/PyLith/trunk/doc/
   short/3D/PyLith/trunk/doc/developer/
   short/3D/PyLith/trunk/doc/install/
   short/3D/PyLith/trunk/doc/presentations/
   short/3D/PyLith/trunk/doc/refguide/
   short/3D/PyLith/trunk/doc/refguide/doxyconfig
   short/3D/PyLith/trunk/doc/releasenotes/
   short/3D/PyLith/trunk/doc/userguide/
   short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx
   short/3D/PyLith/trunk/examples/
   short/3D/PyLith/trunk/examples/3d/
   short/3D/PyLith/trunk/examples/3d/hex8/
   short/3D/PyLith/trunk/examples/3d/tet4/
   short/3D/PyLith/trunk/examples/bar_shearwave/
   short/3D/PyLith/trunk/examples/bar_shearwave/hex8/
   short/3D/PyLith/trunk/examples/bar_shearwave/hex8/output/
   short/3D/PyLith/trunk/examples/bar_shearwave/quad4/
   short/3D/PyLith/trunk/examples/bar_shearwave/quad4/output/
   short/3D/PyLith/trunk/examples/bar_shearwave/tet4/
   short/3D/PyLith/trunk/examples/bar_shearwave/tet4/output/
   short/3D/PyLith/trunk/examples/bar_shearwave/tri3/
   short/3D/PyLith/trunk/examples/bar_shearwave/tri3/output/
   short/3D/PyLith/trunk/examples/greensfns/
   short/3D/PyLith/trunk/examples/greensfns/hex8/
   short/3D/PyLith/trunk/examples/greensfns/hex8/gfimpulses/
   short/3D/PyLith/trunk/examples/greensfns/hex8/gfresponses/
   short/3D/PyLith/trunk/examples/twocells/
   short/3D/PyLith/trunk/examples/twocells/twohex8/
   short/3D/PyLith/trunk/examples/twocells/twoquad4/
   short/3D/PyLith/trunk/examples/twocells/twotet4-geoproj/
   short/3D/PyLith/trunk/examples/twocells/twotet4/
   short/3D/PyLith/trunk/examples/twocells/twotri3/
   short/3D/PyLith/trunk/libsrc/
   short/3D/PyLith/trunk/libsrc/Makefile.am
   short/3D/PyLith/trunk/libsrc/bc/
   short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc
   short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.hh
   short/3D/PyLith/trunk/libsrc/bc/BCIntegratorSubMesh.hh
   short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh
   short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.cc
   short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.hh
   short/3D/PyLith/trunk/libsrc/bc/DirichletBC.hh
   short/3D/PyLith/trunk/libsrc/bc/DirichletBoundary.hh
   short/3D/PyLith/trunk/libsrc/bc/Neumann.cc
   short/3D/PyLith/trunk/libsrc/bc/Neumann.hh
   short/3D/PyLith/trunk/libsrc/bc/PointForce.hh
   short/3D/PyLith/trunk/libsrc/bc/TimeDependent.hh
   short/3D/PyLith/trunk/libsrc/bc/TimeDependentPoints.hh
   short/3D/PyLith/trunk/libsrc/faults/
   short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh
   short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh
   short/3D/PyLith/trunk/libsrc/faults/ConstRateSlipFn.hh
   short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh
   short/3D/PyLith/trunk/libsrc/faults/Fault.hh
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.hh
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
   short/3D/PyLith/trunk/libsrc/faults/LiuCosSlipFn.hh
   short/3D/PyLith/trunk/libsrc/faults/Makefile.am
   short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh
   short/3D/PyLith/trunk/libsrc/faults/StepSlipFn.hh
   short/3D/PyLith/trunk/libsrc/faults/TopologyOps.hh
   short/3D/PyLith/trunk/libsrc/faults/TopologyVisitors.hh
   short/3D/PyLith/trunk/libsrc/faults/faultsfwd.hh
   short/3D/PyLith/trunk/libsrc/feassemble/
   short/3D/PyLith/trunk/libsrc/feassemble/CellGeometry.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Constraint.hh
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.hh
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine1D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint1D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Integrator.cc
   short/3D/PyLith/trunk/libsrc/feassemble/Integrator.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Integrator.icc
   short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc
   short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh
   short/3D/PyLith/trunk/libsrc/feassemble/QuadratureEngine.hh
   short/3D/PyLith/trunk/libsrc/feassemble/QuadratureRefCell.hh
   short/3D/PyLith/trunk/libsrc/feassemble/feassemblefwd.hh
   short/3D/PyLith/trunk/libsrc/materials/
   short/3D/PyLith/trunk/libsrc/materials/EffectiveStress.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh
   short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.hh
   short/3D/PyLith/trunk/libsrc/materials/Material.hh
   short/3D/PyLith/trunk/libsrc/materials/MaxwellIsotropic3D.hh
   short/3D/PyLith/trunk/libsrc/materials/MaxwellPlaneStrain.hh
   short/3D/PyLith/trunk/libsrc/materials/Metadata.hh
   short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh
   short/3D/PyLith/trunk/libsrc/materials/ViscoelasticMaxwell.hh
   short/3D/PyLith/trunk/libsrc/materials/materialsfwd.hh
   short/3D/PyLith/trunk/libsrc/meshio/
   short/3D/PyLith/trunk/libsrc/meshio/BinaryIO.hh
   short/3D/PyLith/trunk/libsrc/meshio/CellFilter.hh
   short/3D/PyLith/trunk/libsrc/meshio/CellFilterAvg.hh
   short/3D/PyLith/trunk/libsrc/meshio/DataWriter.hh
   short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc
   short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh
   short/3D/PyLith/trunk/libsrc/meshio/GMVFile.hh
   short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.hh
   short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.hh
   short/3D/PyLith/trunk/libsrc/meshio/MeshBuilder.hh
   short/3D/PyLith/trunk/libsrc/meshio/MeshIO.cc
   short/3D/PyLith/trunk/libsrc/meshio/MeshIO.hh
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOAscii.hh
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh
   short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh
   short/3D/PyLith/trunk/libsrc/meshio/OutputManager.hh
   short/3D/PyLith/trunk/libsrc/meshio/OutputSolnSubset.hh
   short/3D/PyLith/trunk/libsrc/meshio/PsetFile.hh
   short/3D/PyLith/trunk/libsrc/meshio/PsetFileAscii.hh
   short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.hh
   short/3D/PyLith/trunk/libsrc/meshio/UCDFaultFile.hh
   short/3D/PyLith/trunk/libsrc/meshio/VertexFilter.hh
   short/3D/PyLith/trunk/libsrc/meshio/VertexFilterVecNorm.hh
   short/3D/PyLith/trunk/libsrc/problems/
   short/3D/PyLith/trunk/libsrc/problems/Formulation.cc
   short/3D/PyLith/trunk/libsrc/problems/Formulation.hh
   short/3D/PyLith/trunk/libsrc/problems/Makefile.am
   short/3D/PyLith/trunk/libsrc/problems/Solver.hh
   short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh
   short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc
   short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh
   short/3D/PyLith/trunk/libsrc/problems/problemsfwd.hh
   short/3D/PyLith/trunk/libsrc/topology/
   short/3D/PyLith/trunk/libsrc/topology/Distributor.hh
   short/3D/PyLith/trunk/libsrc/topology/Field.hh
   short/3D/PyLith/trunk/libsrc/topology/FieldBase.hh
   short/3D/PyLith/trunk/libsrc/topology/Fields.hh
   short/3D/PyLith/trunk/libsrc/topology/Jacobian.hh
   short/3D/PyLith/trunk/libsrc/topology/Mesh.cc
   short/3D/PyLith/trunk/libsrc/topology/Mesh.hh
   short/3D/PyLith/trunk/libsrc/topology/MeshOps.hh
   short/3D/PyLith/trunk/libsrc/topology/RefineUniform.hh
   short/3D/PyLith/trunk/libsrc/topology/SolutionFields.hh
   short/3D/PyLith/trunk/libsrc/topology/SubMesh.cc
   short/3D/PyLith/trunk/libsrc/topology/SubMesh.hh
   short/3D/PyLith/trunk/libsrc/utils/
   short/3D/PyLith/trunk/libsrc/utils/EventLogger.hh
   short/3D/PyLith/trunk/libsrc/utils/TestArray.hh
   short/3D/PyLith/trunk/libsrc/utils/array.hh
   short/3D/PyLith/trunk/libsrc/utils/arrayfwd.hh
   short/3D/PyLith/trunk/libsrc/utils/constdefs.h
   short/3D/PyLith/trunk/libsrc/utils/lapack.h
   short/3D/PyLith/trunk/libsrc/utils/macrodefs.h
   short/3D/PyLith/trunk/libsrc/utils/petscerror.h
   short/3D/PyLith/trunk/libsrc/utils/petscfwd.h
   short/3D/PyLith/trunk/libsrc/utils/sievefwd.hh
   short/3D/PyLith/trunk/libsrc/utils/sievetypes.hh
   short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDyn.i
   short/3D/PyLith/trunk/modulesrc/faults/Makefile.am
   short/3D/PyLith/trunk/modulesrc/faults/faults.i
   short/3D/PyLith/trunk/modulesrc/feassemble/
   short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticity.i
   short/3D/PyLith/trunk/modulesrc/feassemble/Makefile.am
   short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.i
   short/3D/PyLith/trunk/modulesrc/include/
   short/3D/PyLith/trunk/modulesrc/meshio/DataWriterVTK.i
   short/3D/PyLith/trunk/pylith/
   short/3D/PyLith/trunk/pylith/Makefile.am
   short/3D/PyLith/trunk/pylith/faults/LiuCosSlipFn.py
   short/3D/PyLith/trunk/pylith/feassemble/__init__.py
   short/3D/PyLith/trunk/pylith/meshio/DataWriterVTK.py
   short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKMesh.py
   short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubMesh.py
   short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubSubMesh.py
   short/3D/PyLith/trunk/pylith/tests/PhysicalProperties.py
   short/3D/PyLith/trunk/pylith/tests/Solution.py
   short/3D/PyLith/trunk/pylith/tests/StateVariables.py
   short/3D/PyLith/trunk/pylith/utils/VTKDataReader.py
   short/3D/PyLith/trunk/share/
   short/3D/PyLith/trunk/templates/
   short/3D/PyLith/trunk/tests/
   short/3D/PyLith/trunk/tests/1d/
   short/3D/PyLith/trunk/tests/1d/line2/
   short/3D/PyLith/trunk/tests/1d/line2/TestDislocation.py
   short/3D/PyLith/trunk/tests/1d/line3/
   short/3D/PyLith/trunk/tests/1d/line3/TestDislocation.py
   short/3D/PyLith/trunk/tests/2d/
   short/3D/PyLith/trunk/tests/2d/quad4/
   short/3D/PyLith/trunk/tests/2d/quad4/Makefile.am
   short/3D/PyLith/trunk/tests/2d/quad4/TestDislocation.py
   short/3D/PyLith/trunk/tests/2d/quad4/testpylith.py
   short/3D/PyLith/trunk/tests/2d/tri3/
   short/3D/PyLith/trunk/tests/3dnew/hex8/
   short/3D/PyLith/trunk/tests/Makefile.am
   short/3D/PyLith/trunk/tests/README
   short/3D/PyLith/trunk/tests/petsc/
   short/3D/PyLith/trunk/tests/petsc/Makefile.am
   short/3D/PyLith/trunk/unittests/
   short/3D/PyLith/trunk/unittests/libtests/
   short/3D/PyLith/trunk/unittests/libtests/bc/
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/bc/data/
   short/3D/PyLith/trunk/unittests/libtests/bc/test_bc.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/
   short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/
   short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/feassemble/
   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.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/
   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/ElasticityImplicit.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Mesh1DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py
   short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
   short/3D/PyLith/trunk/unittests/libtests/materials/
   short/3D/PyLith/trunk/unittests/libtests/materials/data/
   short/3D/PyLith/trunk/unittests/libtests/meshio/
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.cc
   short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.hh
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_filter_t12.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_t12.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_t12.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_filter_t12.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_t12.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_vertex_t10.vtk
   short/3D/PyLith/trunk/unittests/libtests/topology/
   short/3D/PyLith/trunk/unittests/libtests/topology/data/
   short/3D/PyLith/trunk/unittests/libtests/utils/
   short/3D/PyLith/trunk/unittests/pytests/
   short/3D/PyLith/trunk/unittests/pytests/bc/
   short/3D/PyLith/trunk/unittests/pytests/bc/data/
   short/3D/PyLith/trunk/unittests/pytests/faults/
   short/3D/PyLith/trunk/unittests/pytests/faults/Makefile.am
   short/3D/PyLith/trunk/unittests/pytests/faults/data/
   short/3D/PyLith/trunk/unittests/pytests/faults/testfaults.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/
   short/3D/PyLith/trunk/unittests/pytests/feassemble/data/
   short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.py
   short/3D/PyLith/trunk/unittests/pytests/materials/
   short/3D/PyLith/trunk/unittests/pytests/materials/data/
   short/3D/PyLith/trunk/unittests/pytests/meshio/
   short/3D/PyLith/trunk/unittests/pytests/meshio/data/
   short/3D/PyLith/trunk/unittests/pytests/mpi/
   short/3D/PyLith/trunk/unittests/pytests/problems/
   short/3D/PyLith/trunk/unittests/pytests/problems/data/
   short/3D/PyLith/trunk/unittests/pytests/topology/
   short/3D/PyLith/trunk/unittests/pytests/topology/data/
   short/3D/PyLith/trunk/unittests/pytests/utils/
Log:
Merged pylith-friction branch with trunk.


Property changes on: short/3D/PyLith/trunk
___________________________________________________________________
Name: svn:ignore
   - Makefile.in
configure
aux-config
portinfo.in
PyLith.egg-info
autom4te.cache
aclocal.m4

   + Makefile.in
configure
aux-config
portinfo.in
PyLith.egg-info
autom4te.cache
aclocal.m4

.cproject

.pydevproject

.project


Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/TODO	2009-12-10 01:52:12 UTC (rev 16094)
@@ -2,6 +2,7 @@
 CURRENT ISSUES/PRIORITIES
 ======================================================================
 
+<<<<<<< .working
 Status?
 
   Field split
@@ -9,7 +10,16 @@
   customized SNES line search
   Laplacian based preconditioner
 
+=======
+Data structure to hold label of fault Lagrange vertices and
+conventional vertices 
+  array of structure (lagrange, positive, negative, fault)
+
+  no mesh queries? Just loops?
+
+>>>>>>> .merge-right.r16093
 ----------------------------------------------------------------------
+<<<<<<< .working
 VISIT TO GNS SCIENCE
 ----------------------------------------------------------------------
 
@@ -53,6 +63,53 @@
 Rewrite bulk constitutive models
 
 ----------------------------------------------------------------------
+=======
+FRICTION
+----------------------------------------------------------------------
+
+Initial tractions
+  Integrate over fault surface (should be current implementation)
+Constitutive model parameters
+  Integrate over faces to get weighted averages
+
+3. pylith::friction::FrictionModel
+  (base class for fault constitutive models) [Brad]
+  similar to Material + ElasticMaterial
+
+4. Constant friction [Surendra]
+  Simplest friction model with constant coefficient of friction
+
+5. SlipWeakening [Surendra]
+  Slip-weakening friction model
+
+6. Other fault constitutive models [Surendra]
+  Rate- and state-friction with aging law
+  Rate- and state-friction with slip law
+
+----------------------------------------------------------------------
+LUMPED SOLVER
+----------------------------------------------------------------------
+
+S (sensitivity matrix) - assume diagonal (check with assert)
+
+Unit tests
+
+  FaultCohesiveKin
+    adjustSolnLumped
+
+  FaultCohesiveDynL
+    integrateJacobian (lumped)
+    adjustSolnLumped
+
+FaultCohesiveDynL (C++)
+  integrateJacobian (lumped)
+  adjustSolnLumped()
+    compute Lagrange multipliers (zero increment of slip)
+    calls constrainSolnSpace()
+    adjust displacements
+
+----------------------------------------------------------------------
+>>>>>>> .merge-right.r16093
 POST RELEASE 1.4
 ----------------------------------------------------------------------
 
@@ -73,7 +130,6 @@
         CellFilterAvg (_fieldAvg)
         VertexFilterVecNorm (_fieldVecNorm)
  
-  TimeHistorySlipFn (final slip, start time)
   full-scale testing
     2d/quad4
       axialtract
@@ -98,9 +154,6 @@
       problems C++, SWIG
       topology C++, SWIG
 
-Student
-      Create a spatial database for the PREM model
-
 1. Savage-Presscott benchmark
     Tet mesh
 
@@ -295,18 +348,6 @@
 ======================================================================
 
 ----------------------------------------------------------------------
-Release 1.4
-----------------------------------------------------------------------
-
-  1. Nonlinear bulk rheologies
-
-     Power-law viscoelastic material
-
-  2. Time dependent BCs
-
-  3. Improved PC for kinematic faults
-
-----------------------------------------------------------------------
 Release 1.5
 ----------------------------------------------------------------------
 
@@ -326,14 +367,6 @@
 
   3. Finite strain
 
-  4. Higher order cells
-
-     Nonisoparametric cells
-
-       C++ unit tests for CellGeometry refPtsToGlobal() and jacobian()
-       Update quadrature to use CellGeometry refPtsToGlobal() and
-       jacobian() Remove CellGeometry jacobian(double_array)
-
   5. Uniform global refinement
 
   6. Improved support for spherical geometry in user-interface
@@ -344,6 +377,14 @@
 
   1. Green's functions
 
+  2. Higher order cells
+
+     Nonisoparametric cells
+
+       C++ unit tests for CellGeometry refPtsToGlobal() and jacobian()
+       Update quadrature to use CellGeometry refPtsToGlobal() and
+       jacobian() Remove CellGeometry jacobian(double_array)
+
 ----------------------------------------------------------------------
 Release 1.7
 ----------------------------------------------------------------------
@@ -358,6 +399,9 @@
 LONG TERM WISH LIST
 ----------------------------------------------------------------------
 
+Student
+      Create a spatial database for the PREM model
+
   4. HDF5 output
 
        HDF5 files


Property changes on: short/3D/PyLith/trunk/applications
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/applications/utilities
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/configure.ac
===================================================================
--- short/3D/PyLith/trunk/configure.ac	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/configure.ac	2009-12-10 01:52:12 UTC (rev 16094)
@@ -284,6 +284,8 @@
 		tests/2d/Makefile
 		tests/2d/tri3/Makefile
 		tests/2d/quad4/Makefile
+		tests/3dnew/hex8/Makefile
+		tests/petsc/Makefile
                 doc/Makefile
 		doc/developer/Makefile
 		doc/install/Makefile


Property changes on: short/3D/PyLith/trunk/doc
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/doc/developer
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/doc/install
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/doc/presentations
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/doc/refguide
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/doc/refguide/doxyconfig
===================================================================
--- short/3D/PyLith/trunk/doc/refguide/doxyconfig	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/doc/refguide/doxyconfig	2009-12-10 01:52:12 UTC (rev 16094)
@@ -23,7 +23,7 @@
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = 1.1
+PROJECT_NUMBER         = 1.4.2
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
@@ -53,16 +53,6 @@
 
 OUTPUT_LANGUAGE        = English
 
-# This tag can be used to specify the encoding used in the generated output. 
-# The encoding is not always determined by the language that is chosen, 
-# but also whether or not the output is meant for Windows or non-Windows users. 
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
-# forces the Windows encoding (this is the default for the Windows binary), 
-# whereas setting the tag to NO uses a Unix-style encoding (the default for 
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING   = NO
-
 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
 # include brief member descriptions after the members that are listed in 
 # the file and class documentation (similar to JavaDoc). 
@@ -70,10 +60,11 @@
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will
+# prepend the brief description of a member or function before the
+# detailed description.  Note: if both HIDE_UNDOC_MEMBERS and
+# BRIEF_MEMBER_DESC are set to NO, the brief descriptions will be
+# completely suppressed.
 
 REPEAT_BRIEF           = YES
 
@@ -115,7 +106,7 @@
 # If left blank the directory from which doxygen is run is used as the 
 # path to strip.
 
-STRIP_FROM_PATH        = ../
+STRIP_FROM_PATH        = ../../
 
 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
 # the path mentioned in the documentation of a class, which tells 
@@ -148,13 +139,6 @@
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 # member inherits the documentation from any documented member that it 
 # re-implements.
@@ -188,19 +172,20 @@
 
 OPTIMIZE_OUTPUT_FOR_C  = NO
 
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for Java. 
-# For instance, namespaces will be presented as packages, qualified scopes 
-# will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of
+# Java sources only. Doxygen will then generate output that is more
+# tailored for Java.  For instance, namespaces will be presented as
+# packages, qualified scopes will look different, etc.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
-# include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also make the inheritance and collaboration 
-# diagrams that involve STL classes more complete and accurate.
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do
+# not want to include (a tag file for) the STL sources as input, then
+# you should set this tag to YES in order to let doxygen match
+# functions declarations and definitions whose arguments contain STL
+# classes (e.g. func(std::string); v.s.  func(std::string) {}). This
+# also make the inheritance and collaboration diagrams that involve
+# STL classes more complete and accurate.
 
 BUILTIN_STL_SUPPORT    = NO
 
@@ -360,12 +345,12 @@
 # disable (NO) the deprecated list. This list is created by putting 
 # \deprecated commands in the documentation.
 
-GENERATE_DEPRECATEDLIST= YES
+GENERATE_DEPRECATEDLIST = YES
 
 # The ENABLED_SECTIONS tag can be used to enable conditional 
 # documentation sections, marked by \if sectionname ... \endif.
 
-ENABLED_SECTIONS       = 
+ENABLED_SECTIONS       = YES
 
 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
 # the initial value of a variable or define consists of for it to appear in 
@@ -383,19 +368,20 @@
 
 SHOW_USED_FILES        = YES
 
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
-# in the documentation. The default is NO.
+# If the sources in your project are distributed over multiple
+# directories then setting the SHOW_DIRECTORIES tag to YES will show
+# the directory hierarchy in the documentation. The default is NO.
 
-SHOW_DIRECTORIES       = NO
+SHOW_DIRECTORIES       = YES
 
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from the 
-# version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
-# is used as the file version. See the manual for examples.
+# The FILE_VERSION_FILTER tag can be used to specify a program or
+# script that doxygen should invoke to get the current version for
+# each file (typically from the version control system). Doxygen will
+# invoke the program by executing (via popen()) the command <command>
+# <input-file>, where <command> is the value of the
+# FILE_VERSION_FILTER tag, and <input-file> is the name of an input
+# file provided by doxygen. Whatever the program writes to standard
+# output is used as the file version. See the manual for examples.
 
 FILE_VERSION_FILTER    = 
 
@@ -433,7 +419,7 @@
 # wrong or incomplete parameter documentation, but not about the absence of 
 # documentation.
 
-WARN_NO_PARAMDOC       = NO
+WARN_NO_PARAMDOC       = YES
 
 # The WARN_FORMAT tag determines the format of the warning messages that 
 # doxygen can produce. The string should contain the $file, $line, and $text 
@@ -454,12 +440,12 @@
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
+# The INPUT tag can be used to specify the files and/or directories
+# that contain documented source files. You may enter file names like
+# "myfile.cpp" or directories like "/usr/src/myproject". Separate the
+# files or directories with spaces.
 
-INPUT                  = ../../
+INPUT                  = ../../libsrc ../../modulesrc ../../pylith
 
 # If the value of the INPUT tag contains directories, you can use the 
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
@@ -514,7 +500,7 @@
 # commands irrespective of the value of the RECURSIVE tag. 
 # Possible values are YES and NO. If left blank NO is used.
 
-EXAMPLE_RECURSIVE      = NO
+EXAMPLE_RECURSIVE      = YES
 
 # The IMAGE_PATH tag can be used to specify one or more files or 
 # directories that contain image that are included in the documentation (see 
@@ -729,7 +715,7 @@
 # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
 # probably better off using the HTML help feature.
 
-GENERATE_TREEVIEW      = NO
+GENERATE_TREEVIEW      = YES
 
 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
 # used to set the initial width (in pixels) of the frame in which the tree 
@@ -1126,7 +1112,7 @@
 # If set to YES, the inheritance and collaboration graphs will show the 
 # relations between templates and their instances.
 
-TEMPLATE_RELATIONS     = NO
+TEMPLATE_RELATIONS     = YES
 
 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
 # tags are set to YES then doxygen will generate a graph for each documented 
@@ -1187,22 +1173,6 @@
 
 DOTFILE_DIRS           = 
 
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_WIDTH    = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT   = 1024
-
 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
 # graphs generated by dot. A depth value of 3 means that only nodes reachable 
 # from the root by following a path via at most 3 edges will be shown. Nodes 


Property changes on: short/3D/PyLith/trunk/doc/releasenotes
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Copied: short/3D/PyLith/trunk/doc/releasenotes/announce_v1.5.0.txt (from rev 16093, short/3D/PyLith/branches/pylith-friction/doc/releasenotes/announce_v1.5.0.txt)
===================================================================
--- short/3D/PyLith/trunk/doc/releasenotes/announce_v1.5.0.txt	                        (rev 0)
+++ short/3D/PyLith/trunk/doc/releasenotes/announce_v1.5.0.txt	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,37 @@
+Greetings,
+
+I am pleased to announce the release of PyLith 1.5.0, a finite-element
+code designed to solve dynamic elastic problems and quasi-static
+viscoelastic problems in tectonic deformation.
+
+This release adds several new features to PyLith, including (1) fault
+friction with several widely-used fault constitutive models, (2) an
+optimized solver for explicit time-stepping with a lumped Jacobian
+sparse matrix, (3) Total Langrangian formulation for large
+deformations, (4) use of scientific notation in VTK output files with
+user-specified precision, (5) ??, (6) ??, and (7) ??. We encourage all
+users of previous PyLith releases to switch to this latest release.
+
+We strongly recommend all users of previous PyLith releases to switch
+to this latest release. Switching from v1.4.0 or v1.4.1 to v1.4.2 only
+requires changes to parameter files when using adaptive time stepping
+with a non-default stability factor (see the release notes below for
+details). See the README file for changes required to switch to the
+v1.4.x release series from previous versions.
+
+You can download the source code and binaries from
+
+    http://geodynamics.org/cig/software/packages/short/pylith
+
+Detailed installation instructions are in the User Manual with example
+installation procedures for a few platforms in the bundled doc/install
+directory.
+
+
+RELEASE NOTES
+
+ *
+
+ * Bug fixes
+
+  - 


Property changes on: short/3D/PyLith/trunk/doc/userguide
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx
===================================================================
--- short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx	2009-12-10 01:52:12 UTC (rev 16094)
@@ -1008,7 +1008,7 @@
 C_{1133} & C_{2233} & C_{3333} & C_{3312} & C_{3323} & C_{3313}\\
 C_{1112} & C_{2212} & C_{3312} & C_{1212} & C_{1223} & C_{1213}\\
 C_{1123} & C_{2223} & C_{3323} & C_{1223} & C_{2323} & C_{2313}\\
-C_{1113} & C_{2213} & C_{3313} & C_{1213} & C_{1223} & C_{1313}\end{array}\right]\:.\label{eq:3}\end{gather}
+C_{1113} & C_{2213} & C_{3313} & C_{1213} & C_{2313} & C_{1313}\end{array}\right]\:.\label{eq:3}\end{gather}
 
 \end_inset
 


Property changes on: short/3D/PyLith/trunk/examples
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/3d
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/3d/hex8
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/3d/tet4
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/hex8
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/hex8/output
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/quad4
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/quad4/output
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/tet4
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/tet4/output
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/tri3
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/bar_shearwave/tri3/output
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/greensfns
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/greensfns/hex8
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/greensfns/hex8/gfimpulses
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/greensfns/hex8/gfresponses
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/twocells
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/twocells/twohex8
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/twocells/twoquad4
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/twocells/twotet4
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/twocells/twotet4-geoproj
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/examples/twocells/twotri3
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/libsrc
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -38,12 +38,14 @@
 	faults/StepSlipFn.cc \
 	faults/ConstRateSlipFn.cc \
 	faults/BruneSlipFn.cc \
+	faults/TimeHistorySlipFn.cc \
 	faults/LiuCosSlipFn.cc \
 	faults/EqKinSrc.cc \
 	faults/TopologyOps.cc \
 	faults/CohesiveTopology.cc \
 	faults/FaultCohesive.cc \
 	faults/FaultCohesiveDyn.cc \
+	faults/FaultCohesiveDynL.cc \
 	faults/FaultCohesiveKin.cc \
 	feassemble/CellGeometry.cc \
 	feassemble/Constraint.cc \
@@ -71,6 +73,9 @@
 	feassemble/IntegratorElasticity.cc \
 	feassemble/ElasticityImplicit.cc \
 	feassemble/ElasticityExplicit.cc \
+	feassemble/IntegratorElasticityLgDeform.cc \
+	feassemble/ElasticityImplicitLgDeform.cc \
+	feassemble/ElasticityExplicitLgDeform.cc \
 	materials/Metadata.cc \
 	materials/Material.cc \
 	materials/ElasticMaterial.cc \
@@ -101,6 +106,7 @@
 	problems/Solver.cc \
 	problems/SolverLinear.cc \
 	problems/SolverNonlinear.cc \
+	problems/SolverLumped.cc \
 	topology/FieldBase.cc \
 	topology/Jacobian.cc \
 	topology/Mesh.cc \


Property changes on: short/3D/PyLith/trunk/libsrc/bc
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -480,6 +480,116 @@
 } // integrateJacobian
 
 // ----------------------------------------------------------------------
+// Integrate contributions to Jacobian matrix (A) associated with
+void
+pylith::bc::AbsorbingDampers::integrateJacobian(
+			      const topology::Field<topology::Mesh>& jacobian,
+			      const double t,
+			      topology::SolutionFields* const fields)
+{ // integrateJacobian
+  assert(0 != _quadrature);
+  assert(0 != _boundaryMesh);
+  assert(0 != fields);
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+
+  // Get cell information
+  const ALE::Obj<SieveSubMesh>& sieveSubMesh = _boundaryMesh->sieveMesh();
+  assert(!sieveSubMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+    sieveSubMesh->heightStratum(1);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get parameters used in integration.
+  const double dt = _dt;
+  assert(dt > 0);
+
+  // Allocate matrix for cell values.
+  _initCellMatrix();
+  _initCellVector();
+
+  // Get sections
+  const ALE::Obj<SubRealSection>& dampersSection =
+    _parameters->get("damping constants").section();
+  assert(!dampersSection.isNull());
+
+  const topology::Field<topology::Mesh>& solution = fields->solution();
+  const ALE::Obj<SieveMesh>& sieveMesh = solution.mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<RealSection>& solutionSection = solution.section();
+  assert(!solutionSection.isNull());
+
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  assert(!jacobianSection.isNull());
+  topology::Mesh::UpdateAddVisitor jacobianVisitor(*jacobianSection, 
+						   &_cellVector[0]);
+
+#if !defined(PRECOMPUTE_GEOMETRY)
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveSubMesh->getRealSection("coordinates");
+  RestrictVisitor coordsVisitor(*coordinates,
+				coordinatesCell.size(), &coordinatesCell[0]);
+#endif
+
+  for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveSubMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+
+    // Reset element vector to zero
+    _resetCellMatrix();
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    assert(numQuadPts*spaceDim == dampersSection->getFiberDimension(*c_iter));
+    const double* dampingConstsCell = dampersSection->restrictPoint(*c_iter);
+
+    // Compute Jacobian for absorbing bc terms
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = 
+	quadWts[iQuad] * jacobianDet[iQuad] / (2.0 * dt);
+      for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+        const double valI = wt*basis[iQ+iBasis];
+        for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+          const double valIJ = valI * basis[iQ+jBasis];
+          for (int iDim=0; iDim < spaceDim; ++iDim) {
+            const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
+            const int jBlock = (jBasis*spaceDim + iDim);
+            _cellMatrix[iBlock+jBlock] += 
+	      valIJ * dampingConstsCell[iQuad*spaceDim+iDim];
+          } // for
+        } // for
+      } // for
+    } // for
+    PetscLogFlops(numQuadPts*(3+numBasis*(1+numBasis*(1+2*spaceDim))));
+    _lumpCellMatrix();
+    
+    // Assemble cell contribution into lumped matrix.
+    jacobianVisitor.clear();
+    sieveSubMesh->updateClosure(*c_iter, jacobianVisitor);
+  } // for
+
+  _needNewJacobian = false;
+} // integrateJacobian
+
+// ----------------------------------------------------------------------
 // Verify configuration is acceptable.
 void
 pylith::bc::AbsorbingDampers::verifyConfiguration(const topology::Mesh& mesh) const

Modified: short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/AbsorbingDampers.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -54,6 +54,7 @@
 #include "BCIntegratorSubMesh.hh" // ISA BCIntegratorSubMesh
 
 // AbsorbingDampers ------------------------------------------------------
+/// Absorbing boundary with simple dampers.
 class pylith::bc::AbsorbingDampers : public BCIntegratorSubMesh
 { // class AbsorbingDampers
   friend class TestAbsorbingDampers; // unit testing
@@ -106,6 +107,17 @@
 			 const double t,
 			 topology::SolutionFields* const fields);
 
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator.
+   *
+   * @param jacobian Jacobian of system.
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateJacobian(const topology::Field<topology::Mesh>& jacobian,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
   /** Verify configuration is acceptable.
    *
    * @param mesh Finite-element mesh

Modified: short/3D/PyLith/trunk/libsrc/bc/BCIntegratorSubMesh.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/BCIntegratorSubMesh.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/BCIntegratorSubMesh.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,8 @@
 #include "pylith/feassemble/Integrator.hh" // ISA Integrator
 
 // BCIntegratorSubMesh ----------------------------------------------
+/// @brief Abstract base classs for BoundaryCondition object with
+/// boundary condition applied at a simple-connect surface (submesh).
 class pylith::bc::BCIntegratorSubMesh : public BoundaryCondition,
       public feassemble::Integrator<feassemble::Quadrature<topology::SubMesh> >
 { // class BCIntegratorSubMesh

Modified: short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/BoundaryCondition.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
 #include <string> // HASA std::string
 
 // BoundaryCondition ----------------------------------------------------
+/// Abstract base class for boundary conditions.
 class pylith::bc::BoundaryCondition
 { // class BoundaryCondition
   friend class TestBoundaryCondition; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -67,13 +67,14 @@
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   assert(!sieveMesh.isNull());
 
-  const ALE::Obj<SieveMesh::int_section_type>& groupField = 
-    sieveMesh->getIntSection(_label);
-  if (groupField.isNull()) {
+  if (!sieveMesh->hasIntSection(_label)) {
     std::ostringstream msg;
     msg << "Could not find group of points '" << _label << "' in mesh.";
     throw std::runtime_error(msg.str());
   } // if
+
+  const ALE::Obj<SieveMesh::int_section_type>& groupField = 
+    sieveMesh->getIntSection(_label);
   assert(!groupField.isNull());
   const chart_type& chart = groupField->getChart();
   const chart_type::const_iterator& chartEnd = chart.end();

Modified: short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/BoundaryConditionPoints.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -27,6 +27,9 @@
 #include "pylith/utils/array.hh" // HASA int_array
 
 // BoundaryConditionPoints ----------------------------------------------
+/** @brief C++ abstract base class for BoundaryCondition object with
+ * boundary condition applied at a set of points.
+ */
 class pylith::bc::BoundaryConditionPoints : public BoundaryCondition
 { // class BoundaryCondition
   friend class TestBoundaryConditionPoints; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/bc/DirichletBC.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/DirichletBC.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/DirichletBC.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -26,6 +26,8 @@
 #include "pylith/utils/array.hh" // HASA int_array
 
 // DirichletBC ------------------------------------------------------
+/// @brief Dirichlet (prescribed values at degrees of freedom) boundary
+/// conditions with a set of points.
 class pylith::bc::DirichletBC : public TimeDependentPoints, 
 				public feassemble::Constraint
 { // class DirichletBC

Modified: short/3D/PyLith/trunk/libsrc/bc/DirichletBoundary.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/DirichletBoundary.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/DirichletBoundary.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -23,6 +23,8 @@
 #include "DirichletBC.hh" // ISA DirichletBC
 
 // DirichletBoundary ----------------------------------------------------
+/// @brief Dirichlet (prescribed values at degrees of freedom) boundary
+/// conditions with points on a boundary.
 class pylith::bc::DirichletBoundary : public DirichletBC
 { // class DirichletBoundary
   friend class TestDirichletBoundary; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/bc/Neumann.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/Neumann.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/Neumann.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -165,16 +165,6 @@
 } // integrateResidual
 
 // ----------------------------------------------------------------------
-// Integrate contributions to Jacobian matrix (A) associated with
-void
-pylith::bc::Neumann::integrateJacobian(topology::Jacobian* jacobian,
-					   const double t,
-					   topology::SolutionFields* const fields)
-{ // integrateJacobian
-  _needNewJacobian = false;
-} // integrateJacobian
-
-// ----------------------------------------------------------------------
 // Verify configuration is acceptable.
 void
 pylith::bc::Neumann::verifyConfiguration(const topology::Mesh& mesh) const

Modified: short/3D/PyLith/trunk/libsrc/bc/Neumann.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/Neumann.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/Neumann.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -24,8 +24,10 @@
 #include "TimeDependent.hh" // ISA TimeDependent
 
 // Neumann ------------------------------------------------------
+/// @brief Time dependent Neumann (traction) boundary conditions
+/// applied to a simply-connected boundary.
 class pylith::bc::Neumann : public BCIntegratorSubMesh, 
-				public TimeDependent
+			    public TimeDependent
 { // class Neumann
   friend class TestNeumann; // unit testing
 
@@ -60,17 +62,6 @@
 			 const double t,
 			 topology::SolutionFields* const fields);
 
-  /** Integrate contributions to Jacobian matrix (A) associated with
-   * operator.
-   *
-   * @param jacobian Sparse matrix for Jacobian of system.
-   * @param t Current time
-   * @param fields Solution fields
-   */
-  void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
-			 topology::SolutionFields* const fields);
-
   /** Verify configuration is acceptable.
    *
    * @param mesh Finite-element mesh

Modified: short/3D/PyLith/trunk/libsrc/bc/PointForce.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/PointForce.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/PointForce.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -25,6 +25,7 @@
 #include "pylith/feassemble/Integrator.hh" // ISA Integrator
 
 // PointForce ------------------------------------------------------
+/// Point forces applied at vertices.
 class pylith::bc::PointForce : public TimeDependentPoints,
 			       public feassemble::Integrator<feassemble::Quadrature<topology::Mesh> >
 { // class PointForce

Modified: short/3D/PyLith/trunk/libsrc/bc/TimeDependent.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/TimeDependent.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/TimeDependent.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -12,7 +12,8 @@
 
 /** @file libsrc/bc/TimeDependent.hh
  *
- * @brief C++ implementation of point force on vertices.
+ * @brief C++ Abstract base class for time-dependent boundary
+ * conditions.
  */
 
 #if !defined(pylith_bc_timedependent_hh)
@@ -27,6 +28,7 @@
 #include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
 
 // TimeDependent ------------------------------------------------------
+/// Abstract base class for time-dependent boundary conditions.
 class pylith::bc::TimeDependent
 { // class TimeDependent
   friend class TestTimeDependent; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/bc/TimeDependentPoints.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/bc/TimeDependentPoints.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/bc/TimeDependentPoints.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -26,6 +26,7 @@
 #include "pylith/utils/array.hh" // HASA int_array
 
 // TimeDependentPoints ------------------------------------------------------
+/// Time dependent boundary conditions applied to a set of vertices.
 class pylith::bc::TimeDependentPoints : public BoundaryConditionPoints, 
 					public TimeDependent
 { // class TimeDependentPoints


Property changes on: short/3D/PyLith/trunk/libsrc/faults
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,12 +13,6 @@
 /** @file libsrc/faults/BruneSlipFn.hh
  *
  * @brief C++ implementation of Brune slip time function.
- *
- * Slip time function follows the integral of Brune's (1970) far-field
- * time function.
- *
- * Normalize slip = 1 - exp(-t/tau)(1 + t/tau),
- * where tau = finalSlip / (exp(1.0) * peakRate)
  */
 
 #if !defined(pylith_faults_bruneslipfn_hh)
@@ -32,6 +26,14 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // BruneSlipFn ----------------------------------------------------------
+/** @brief Brune slip-time function.
+ *
+ * Slip time function follows the integral of Brune's (1970) far-field
+ * time function.
+ *
+ * Normalize slip = 1 - exp(-t/tau)(1 + t/tau),
+ * where tau = finalSlip / (exp(1.0) * peakRate)
+ */
 class pylith::faults::BruneSlipFn : public SlipTimeFn
 { // class BruneSlipFn
   friend class TestBruneSlipFn; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/CohesiveTopology.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -25,6 +25,7 @@
 #include "pylith/utils/sievetypes.hh" // USE ALE::Obj
 
 // CohesiveTopology -----------------------------------------------------
+/// Creation of cohesive cells.
 class pylith::faults::CohesiveTopology
 { // class CohesiveTopology
 
@@ -39,8 +40,10 @@
    * @param faultMesh Finite-element mesh of fault (output).
    * @param faultBoundary Finite-element mesh of fault boundary (output).
    * @param mesh Finite-element mesh of domain.
-   * @param faultVertices Vertices assocated with faces of cells defining 
-   *   fault surface
+   * @param groupdField Group of vertices assocated with faces of
+   *   cells defining fault surface
+   * @param flipFault Flag indicating to flip positive/negative sides
+   * of the fault.
    */
   static
   void createFault(topology::SubMesh* faultMesh,

Modified: short/3D/PyLith/trunk/libsrc/faults/ConstRateSlipFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/ConstRateSlipFn.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/ConstRateSlipFn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,11 +13,6 @@
 /** @file libsrc/faults/ConstRateSlipFn.hh
  *
  * @brief C++ implementation of a constant slip rate slip time function.
- *
- * Slip time function follows the integral of constant slip rate slip
- * time function.
- *
- * Normalized slip = sliprate * (t - t0)
  */
 
 #if !defined(pylith_faults_constrateslipfn_hh)
@@ -31,6 +26,13 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // ConstRateTimeFn ------------------------------------------------------
+/** @brief Constant slip rate slip-time function.
+ *
+ * Slip time function follows the integral of constant slip rate slip
+ * time function.
+ *
+ * Normalized slip = sliprate * (t - t0)
+ */
 class pylith::faults::ConstRateSlipFn : public SlipTimeFn
 { // class ConstRateSlipFn
   friend class TestConstRateSlipFn; // unit testing
@@ -63,7 +65,6 @@
   /** Initialize slip time function.
    *
    * @param faultMesh Finite-element mesh of fault.
-   * @param cs Coordinate system for mesh
    * @param normalizer Nondimensionalization of scales.
    * @param originTime Origin time for earthquake source.
    */

Modified: short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/EqKinSrc.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,9 +14,6 @@
  *
  * @brief C++ object for managing parameters for a kinematic
  * earthquake source.
- *
- * EqKinSrc is responsible for providing the value of slip at time t
- * over a fault surface.
  */
 
 #if !defined(pylith_faults_eqkinsrc_hh)
@@ -30,6 +27,11 @@
 #include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
 
 // EqKinSrc -------------------------------------------------------------
+/** @brief Kinematic earthquake source.
+ *
+ * EqKinSrc is responsible for providing the value of slip at time t
+ * over a fault surface.
+ */
 class pylith::faults::EqKinSrc
 { // class EqKinSrc
   friend class TestEqKinSrc; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/faults/Fault.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/Fault.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/Fault.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -12,13 +12,6 @@
 
 /** @file libsrc/faults/Fault.hh
  *
- * @brief C++ abstract base class for Fault object.
- *
- * Interface definition for fault.
- *
- * The fault id is associated with the material-id for the fault and
- * the label is associated with the group of vertices that define the
- * fault surface.
  */
 
 #if !defined(pylith_faults_fault_hh)
@@ -35,6 +28,15 @@
 #include <string> // HASA std::string
 
 // Fault ----------------------------------------------------------------
+/**
+ * @brief C++ abstract base class for Fault object.
+ *
+ * Interface definition for fault.
+ *
+ * The fault id is associated with the material-id for the fault and
+ * the label is associated with the group of vertices that define the
+ * fault surface.
+ */
 class pylith::faults::Fault
 { // class Fault
   friend class TestFault; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -162,289 +162,5 @@
   } // if/else
 } // adjustTopology
 
-// ----------------------------------------------------------------------
-// Calculate orientation at fault vertices.
-void
-pylith::faults::FaultCohesive::_calcOrientation(const double upDir[3],
-						   const double normalDir[3])
-{ // _calcOrientation
-  assert(0 != upDir);
-  assert(0 != normalDir);
-  assert(0 != _faultMesh);
-  assert(0 != _fields);
 
-  double_array upDirArray(upDir, 3);
-
-  // Get vertices in fault mesh.
-  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
-  assert(!faultSieveMesh.isNull());
-  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
-    faultSieveMesh->depthStratum(0);
-  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
-  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
-  
-  // Containers for orientation information.
-  const int cohesiveDim = _faultMesh->dimension();
-  const int numBasis = _quadrature->numBasis();
-  const int spaceDim = _quadrature->spaceDim();
-  const int orientationSize = spaceDim*spaceDim;
-  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
-  const double_array& verticesRef = cellGeometry.vertices();
-  const int jacobianSize = (cohesiveDim > 0) ? spaceDim * cohesiveDim : 1;
-  const double_array& quadWts = _quadrature->quadWts();
-  double_array jacobian(jacobianSize);
-  double jacobianDet = 0;
-  double_array orientationVertex(orientationSize);
-  double_array coordinatesCell(numBasis*spaceDim);
-  double_array refCoordsVertex(cohesiveDim);
-
-  // Allocate orientation field.
-  _fields->add("orientation", "orientation");
-  topology::Field<topology::SubMesh>& orientation = _fields->get("orientation");
-  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  orientation.newSection(slip, orientationSize);
-  const ALE::Obj<RealSection>& orientationSection = orientation.section();
-  assert(!orientationSection.isNull());
-  // Create subspaces for along-strike, up-dip, and normal directions
-  for (int iDim=0; iDim <= cohesiveDim; ++iDim)
-    orientationSection->addSpace();
-  for (int iDim=0; iDim <= cohesiveDim; ++iDim)
-    orientationSection->setFiberDimension(vertices, spaceDim, iDim);
-  orientation.allocate();
-  orientation.zero();
-  
-  // Get fault cells.
-  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
-    faultSieveMesh->heightStratum(0);
-  assert(!cells.isNull());
-  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
-  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
-
-  // Compute orientation of fault at constraint vertices
-
-  // Get section containing coordinates of vertices
-  const ALE::Obj<RealSection>& coordinatesSection = 
-    faultSieveMesh->getRealSection("coordinates");
-  assert(!coordinatesSection.isNull());
-  topology::Mesh::RestrictVisitor coordinatesVisitor(*coordinatesSection,
-						     coordinatesCell.size(),
-						     &coordinatesCell[0]);
-
-  // Set orientation function
-  assert(cohesiveDim == _quadrature->cellDim());
-  assert(spaceDim == _quadrature->spaceDim());
-
-  // Loop over cohesive cells, computing orientation weighted by
-  // jacobian at constraint vertices
-  
-  const ALE::Obj<SieveSubMesh::sieve_type>& sieve = faultSieveMesh->getSieve();
-  assert(!sieve.isNull());
-  typedef ALE::SieveAlg<SieveSubMesh> SieveAlg;
-
-  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve, (size_t) pow(sieve->getMaxConeSize(), std::max(0, faultSieveMesh->depth())));
-
-  for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
-       c_iter != cellsEnd;
-       ++c_iter) {
-    // Get orientations at fault cell's vertices.
-    coordinatesVisitor.clear();
-    faultSieveMesh->restrictClosure(*c_iter, coordinatesVisitor);
-
-    ncV.clear();
-    ALE::ISieveTraversal<SieveSubMesh::sieve_type>::orientedClosure(*sieve, *c_iter, ncV);
-    const int               coneSize = ncV.getSize();
-    const Mesh::point_type *cone     = ncV.getPoints();
-    
-    for (int v=0; v < coneSize; ++v) {
-      // Compute Jacobian and determinant of Jacobian at vertex
-      memcpy(&refCoordsVertex[0], &verticesRef[v*cohesiveDim],
-	     cohesiveDim*sizeof(double));
-      cellGeometry.jacobian(&jacobian, &jacobianDet, coordinatesCell,
-			    refCoordsVertex);
-
-      // Compute orientation
-      cellGeometry.orientation(&orientationVertex, jacobian, jacobianDet, 
-			       upDirArray);
-      
-      // Update orientation
-      orientationSection->updateAddPoint(cone[v], &orientationVertex[0]);
-    } // for
-  } // for
-
-  //orientation.view("ORIENTATION BEFORE COMPLETE");
-
-  // Assemble orientation information
-  orientation.complete();
-
-  // Loop over vertices, make orientation information unit magnitude
-  double_array vertexDir(orientationSize);
-  int count = 0;
-  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
-       v_iter != verticesEnd;
-       ++v_iter, ++count) {
-    orientationVertex = 0.0;
-    orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
-				      orientationVertex.size());
-    for (int iDim=0; iDim < spaceDim; ++iDim) {
-      double mag = 0;
-      for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
-	mag += pow(orientationVertex[index+jDim],2);
-      mag = sqrt(mag);
-      assert(mag > 0.0);
-      for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
-	orientationVertex[index+jDim] /= mag;
-    } // for
-
-    orientationSection->updatePoint(*v_iter, &orientationVertex[0]);
-  } // for
-  PetscLogFlops(count * orientationSize * 4);
-
-  if (2 == cohesiveDim && vertices->size() > 0) {
-    // Check orientation of first vertex, if dot product of fault
-    // normal with preferred normal is negative, flip up/down dip
-    // direction.
-    //
-    // If the user gives the correct normal direction (points from
-    // footwall to ahanging wall), we should end up with
-    // left-lateral-slip, reverse-slip, and fault-opening for positive
-    // slip values.
-    //
-    // When we flip the up/down dip direction, we create a left-handed
-    // strike/dip/normal coordinate system, but it gives the correct
-    // sense of slip. In reality the strike/dip/normal directions that
-    // are used are the opposite of what we would want, but we cannot
-    // flip the fault normal direction because it is tied to how the
-    // cohesive cells are created.
-    
-    assert(vertices->size() > 0);
-    orientationSection->restrictPoint(*vertices->begin(), &orientationVertex[0],
-				      orientationVertex.size());
-				      
-    assert(3 == spaceDim);
-    double_array normalDirVertex(&orientationVertex[6], 3);
-    const double normalDot = 
-      normalDir[0]*normalDirVertex[0] +
-      normalDir[1]*normalDirVertex[1] +
-      normalDir[2]*normalDirVertex[2];
-    
-    const int istrike = 0;
-    const int idip = 3;
-    const int inormal = 6;
-    if (normalDot < 0.0) {
-      // Flip dip direction
-      for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
-	   v_iter != verticesEnd;
-	   ++v_iter) {
-	orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
-					  orientationVertex.size());
-	assert(9 == orientationSection->getFiberDimension(*v_iter));
-	for (int iDim=0; iDim < 3; ++iDim) // flip dip
-	  orientationVertex[idip+iDim] *= -1.0;
-	
-	// Update direction
-	orientationSection->updatePoint(*v_iter, &orientationVertex[0]);
-      } // for
-      PetscLogFlops(5 + count * 3);
-    } // if
-  } // if
-
-  //orientation.view("ORIENTATION");
-} // _calcOrientation
-
-// ----------------------------------------------------------------------
-void
-pylith::faults::FaultCohesive::_calcArea(void)
-{ // _calcArea
-  assert(0 != _faultMesh);
-  assert(0 != _fields);
-
-  // Containers for area information
-  const int cellDim = _quadrature->cellDim();
-  const int numBasis = _quadrature->numBasis();
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int spaceDim = _quadrature->spaceDim();
-  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
-  const double_array& quadWts = _quadrature->quadWts();
-  assert(quadWts.size() == numQuadPts);
-  double jacobianDet = 0;
-  double_array areaCell(numBasis);
-
-  // Get vertices in fault mesh.
-  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
-  assert(!faultSieveMesh.isNull());
-  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
-    faultSieveMesh->depthStratum(0);
-  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
-  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
-  
-  // Allocate area field.
-  _fields->add("area", "area");
-
-  topology::Field<topology::SubMesh>& area = _fields->get("area");
-  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  area.newSection(slip, 1);
-  area.allocate();
-  area.zero();
-  const ALE::Obj<RealSection>& areaSection = area.section();
-  assert(!areaSection.isNull());
-  topology::Mesh::UpdateAddVisitor areaVisitor(*areaSection, &areaCell[0]);  
-  
-  double_array coordinatesCell(numBasis*spaceDim);
-  const ALE::Obj<RealSection>& coordinates = 
-    faultSieveMesh->getRealSection("coordinates");
-  assert(!coordinates.isNull());
-  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
-						coordinatesCell.size(),
-						&coordinatesCell[0]);
-
-  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
-    faultSieveMesh->heightStratum(0);
-  assert(!cells.isNull());
-  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
-  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
-
-  // Loop over cells in fault mesh, compute area
-  for (SieveSubMesh::label_sequence::iterator c_iter = cellsBegin;
-      c_iter != cellsEnd;
-      ++c_iter) {
-    areaCell = 0.0;
-    
-    // Compute geometry information for current cell
-#if defined(PRECOMPUTE_GEOMETRY)
-    _quadrature->retrieveGeometry(*c_iter);
-#else
-    coordsVisitor.clear();
-    faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    _quadrature->computeGeometry(coordinatesCell, *c_iter);
-#endif
-
-    // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-
-    // Compute area
-    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-        const double dArea = wt*basis[iQuad*numBasis+iBasis];
-	areaCell[iBasis] += dArea;
-      } // for
-    } // for
-    areaVisitor.clear();
-    faultSieveMesh->updateClosure(*c_iter, areaVisitor);
-
-    PetscLogFlops( numQuadPts*(1+numBasis*2) );
-  } // for
-
-  // Assemble area information
-  area.complete();
-
-#if 0 // DEBUGGING
-  area.view("AREA");
-  //_faultMesh->getSendOverlap()->view("Send fault overlap");
-  //_faultMesh->getRecvOverlap()->view("Receive fault overlap");
-#endif
-} // _calcArea
-
-
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesive.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -28,6 +28,7 @@
 #include "pylith/feassemble/Integrator.hh" // ISA Integrator
 
 // FaultCohesive --------------------------------------------------------
+/// Absract base class for fault surface implemented with cohesive cells.
 class pylith::faults::FaultCohesive : public Fault,
 				      public feassemble::Integrator<feassemble::Quadrature<topology::SubMesh> >
 { // class FaultCohesive
@@ -95,24 +96,6 @@
   virtual
   bool useLagrangeConstraints(void) const = 0;
 
-  // PROTECTED METHODS //////////////////////////////////////////////////
-protected :
-
-  /** Calculate orientation at fault vertices.
-   *
-   * @param upDir Direction perpendicular to along-strike direction that is 
-   *   not collinear with fault normal (usually "up" direction but could 
-   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
-   * @param normalDir General preferred direction for fault normal
-   *   (used to pick which of two possible normal directions for
-   *   interface; only applies to fault surfaces in a 3-D domain).
-   */
-  void _calcOrientation(const double upDir[3],
-			const double normalDir[3]);
-
-  /// Calculate fault area field.
-  void _calcArea(void);
-
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,17 +13,22 @@
 #include <portinfo>
 
 #include "FaultCohesiveDyn.hh" // implementation of object methods
-
+#include "CohesiveTopology.hh" // USES CohesiveTopology
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include <cassert> // USES assert()
 #include <sstream> // USES std::ostringstream
 #include <stdexcept> // USES std::runtime_error
-
 // ----------------------------------------------------------------------
+typedef pylith::topology::SubMesh::SieveMesh SieveSubMesh;
+typedef pylith::topology::SubMesh::RealSection SubRealSection;
+typedef pylith::topology::Mesh::RealSection RealSection;
+typedef pylith::topology::Mesh::RestrictVisitor RestrictVisitor;
 typedef pylith::topology::Mesh::SieveMesh SieveMesh;
 
 // ----------------------------------------------------------------------
 // Default constructor.
-pylith::faults::FaultCohesiveDyn::FaultCohesiveDyn(void)
+pylith::faults::FaultCohesiveDyn::FaultCohesiveDyn(void) : 
+  _dbInitial(0)
 { // constructor
 } // constructor
 
@@ -40,16 +45,48 @@
 pylith::faults::FaultCohesiveDyn::deallocate(void)
 { // deallocate
   FaultCohesive::deallocate();
+
+  _dbInitial = 0; // :TODO: Use shared pointer
 } // deallocate
-  
+
 // ----------------------------------------------------------------------
+// Sets the spatial database for the inital tractions
+void pylith::faults::FaultCohesiveDyn::dbInitial(spatialdata::spatialdb::SpatialDB* dbs)
+{ // dbInitial
+  _dbInitial = dbs;
+} // dbInitial
+
+// ----------------------------------------------------------------------
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveDyn::initialize(const topology::Mesh& mesh,
 					     const double upDir[3],
 					     const double normalDir[3])
 { // initialize
-  throw std::logic_error("FaultCohesiveDyn::initialize() not implemented.");
+  assert(0 != upDir);
+  assert(0 != normalDir);
+  assert(0 != _quadrature);
+
+  delete _faultMesh; _faultMesh = new topology::SubMesh();
+  CohesiveTopology::createFaultParallel(_faultMesh, &_cohesiveToFault, 
+					mesh, id(), useLagrangeConstraints());
+
+  // Reset fields.
+  delete _fields; 
+  _fields = 
+    new topology::Fields<topology::Field<topology::SubMesh> >(*_faultMesh);
+
+  // Initialize quadrature geometry.
+  _quadrature->initializeGeometry();
+
+  // Compute orientation at quadrature points in fault mesh.
+  _calcOrientation(upDir, normalDir);
+
+  // Get initial tractions using a spatial database.
+  _getInitialTractions();
+  
+  // Setup fault constitutive model.
+  _initConstitutiveModel();
 } // initialize
 
 // ----------------------------------------------------------------------
@@ -60,7 +97,330 @@
 			   const double t,
 			   topology::SolutionFields* const fields)
 { // integrateResidual
-  throw std::logic_error("FaultCohesiveDyn::integrateResidual() not implemented.");
+  assert(0 != _quadrature);
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+
+  // debugging
+  residual.view("RESIDUAL BEFORE FRICTION");
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int numCornersCohesive = 2*numBasis;
+  const int orientationSize = spaceDim*spaceDim;
+
+  // Get cohesive cells.
+  const ALE::Obj<SieveMesh>& sieveMesh = residual.mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& cellsCohesive = 
+    sieveMesh->getLabelStratum("material-id", id());
+  assert(!cellsCohesive.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cellsCohesive->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cellsCohesive->end();
+
+  // Get fault mesh.
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  // Get sections.
+
+  // Get residual.
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  assert(!residualSection.isNull());
+  double_array residualCell(numCornersCohesive*spaceDim);
+  topology::Mesh::UpdateAddVisitor residualVisitor(*residualSection,
+						   &residualCell[0]);
+  double_array forcesCurrentCell(numCornersCohesive*spaceDim);
+  RestrictVisitor forcesCurrentVisitor(*residualSection,
+				       forcesCurrentCell.size(), &forcesCurrentCell[0]);
+  
+  // Get displacements.
+  double_array dispCell(numCornersCohesive*spaceDim);
+  const ALE::Obj<RealSection>& dispSection = fields->get("disp(t)").section();
+  assert(!dispSection.isNull());
+  RestrictVisitor dispVisitor(*dispSection,
+			      dispCell.size(), &dispCell[0]);
+  double_array dispIncrCell(numCornersCohesive*spaceDim);
+  const ALE::Obj<RealSection>& dispIncrSection = fields->get("dispIncr(t->t+dt)").section();
+  assert(!dispIncrSection.isNull());
+  RestrictVisitor dispIncrVisitor(*dispIncrSection,
+				  dispIncrCell.size(), &dispIncrCell[0]);
+  double_array dispTpdtCell(numCornersCohesive*spaceDim);
+  
+  // Get initial tractions (if exist).
+  double_array tractionInitialFault(numQuadPts*spaceDim);
+  const ALE::Obj<RealSection>& tractionInitialSection = (0 != _dbInitial) ?
+    _fields->get("initial traction").section() : 0;
+
+  // Get orientation.
+  double_array orientationCell(numQuadPts*orientationSize);
+  const ALE::Obj<RealSection>& orientationSection = _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
+  // Values defined at quadrature points.
+  double_array tractionsCurrentCell(numQuadPts*spaceDim);
+  double_array tractionCell(numQuadPts*spaceDim); // friction
+  double_array slip(spaceDim); // slip at quad pt
+  double_array tractionsCurrentFault(spaceDim); // current tractions at quad pt
+  double_array tractionFault(spaceDim); // friction at quad pt
+
+#if !defined(PRECOMPUTE_GEOMETRY)
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    faultSieveMesh->getRealSection("coordinates");
+  RestrictVisitor coordsVisitor(*coordinates,
+				coordinatesCell.size(), &coordinatesCell[0]);
+#endif
+
+  // Loop over faces and integrate contribution from each face
+  for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
+    residualCell = 0.0;
+
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, c_fault);
+#endif
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Get displacements at vertices of cohesive cell.
+    dispVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispVisitor);
+    dispIncrVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispIncrVisitor);
+
+    // Compute current estimate of displacement at time t+dt using
+    // solution increment.
+    dispTpdtCell = dispCell + dispIncrCell;
+
+    // Get current forces at vertices of cohesive cell (current residual).
+    forcesCurrentVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, forcesCurrentVisitor);
+
+    // Get initial tractions for fault cell.
+    if (0 != _dbInitial) {
+      assert(!tractionInitialSection.isNull());
+      tractionInitialSection->restrictPoint(c_fault, &tractionInitialFault[0],
+					    tractionInitialFault.size());
+    } // if
+
+    // Get fault orientation at quadrature points.
+    orientationSection->restrictPoint(c_fault, &orientationCell[0],
+				      orientationCell.size());
+
+    tractionCell = 0.0;
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      // wt is also area associated with quadrature point
+      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+
+      // Compute slip at current quad pt in global coordinate system.
+      // In: dispTpdtCell [2*numBasis*spaceDim] (negative side then positive side??)
+      //     basis [numQuadpts*numBasis]
+      // Out: slipGlobal [spaceDim]
+      // Use basis functions to compute displacement at quadrature point and
+      // then difference displacements to get slip.
+      // ADD STUFF HERE
+      double_array dispQuadPt(spaceDim*2);
+      double_array slipGlobal(spaceDim);
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+	for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	  dispQuadPt[iSpace] += basis[iQuad*numBasis+iBasis]
+	    *dispTpdtCell[iBasis*spaceDim+iSpace];
+	  dispQuadPt[spaceDim+iSpace] += basis[iQuad*numBasis+iBasis]
+	    *dispTpdtCell[(iBasis+numBasis)*spaceDim+iSpace];
+	}
+      }
+      for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	slipGlobal[iSpace] = dispQuadPt[spaceDim+iSpace]
+	  -dispQuadPt[iSpace];
+      }
+	 
+      // Compute slip in fault orientation.
+      // In: slipGlobal [spaceDim]
+      //     orientationCell [numQuadPts*spaceDim*spaceDim, iQuadPt*spaceDim*spaceDim+iDim*spaceDim+jDim]
+      // Out: slipFault [spaceDim]
+      // Use orientation to rotate from global to fault orientation.
+      // ADD STUFF HERE
+      double_array slipFault(spaceDim);
+      for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	for (int jSpace=0; jSpace < spaceDim; ++jSpace) {
+	  slipFault[iSpace] += slipGlobal[jSpace]
+	    *orientationCell[iQuad*spaceDim*spaceDim+iSpace*spaceDim+jSpace];
+	}
+      }
+	       
+
+      // Compute traction from current deformation in global coordinate system. (tractionCurrentGlobal)
+      // In: forcesCurrentCell [2*numBasis*spaceDim] (negative side then positive side)
+      // Out: tractionCurrentGlobal [spaceDim]
+      // Use basis functions to compute forces at quadrature point, then difference to get relative forces,
+      // and divide by area to get traction vector.
+      // ADD STUFF HERE
+      double_array forcesQuadPt(2*spaceDim);
+      double_array tractionCurrentGlobal(spaceDim);
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+	for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	  forcesQuadPt[iSpace] += basis[iQuad*numBasis+iBasis]
+	    *forcesCurrentCell[iBasis*spaceDim+iSpace];
+	  forcesQuadPt[spaceDim+iSpace] += basis[iQuad*numBasis+iBasis]
+	    *forcesCurrentCell[(iBasis+numBasis)*spaceDim+iSpace];
+	}
+      }
+      for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	tractionCurrentGlobal[iSpace] = forcesQuadPt[spaceDim+iSpace]
+	  -forcesQuadPt[iSpace];
+	tractionCurrentGlobal[iSpace] /= wt;
+      }
+      
+
+      // Compute traction in fault orientation.
+      // In: tractionCurrentGlobal [spaceDim]
+      // Out: tractionCurrentFault [spaceDim]
+      // Use orientation to rotate from global to fault orientation.
+      // ADD STUFF HERE
+      double_array tractionCurrentFault(spaceDim);
+      for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	for (int jSpace=0; jSpace < spaceDim; ++jSpace) {
+	  tractionCurrentFault[iSpace] += tractionCurrentGlobal[jSpace]
+	    *orientationCell[iQuad*spaceDim*spaceDim+iSpace*spaceDim+jSpace];
+	}
+      }
+
+      // Compute total traction (initial + current).
+      // In: tractionCurrentFault [spaceDim]
+      //     tractionInitialFault [numQuadPts*spaceDim]
+      // Out: tractionTotalFault [spaceDim]
+      // ADD STUFF HERE
+      double_array tractionTotalFault(spaceDim); 
+      for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	tractionTotalFault[iSpace] += tractionCurrentFault[iSpace]
+	  +tractionInitialFault[iQuad*spaceDim+iSpace];
+      }
+
+      // Compute traction ("friction") using fault constitutive model in fault orientation.
+      // In: slipFault [spaceDim]
+      //     tractionCurrentFault [spaceDim]
+      //     tractionTotalFault [spaceDim]
+      // Out: frictionFault [spaceDim]
+      // BEGIN TEMPORARY
+      // Simple fault constitutive model with static friction.
+      const double mu = 0.7;
+      // ADD STUFF HERE
+      double_array frictionFault(spaceDim);
+      frictionFault = 0.0;
+    switch (spaceDim)
+      { // switch
+      case 1 : {
+	if (tractionTotalFault[0] < 0) {
+	  frictionFault[0] = tractionCurrentFault[0];
+	    }
+	break;
+      } // case 1
+      case 2 : {
+	if (tractionTotalFault[1] < 0) {
+	  frictionFault[1] = tractionCurrentFault[1];
+	  frictionFault[0] = -mu * tractionTotalFault[1];
+	  if (frictionFault[0] > tractionCurrentFault[0])
+	    frictionFault[0] = tractionCurrentFault[0];
+	}
+	break;
+      } // case 2
+      case 3 : {
+	if (tractionTotalFault[2] < 0) {
+	  frictionFault[2] = tractionCurrentFault[2];
+	  frictionFault[1] = -mu * tractionTotalFault[2] * tractionTotalFault[1] / sqrt(pow(tractionTotalFault[1],2) +pow(tractionTotalFault[0],2));
+	  frictionFault[0] = -mu * tractionTotalFault[2] * tractionTotalFault[0] / sqrt(pow(tractionTotalFault[1],2) +pow(tractionTotalFault[0],2));
+	
+	  if (frictionFault[0] > tractionCurrentFault[0])
+	    frictionFault[0] = tractionCurrentFault[0];
+	
+	  if (frictionFault[1] > tractionCurrentFault[1])
+	    frictionFault[1] = tractionCurrentFault[1];
+	}
+	break;
+      } // case 3
+      default :
+	std::cerr << "Bad spatial dimension '" << spaceDim << "'." << std::endl;
+	assert(0);
+	throw std::logic_error("Bad spatial dimension in Friction.");
+      } // switch
+
+      
+      // END TEMPORARY
+
+      // If normal traction is negative (compression), prevent
+      // interpenetration by setting traction to exactly counteract
+      // current forces acting normal to fault.
+
+      // Compute traction associated with "friction" in global coordinate system. (tractionCell)
+      // In: frictionFault [spaceDim]
+      // Out: tractionCell [numQuadPts*spaceDim]
+      // Use orientation to rotate from global to fault orientation.
+      // ADD STUFF HERE
+      for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
+	for (int jSpace=0; jSpace < spaceDim; ++jSpace) {
+	  tractionCell[iQuad*spaceDim+iSpace] += frictionFault[jSpace]
+	    *orientationCell[iQuad*spaceDim*spaceDim+iSpace*spaceDim+jSpace];
+	}
+      }
+      tractionCell /= 2.0;
+      
+    std::cout << " wt: " << wt
+	      << " dispTpdtCell (-): (" << dispTpdtCell[0*spaceDim+0] << "," << dispTpdtCell[0*spaceDim+1] << ")\n"
+	      << "                   (" << dispTpdtCell[1*spaceDim+0] << "," << dispTpdtCell[1*spaceDim+1] << ")\n"
+	      << " dispTpdtCell (+): (" << dispTpdtCell[2*spaceDim+0] << "," << dispTpdtCell[2*spaceDim+1] << ")\n"
+	      << "                   (" << dispTpdtCell[3*spaceDim+0] << "," << dispTpdtCell[3*spaceDim+1] << ")\n"
+	      << " dispQuadPt (-): (" << dispQuadPt[0] << "," << dispQuadPt[1] << ")\n"
+	      << " dispQuadPt (+): (" << dispQuadPt[spaceDim+0] << "," << dispQuadPt[spaceDim+1] << ")\n"
+	      << " slipGlobal: (" << slipGlobal[0] << "," << slipGlobal[1] << ")\n"
+	      << " slipFault:  (" << slipFault[0] << "," << slipFault[1] << ")\n"
+	      << " forcesQuadPt (-): (" << forcesQuadPt[0] << "," << forcesQuadPt[1] << ")\n"
+	      << " forcesQuadPt (+): (" << forcesQuadPt[spaceDim+0] << "," << forcesQuadPt[spaceDim+1] << ")\n"
+	      << " tractionCurrentGlobal: (" << tractionCurrentGlobal[0] << "," << tractionCurrentGlobal[1] << ")\n"
+	      << " tractionCurrentFault: (" << tractionCurrentFault[0] << "," << tractionCurrentFault[1] << ")\n"
+	      << " tractionTotalFault: (" << tractionTotalFault[0] << "," << tractionTotalFault[1] << ")\n"
+	      << " frictionFault: (" << frictionFault[0] << "," << frictionFault[1] << ")\n"
+	      << " tractionCell: (" << tractionCell[iQuad*spaceDim+0] << "," << tractionCell[iQuad*spaceDim+1] << ")\n"
+	      << std::endl;
+
+
+      // Compute action for dynamic fault term
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+        const double valI = wt*basis[iQuad*numBasis+iBasis];
+        for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+          const double valIJ = valI * basis[iQuad*numBasis+jBasis];
+          for (int iDim=0; iDim < spaceDim; ++iDim) {
+	    // :TODO: action for each side of the fault
+            residualCell[iBasis*spaceDim+iDim] += 
+	      tractionCell[iQuad*spaceDim+iDim] * valIJ;
+	  residualCell[(iBasis+numBasis)*spaceDim+iDim] += 
+	      -tractionCell[iQuad*spaceDim+iDim] * valIJ;
+	  } // for
+        } // for
+      } // for
+    } // for
+
+    // Assemble cell contribution into field
+    residualVisitor.clear();
+    sieveMesh->updateClosure(*c_iter, residualVisitor);
+
+    PetscLogFlops(numQuadPts*(0)); // :TODO: Count number of operations
+  } // for
+
+  // debugging
+  residual.view("RESIDUAL AFTER FRICTION");
 } // integrateResidual
 
 // ----------------------------------------------------------------------
@@ -71,7 +431,7 @@
 				   const double t,
 				   topology::SolutionFields* const fields)
 { // integrateJacobian
-  throw std::logic_error("FaultCohesiveDyn::integrateJacobian() not implemented.");
+  _needNewJacobian = false;
 } // integrateJacobian
   
 // ----------------------------------------------------------------------
@@ -103,7 +463,8 @@
 	<< "'.";
     throw std::runtime_error(msg.str());
   } // if
-  const int numCorners = _quadrature->numBasis();
+
+  const int numCorners = _quadrature->refGeometry().numCorners();
   const ALE::Obj<SieveMesh::label_sequence>& cells = 
     sieveMesh->getLabelStratum("material-id", id());
   assert(!cells.isNull());
@@ -113,7 +474,7 @@
        c_iter != cellsEnd;
        ++c_iter) {
     const int cellNumCorners = sieveMesh->getNumCellCorners(*c_iter);
-    if (3*numCorners != cellNumCorners) {
+    if (2*numCorners != cellNumCorners) {
       std::ostringstream msg;
       msg << "Number of vertices in reference cell (" << numCorners 
 	  << ") is not compatible with number of vertices (" << cellNumCorners
@@ -141,8 +502,237 @@
 				      const char* name,
 				      const topology::SolutionFields* fields)
 { // cellField
-  throw std::logic_error("FaultCohesiveDyn::vertexField() not implemented.");
+  throw std::logic_error("FaultCohesiveDyn::cellField() not implemented.");
 } // cellField
 
+// ----------------------------------------------------------------------
+// Calculate orientation at fault vertices.
+void
+pylith::faults::FaultCohesiveDyn::_calcOrientation(const double upDir[3],
+						   const double normalDir[3])
+{ // _calcOrientation
+  assert(0 != _fields);
+  assert(0 != _quadrature);
 
+  double_array up(upDir, 3);
+
+  // Get 'fault' cells.
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+    faultSieveMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Quadrature related values.
+  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
+  const int cellDim = _quadrature->cellDim() > 0 ? _quadrature->cellDim() : 1;
+  const int numBasis = _quadrature->numBasis();
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int spaceDim = cellGeometry.spaceDim();
+  double_array quadPtRef(cellDim);
+  const double_array& quadPtsRef = _quadrature->quadPtsRef();
+  
+  // Containers for orientation information
+  const int orientationSize = spaceDim * spaceDim;
+  const int fiberDim = numQuadPts * orientationSize;
+  const int jacobianSize = spaceDim * cellDim;
+  double_array jacobian(jacobianSize);
+  double jacobianDet = 0;
+  double_array orientationQuadPt(orientationSize);
+  double_array orientationCell(fiberDim);
+
+  // Get sections.
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates =
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  // :TODO: Use spaces to create subsections like in FaultCohesiveKin.
+  _fields->add("orientation", "orientation", 
+	       topology::FieldBase::CELLS_FIELD, fiberDim);
+  topology::Field<topology::SubMesh>& orientation = _fields->get("orientation");
+  orientation.allocate();
+  const ALE::Obj<RealSection>& orientationSection = orientation.section();
+  assert(!orientationSection.isNull());
+
+  // Loop over cells in fault mesh and compute orientations.
+  for(SieveSubMesh::label_sequence::iterator c_iter = cellsBegin;
+      c_iter != cellsEnd;
+      ++c_iter) {
+    // Compute geometry information for current cell
+    coordsVisitor.clear();
+    faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+
+    // Reset orientation to zero.
+    orientationCell = 0.0;
+
+    // Compute orientation at each quadrature point of current cell.
+    for (int iQuad=0, iRef=0, iSpace=0; 
+	 iQuad < numQuadPts;
+	 ++iQuad, iRef+=cellDim, iSpace+=spaceDim) {
+      // Reset orientation at quad pt to zero.
+      orientationQuadPt = 0.0;
+
+      // Compute Jacobian and determinant at quadrature point, then get
+      // orientation.
+      memcpy(&quadPtRef[0], &quadPtsRef[iRef], cellDim*sizeof(double));
+      cellGeometry.jacobian(&jacobian, &jacobianDet,
+			    coordinatesCell, quadPtRef);
+      cellGeometry.orientation(&orientationQuadPt, jacobian, jacobianDet, up);
+      assert(jacobianDet > 0.0);
+      orientationQuadPt /= jacobianDet;
+
+      memcpy(&orientationCell[iQuad*orientationSize], 
+	     &orientationQuadPt[0], orientationSize*sizeof(double));
+    } // for
+
+    orientationSection->updatePoint(*c_iter, &orientationCell[0]);
+  } // for
+
+  // debugging
+  orientation.view("FAULT ORIENTATION");
+} // _calcOrientation
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveDyn::_getInitialTractions(void)
+{ // _getInitialTractions
+  assert(0 != _normalizer);
+  assert(0 != _quadrature);
+
+  const double pressureScale = _normalizer->pressureScale();
+  const double lengthScale = _normalizer->lengthScale();
+
+  const int spaceDim = _quadrature->spaceDim();
+  const int numQuadPts = _quadrature->numQuadPts();
+
+  if (0 != _dbInitial) { // Setup initial values, if provided.
+    // Create section to hold initial tractions.
+    _fields->add("initial traction", "initial_traction");
+    topology::Field<topology::SubMesh>& traction = _fields->get("initial traction");
+    traction.scale(pressureScale);
+    traction.vectorFieldType(topology::FieldBase::MULTI_VECTOR);
+    traction.newSection(topology::FieldBase::CELLS_FIELD, numQuadPts*spaceDim);
+    traction.allocate();
+    const ALE::Obj<RealSection>& tractionSection = traction.section();
+    assert(!tractionSection.isNull());
+
+    _dbInitial->open();
+    switch (spaceDim)
+      { // switch
+      case 1 : {
+	const char* valueNames[] = {"traction-normal"};
+	_dbInitial->queryVals(valueNames, 1);
+	break;
+      } // case 1
+      case 2 : {
+	const char* valueNames[] = {"traction-shear", "traction-normal"};
+	_dbInitial->queryVals(valueNames, 2);
+	break;
+      } // case 2
+      case 3 : {
+	const char* valueNames[] = {"traction-shear-leftlateral",
+				    "traction-shear-updip",
+				    "traction-normal"};
+	_dbInitial->queryVals(valueNames, 3);
+	break;
+      } // case 3
+      default :
+	std::cerr << "Bad spatial dimension '" << spaceDim << "'." << std::endl;
+	assert(0);
+	throw std::logic_error("Bad spatial dimension in Neumann.");
+      } // switch
+
+    // Get 'fault' cells.
+    const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+    assert(!faultSieveMesh.isNull());
+    const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+      faultSieveMesh->heightStratum(0);
+    assert(!cells.isNull());
+    const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+    const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+
+    const int cellDim = _quadrature->cellDim() > 0 ? _quadrature->cellDim() : 1;
+    const int numBasis = _quadrature->numBasis();
+    const int numQuadPts = _quadrature->numQuadPts();
+    const int spaceDim = _quadrature->spaceDim();
+  
+    // Containers for database query results and quadrature coordinates in
+    // reference geometry.
+    double_array tractionCell(numQuadPts*spaceDim);
+    double_array quadPtsGlobal(numQuadPts*spaceDim);
+    
+    // Get sections.
+    double_array coordinatesCell(numBasis*spaceDim);
+    const ALE::Obj<RealSection>& coordinates =
+      faultSieveMesh->getRealSection("coordinates");
+    assert(!coordinates.isNull());
+    topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						  coordinatesCell.size(),
+						  &coordinatesCell[0]);
+
+    const spatialdata::geocoords::CoordSys* cs = _faultMesh->coordsys();
+    
+    // Compute quadrature information
+    
+    // Loop over cells in boundary mesh and perform queries.
+    for (SieveSubMesh::label_sequence::iterator c_iter = cellsBegin;
+	 c_iter != cellsEnd;
+	 ++c_iter) {
+      // Compute geometry information for current cell
+      coordsVisitor.clear();
+      faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
+      _quadrature->computeGeometry(coordinatesCell, *c_iter);
+      
+      const double_array& quadPtsNondim = _quadrature->quadPts();
+      quadPtsGlobal = quadPtsNondim;
+      _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+				  lengthScale);
+      
+      tractionCell = 0.0;
+      for (int iQuad=0, iSpace=0; 
+	   iQuad < numQuadPts;
+	   ++iQuad, iSpace+=spaceDim) {
+	const int err = _dbInitial->query(&tractionCell[iQuad*spaceDim], spaceDim,
+					  &quadPtsGlobal[iSpace], spaceDim, cs);
+	if (err) {
+	  std::ostringstream msg;
+	  msg << "Could not find initial tractions at (";
+	  for (int i=0; i < spaceDim; ++i)
+	    msg << " " << quadPtsGlobal[i+iSpace];
+	  msg << ") for dynamic fault interface " << label() << "\n"
+	      << "using spatial database " << _dbInitial->label() << ".";
+	  throw std::runtime_error(msg.str());
+	} // if
+	
+      } // for
+      _normalizer->nondimensionalize(&tractionCell[0], tractionCell.size(),
+				     pressureScale);
+      
+      // Update section
+      assert(tractionCell.size() == tractionSection->getFiberDimension(*c_iter));
+      tractionSection->updatePoint(*c_iter, &tractionCell[0]);
+    } // for
+    
+    _dbInitial->close();
+
+    // debugging
+    traction.view("INITIAL TRACTIONS");
+  } // if
+} // _getInitialTractions
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveDyn::_initConstitutiveModel(void)
+{ // _initConstitutiveModel
+  // :TODO: ADD STUFF HERE
+} // _initConstitutiveModel
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,10 +14,6 @@
  *
  * @brief C++ implementation for a fault surface with spontaneous
  * (dynamic) slip implemented with cohesive elements.
- *
- * The ordering of vertices in a cohesive cell is the vertices on the
- * POSITIVE/NEGATIVE (CHECK WHICH IT IS) side of the fault and then the
- * corresponding entries on the other side of the fault.
  */
 
 #if !defined(pylith_faults_faultcohesivedyn_hh)
@@ -27,6 +23,14 @@
 #include "FaultCohesive.hh" // ISA FaultCohesive
 
 // FaultCohesiveDyn -----------------------------------------------------
+/** 
+ * @brief C++ implementation for a fault surface with spontaneous
+ * (dynamic) slip implemented with cohesive elements.
+ *
+ * The ordering of vertices in a cohesive cell is the vertices on the
+ * negative side of the fault and then the corresponding entries on
+ * the positive side of the fault.
+ */
 class pylith::faults::FaultCohesiveDyn : public FaultCohesive
 { // class FaultCohesiveDyn
   friend class TestFaultCohesiveDyn; // unit testing
@@ -44,6 +48,11 @@
   /// Deallocate PETSc and local data structures.
   virtual
   void deallocate(void);
+
+  /** Sets the spatial database for the inital tractions
+   * @param dbs spatial database for initial tractions
+   */
+  void dbInitial(spatialdata::spatialdb::SpatialDB* dbs);
   
   /** Initialize fault. Determine orientation and setup boundary
    * condition parameters.
@@ -116,6 +125,36 @@
    */
   bool useLagrangeConstraints(void) const;
 
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Calculate orientation at quadrature points.
+   *
+   * @param upDir Direction perpendicular to along-strike direction that is 
+   *   not collinear with fault normal (usually "up" direction but could 
+   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+   * @param normalDir General preferred direction for fault normal
+   *   (used to pick which of two possible normal directions for
+   *   interface; only applies to fault surfaces in a 3-D domain).
+   */
+  void _calcOrientation(const double upDir[3],
+			const double normalDir[3]);
+
+  /** Get initial tractions using a spatial database.
+   */
+  void _getInitialTractions(void);
+
+  /** Setup fault constitutive model.
+   */
+  void _initConstitutiveModel(void);
+
+  // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+  /// Database for initial tractions.
+  spatialdata::spatialdb::SpatialDB* _dbInitial;
+
+
   // NOT IMPLEMENTED ////////////////////////////////////////////////////
 private :
 
@@ -125,9 +164,6 @@
   /// Not implemented
   const FaultCohesiveDyn& operator=(const FaultCohesiveDyn&);
 
-  // PRIVATE MEMBERS ////////////////////////////////////////////////////
-private :
-
 }; // class FaultCohesiveDyn
 
 #include "FaultCohesiveDyn.icc" // inline methods

Copied: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/faults/FaultCohesiveDynL.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,1832 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "FaultCohesiveDynL.hh" // implementation of object methods
+
+#include "CohesiveTopology.hh" // USES CohesiveTopology
+
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/CellGeometry.hh" // USES CellGeometry
+
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+
+#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+#include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <cmath> // USES pow(), sqrt()
+#include <strings.h> // USES strcasecmp()
+#include <cstring> // USES strlen()
+#include <cstdlib> // USES atoi()
+#include <cassert> // USES assert()
+#include <sstream> // USES std::ostringstream
+#include <stdexcept> // USES std::runtime_error
+
+// Precomputing geometry significantly increases storage but gives a
+// slight speed improvement.
+//#define PRECOMPUTE_GEOMETRY
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+typedef pylith::topology::SubMesh::SieveMesh SieveSubMesh;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::faults::FaultCohesiveDynL::FaultCohesiveDynL(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::faults::FaultCohesiveDynL::~FaultCohesiveDynL(void)
+{ // destructor
+  deallocate();
+} // destructor
+
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void 
+pylith::faults::FaultCohesiveDynL::deallocate(void)
+{ // deallocate
+  FaultCohesive::deallocate();
+
+  // :TODO: Use shared pointers for initial database
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Sets the spatial database for the inital tractions
+void
+pylith::faults::FaultCohesiveDynL::dbInitial(spatialdata::spatialdb::SpatialDB* db)
+{ // dbInitial
+  _dbInitial = db;
+} // dbInitial
+
+// ----------------------------------------------------------------------
+// Initialize fault. Determine orientation and setup boundary
+void
+pylith::faults::FaultCohesiveDynL::initialize(const topology::Mesh& mesh,
+					     const double upDir[3],
+					     const double normalDir[3])
+{ // initialize
+  assert(0 != upDir);
+  assert(0 != normalDir);
+  assert(0 != _quadrature);
+  assert(0 != _normalizer);
+
+  const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();
+  assert(0 != cs);
+  
+  delete _faultMesh; _faultMesh = new topology::SubMesh();
+  CohesiveTopology::createFaultParallel(_faultMesh, &_cohesiveToFault, 
+					mesh, id(), useLagrangeConstraints());
+
+  delete _fields; 
+  _fields = new topology::Fields<topology::Field<topology::SubMesh> >(*_faultMesh);
+
+  ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
+  //logger.stagePush("Fault");
+
+  // Allocate slip field
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+    faultSieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  _fields->add("slip", "slip");
+  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+  slip.newSection(vertices, cs->spaceDim());
+  slip.allocate();
+  slip.vectorFieldType(topology::FieldBase::VECTOR);
+  slip.scale(_normalizer->lengthScale());
+
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+    faultSieveMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+  _quadrature->initializeGeometry();
+#if defined(PRECOMPUTE_GEOMETRY)
+  _quadrature->computeGeometry(*_faultMesh, cells);
+#endif
+
+  // Compute orientation at vertices in fault mesh.
+  _calcOrientation(upDir, normalDir);
+
+  // Compute tributary area for each vertex in fault mesh.
+  _calcArea();
+
+  // Get initial tractions using a spatial database.
+  _getInitialTractions();
+  
+  // Setup fault constitutive model.
+  _initConstitutiveModel();
+
+  // Create field for diagonal entries of Jacobian at conventional
+  // vertices i and j associated with Lagrange vertex k
+  _fields->add("Jacobian diagonal", "jacobian_diagonal");
+  topology::Field<topology::SubMesh>& jacobianDiag = 
+    _fields->get("Jacobian diagonal");
+  jacobianDiag.newSection(slip, 2*cs->spaceDim());
+  jacobianDiag.allocate();
+  jacobianDiag.vectorFieldType(topology::FieldBase::OTHER);
+
+  //logger.stagePop();
+} // initialize
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveDynL::splitField(topology::Field<topology::Mesh>* field)
+{ // splitFields
+  assert(0 != field);
+
+  const ALE::Obj<RealSection>& section = field->section();
+  assert(!section.isNull());
+  if (0 == section->getNumSpaces())
+    return; // Return if there are no fibrations
+
+  const int fibrationDisp = 0;
+  const int fibrationLagrange = 1;
+
+  // Get domain Sieve mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = field->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+
+  // Get fault Sieve mesh
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const SieveSubMesh::label_sequence::iterator verticesBegin = 
+    vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  SieveSubMesh::renumbering_type& renumbering = 
+    faultSieveMesh->getRenumbering();
+  const SieveSubMesh::renumbering_type::const_iterator renumberingEnd =
+    renumbering.end();
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin; 
+       v_iter != verticesEnd;
+       ++v_iter)
+    if (renumbering.find(*v_iter) != renumberingEnd) {
+      const int vertexFault = renumbering[*v_iter];
+      const int vertexMesh = *v_iter;
+      const int fiberDim = section->getFiberDimension(vertexMesh);
+      assert(fiberDim > 0);
+      // Reset displacement fibration fiber dimension to zero.
+      section->setFiberDimension(vertexMesh, 0, fibrationDisp);
+      // Set Langrange fibration fiber dimension.
+      section->setFiberDimension(vertexMesh, fiberDim, fibrationLagrange);
+    } // if
+} // splitFields
+
+// ----------------------------------------------------------------------
+// Integrate contribution of cohesive cells to residual term that
+// require assembly across processors.
+void
+pylith::faults::FaultCohesiveDynL::integrateResidual(
+			     const topology::Field<topology::Mesh>& residual,
+			     const double t,
+			     topology::SolutionFields* const fields)
+{ // integrateResidual
+  assert(0 != fields);
+  assert(0 != _quadrature);
+  assert(0 != _fields);
+
+  // Cohesive cells with normal vertices i and j, and constraint
+  // vertex k make 2 contributions to the residual:
+  //
+  //   * DOF i and j: internal forces in soln field associated with 
+  //                  slip  -[C]^T{L(t)+dL(t)}
+  //   * DOF k: slip values  -[C]{u(t)+dt(t)}
+
+  // Get cell information and setup storage for cell data
+  const int spaceDim = _quadrature->spaceDim();
+  const int orientationSize = spaceDim*spaceDim;
+  const int numBasis = _quadrature->numBasis();
+  const int numConstraintVert = numBasis;
+  const int numCorners = 3*numConstraintVert; // cohesive cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+
+  // Allocate vectors for cell values
+  double_array dispTpdtCell(numCorners*spaceDim);
+
+  // Tributary area for the current for each vertex.
+  double_array areaVertexCell(numConstraintVert);
+
+  // Get cohesive cells
+  const ALE::Obj<SieveMesh>& sieveMesh = residual.mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& cellsCohesive = 
+    sieveMesh->getLabelStratum("material-id", id());
+  assert(!cellsCohesive.isNull());
+  const SieveMesh::label_sequence::iterator cellsCohesiveBegin =
+    cellsCohesive->begin();
+  const SieveMesh::label_sequence::iterator cellsCohesiveEnd =
+    cellsCohesive->end();
+  const int cellsCohesiveSize = cellsCohesive->size();
+
+  // Get fault Sieve mesh
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  // Get section information
+  double_array orientationCell(numConstraintVert*orientationSize);
+  const ALE::Obj<RealSection>& orientationSection = 
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+  topology::Mesh::RestrictVisitor orientationVisitor(*orientationSection,
+						     orientationCell.size(),
+						     &orientationCell[0]);
+
+  // Total fault area associated with each vertex (assembled over all cells).
+  double_array areaCell(numConstraintVert);
+  const ALE::Obj<RealSection>& areaSection = 
+    _fields->get("area").section();
+  assert(!areaSection.isNull());
+  topology::Mesh::RestrictVisitor areaVisitor(*areaSection,
+					      areaCell.size(), &areaCell[0]);
+
+  double_array dispTCell(numCorners*spaceDim);
+  topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
+  const ALE::Obj<RealSection>& dispTSection = dispT.section();
+  assert(!dispTSection.isNull());  
+  topology::Mesh::RestrictVisitor dispTVisitor(*dispTSection,
+					       dispTCell.size(), 
+					       &dispTCell[0]);
+
+  double_array dispTIncrCell(numCorners*spaceDim);
+  topology::Field<topology::Mesh>& dispTIncr = fields->get("dispIncr(t->t+dt)");
+  const ALE::Obj<RealSection>& dispTIncrSection = dispTIncr.section();
+  assert(!dispTIncrSection.isNull());  
+  topology::Mesh::RestrictVisitor dispTIncrVisitor(*dispTIncrSection,
+					       dispTIncrCell.size(), 
+					       &dispTIncrCell[0]);
+
+  double_array residualCell(numCorners*spaceDim);
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  topology::Mesh::UpdateAddVisitor residualVisitor(*residualSection,
+						   &residualCell[0]);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  for (SieveMesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
+       c_iter != cellsCohesiveEnd;
+       ++c_iter) {
+    const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
+    areaVertexCell = 0.0;
+    residualCell = 0.0;
+
+    // Compute geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(c_fault);
+#else
+    coordsVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, c_fault);
+#endif
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Compute contributory area for cell (to weight contributions)
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+        const double dArea = wt*basis[iQuad*numBasis+iBasis];
+	areaVertexCell[iBasis] += dArea;
+      } // for
+    } // for
+        
+    // Get orientations at fault cell's vertices.
+    orientationVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, orientationVisitor);
+    
+    // Get area at fault cell's vertices.
+    areaVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, areaVisitor);
+    
+    // Get disp(t) at cohesive cell's vertices.
+    dispTVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTVisitor);
+    
+    // Get dispIncr(t) at cohesive cell's vertices.
+    dispTIncrVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
+    
+    // Compute current estimate of displacement at time t+dt using
+    // solution increment.
+    dispTpdtCell = dispTCell + dispTIncrCell;
+
+    for (int iConstraint=0; iConstraint < numConstraintVert; ++iConstraint) {
+      // Blocks in cell matrix associated with normal cohesive
+      // vertices i and j and constraint vertex k
+      const int indexI = iConstraint;
+      const int indexJ = iConstraint +   numConstraintVert;
+      const int indexK = iConstraint + 2*numConstraintVert;
+
+      assert(areaCell[iConstraint] > 0);
+      const double wt = areaVertexCell[iConstraint] / areaCell[iConstraint];
+      
+      // Get orientation at constraint vertex
+      const double* orientationVertex = 
+	&orientationCell[iConstraint*orientationSize];
+      assert(0 != orientationVertex);
+      
+      // Entries associated with constraint forces applied at node i
+      for (int iDim=0; iDim < spaceDim; ++iDim) {
+	for (int kDim=0; kDim < spaceDim; ++kDim)
+	  residualCell[indexI*spaceDim+iDim] -=
+	    dispTpdtCell[indexK*spaceDim+kDim] * 
+	    -orientationVertex[kDim*spaceDim+iDim] * wt;
+      } // for
+      
+      // Entries associated with constraint forces applied at node j
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	for (int kDim=0; kDim < spaceDim; ++kDim)
+	  residualCell[indexJ*spaceDim+jDim] -=
+	    dispTpdtCell[indexK*spaceDim+kDim] * 
+	    orientationVertex[kDim*spaceDim+jDim] * wt;
+      } // for
+
+      // Entries associated with relative displacements between node i
+      // and node j for constraint node k
+      for (int kDim=0; kDim < spaceDim; ++kDim) {
+	for (int iDim=0; iDim < spaceDim; ++iDim) 
+	  residualCell[indexK*spaceDim+kDim] -=
+	    (dispTpdtCell[indexJ*spaceDim+iDim] - 
+	     dispTpdtCell[indexI*spaceDim+iDim]) *
+	    orientationVertex[kDim*spaceDim+iDim] * wt;
+      } // for
+    } // for
+
+#if 0 // DEBUGGING
+    std::cout << "Updating fault residual for cell " << *c_iter << std::endl;
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  dispTpdt["<<i<<"]: " << dispTpdtCell[i] << std::endl;
+    }
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  dispT["<<i<<"]: " << dispTCell[i] << std::endl;
+    }
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  dispIncr["<<i<<"]: " << dispTIncrCell[i] << std::endl;
+    }
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  v["<<i<<"]: " << residualCell[i] << std::endl;
+    }
+#endif
+
+    residualVisitor.clear();
+    sieveMesh->updateClosure(*c_iter, residualVisitor);
+  } // for
+
+  // FIX THIS
+  PetscLogFlops(cellsCohesiveSize*numConstraintVert*spaceDim*spaceDim*7);
+} // integrateResidual
+
+// ----------------------------------------------------------------------
+// Integrate contribution of cohesive cells to residual term that do
+// not require assembly across cells, vertices, or processors.
+void
+pylith::faults::FaultCohesiveDynL::integrateResidualAssembled(
+			    const topology::Field<topology::Mesh>& residual,
+			    const double t,
+			    topology::SolutionFields* const fields)
+{ // integrateResidualAssembled
+  assert(0 != fields);
+  assert(0 != _fields);
+
+  // Cohesive cells with normal vertices i and j, and constraint
+  // vertex k make contributions to the assembled residual:
+  //
+  //   * DOF k: slip values {D(t+dt)}
+
+  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+
+  const int spaceDim = _quadrature->spaceDim();
+
+  // Get sections
+  const ALE::Obj<SieveMesh>& sieveMesh = residual.mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<RealSection>& slipSection = slip.section();
+  assert(!slipSection.isNull());
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  assert(!residualSection.isNull());
+
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const SieveSubMesh::label_sequence::iterator verticesBegin = 
+    vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  SieveSubMesh::renumbering_type& renumbering = 
+    faultSieveMesh->getRenumbering();
+  const SieveSubMesh::renumbering_type::const_iterator renumberingEnd =
+    renumbering.end();
+
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin; 
+       v_iter != verticesEnd;
+       ++v_iter)
+    if (renumbering.find(*v_iter) != renumberingEnd) {
+      const int vertexFault = renumbering[*v_iter];
+      const int vertexMesh = *v_iter;
+      const double* slipVertex = slipSection->restrictPoint(vertexFault);
+      assert(spaceDim == slipSection->getFiberDimension(vertexFault));
+      assert(spaceDim == residualSection->getFiberDimension(vertexMesh));
+      assert(0 != slipVertex);
+      residualSection->updateAddPoint(vertexMesh, slipVertex);
+    } // if
+} // integrateResidualAssembled
+
+// ----------------------------------------------------------------------
+// Compute Jacobian matrix (A) associated with operator that do not
+// require assembly across cells, vertices, or processors.
+void
+pylith::faults::FaultCohesiveDynL::integrateJacobianAssembled(
+				       topology::Jacobian* jacobian,
+				       const double t,
+				       topology::SolutionFields* const fields)
+{ // integrateJacobianAssembled
+  assert(0 != jacobian);
+  assert(0 != fields);
+  assert(0 != _fields);
+
+  // Add constraint information to Jacobian matrix; these are the
+  // direction cosines. Entries are associated with vertices ik, jk,
+  // ki, and kj.
+
+  // Get cohesive cells
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& cellsCohesive = 
+    sieveMesh->getLabelStratum("material-id", id());
+  assert(!cellsCohesive.isNull());
+  const SieveMesh::label_sequence::iterator cellsCohesiveBegin =
+    cellsCohesive->begin();
+  const SieveMesh::label_sequence::iterator cellsCohesiveEnd =
+    cellsCohesive->end();
+  const int cellsCohesiveSize = cellsCohesive->size();
+
+  const int spaceDim = _quadrature->spaceDim();
+  const int orientationSize = spaceDim*spaceDim;
+
+  const int numConstraintVert = _quadrature->numBasis();
+  const int numCorners = 3*numConstraintVert; // cohesive cell
+  double_array matrixCell(numCorners*spaceDim * numCorners*spaceDim);
+  double_array orientationCell(numConstraintVert*orientationSize);
+
+  // Get section information
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<RealSection>& solutionSection = fields->solution().section();
+  assert(!solutionSection.isNull());  
+  const ALE::Obj<RealSection>& orientationSection = 
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+  topology::Mesh::RestrictVisitor orientationVisitor(*orientationSection,
+						     orientationCell.size(),
+						     &orientationCell[0]);
+
+#if 0 // DEBUGGING
+  // Check that fault cells match cohesive cells
+  ALE::ISieveVisitor::PointRetriever<sieve_type> cV(std::max(1, mesh->getSieve()->getMaxConeSize()));
+  ALE::ISieveVisitor::PointRetriever<sieve_type> cV2(std::max(1, _faultMesh->getSieve()->getMaxConeSize()));
+  Mesh::renumbering_type& fRenumbering = _faultMesh->getRenumbering();
+  const int rank = mesh->commRank();
+
+  for (Mesh::label_sequence::iterator c_iter = cellsCohesiveBegin;
+       c_iter != cellsCohesiveEnd;
+       ++c_iter) {
+    mesh->getSieve()->cone(*c_iter, cV);
+    const int               coneSize  = cV.getSize();
+    const Mesh::point_type *cone      = cV.getPoints();
+    const int               faceSize  = coneSize / 3;
+    const Mesh::point_type  face      = _cohesiveToFault[*c_iter];
+    _faultMesh->getSieve()->cone(face, cV2);
+    const int               fConeSize = cV2.getSize();
+    const Mesh::point_type *fCone     = cV2.getPoints();
+
+    assert(0 == coneSize % faceSize);
+    assert(faceSize == fConeSize);
+    // Use last vertices (contraints) for fault mesh
+    for(int i = 2*faceSize, j = 0; i < 3*faceSize; ++i, ++j) {
+      assert(fRenumbering[cone[i]] == fCone[j]);
+    }
+    cV.clear();
+    cV2.clear();
+  }
+#endif
+
+  const PetscMat jacobianMatrix = jacobian->matrix();
+  assert(0 != jacobianMatrix);
+  const ALE::Obj<SieveMesh::order_type>& globalOrder = 
+    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", solutionSection);
+  assert(!globalOrder.isNull());
+  // We would need to request unique points here if we had an interpolated mesh
+  topology::Mesh::IndicesVisitor jacobianVisitor(*solutionSection,
+						 *globalOrder,
+			   (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
+				     sieveMesh->depth())*spaceDim);
+
+  for (SieveMesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
+       c_iter != cellsCohesiveEnd;
+       ++c_iter) {
+    const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
+
+    matrixCell = 0.0;
+    // Get orientations at fault cell's vertices.
+    orientationVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, orientationVisitor);
+
+    for (int iConstraint=0; iConstraint < numConstraintVert; ++iConstraint) {
+      // Blocks in cell matrix associated with normal cohesive
+      // vertices i and j and constraint vertex k
+      const int indexI = iConstraint;
+      const int indexJ = iConstraint +   numConstraintVert;
+      const int indexK = iConstraint + 2*numConstraintVert;
+
+      // Get orientation at constraint vertex
+      const double* orientationVertex = 
+	&orientationCell[iConstraint*orientationSize];
+      assert(0 != orientationVertex);
+
+      // Entries associated with constraint forces applied at node i
+      for (int iDim=0; iDim < spaceDim; ++iDim)
+	for (int kDim=0; kDim < spaceDim; ++kDim) {
+	  const int row = indexI*spaceDim+iDim;
+	  const int col = indexK*spaceDim+kDim;
+	  matrixCell[row*numCorners*spaceDim+col] =
+	    -orientationVertex[kDim*spaceDim+iDim];
+	  matrixCell[col*numCorners*spaceDim+row] =
+	    -orientationVertex[kDim*spaceDim+iDim];
+	} // for
+
+      // Entries associated with constraint forces applied at node j
+      for (int jDim=0; jDim < spaceDim; ++jDim)
+	for (int kDim=0; kDim < spaceDim; ++kDim) {
+	  const int row = indexJ*spaceDim+jDim;
+	  const int col = indexK*spaceDim+kDim;
+	  matrixCell[row*numCorners*spaceDim+col] =
+	    orientationVertex[kDim*spaceDim+jDim];
+	  matrixCell[col*numCorners*spaceDim+row] =
+	    orientationVertex[kDim*spaceDim+jDim];
+	} // for
+    } // for
+
+    // Insert cell contribution into PETSc Matrix
+    jacobianVisitor.clear();
+    PetscErrorCode err = updateOperator(jacobianMatrix, *sieveMesh->getSieve(),
+					      jacobianVisitor, *c_iter,
+					      &matrixCell[0], INSERT_VALUES);
+    CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
+  } // for
+  PetscLogFlops(cellsCohesiveSize*numConstraintVert*spaceDim*spaceDim*4);
+  _needNewJacobian = false;
+} // integrateJacobianAssembled
+  
+// ----------------------------------------------------------------------
+// Update state variables as needed.
+void
+pylith::faults::FaultCohesiveDynL::updateStateVars(const double t,
+		       topology::SolutionFields* const fields)
+{ // updateStateVars
+  assert(0 != fields);
+  assert(0 != _fields);
+
+} // updateStateVars
+
+// ----------------------------------------------------------------------
+// Constrain solution based on friction.
+void
+pylith::faults::FaultCohesiveDynL::constrainSolnSpace(
+				       topology::SolutionFields* const fields,
+				       const double t,
+				       const topology::Jacobian& jacobian)
+{ // constrainSolnSpace
+  assert(0 != fields);
+  assert(0 != _quadrature);
+  assert(0 != _fields);
+
+  const int spaceDim = _quadrature->spaceDim();
+
+  // Allocate arrays for vertex values
+  double_array tractionTVertex(spaceDim);
+  double_array tractionTpdtVertex(spaceDim);
+  double_array slipTpdtVertex(spaceDim);
+  double_array lagrangeTpdtVertex(spaceDim);
+  double_array dLagrangeTpdtVertex(spaceDim);
+
+  // Get domain mesh and fault mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  // Get sections
+  double_array slipVertex(spaceDim);
+  const ALE::Obj<RealSection>& slipSection =  _fields->get("slip").section();
+  assert(!slipSection.isNull());
+
+  const ALE::Obj<RealSection>& areaSection =  _fields->get("area").section();
+  assert(!areaSection.isNull());
+
+  double_array orientationVertex(spaceDim*spaceDim);
+  const ALE::Obj<RealSection>& orientationSection =
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
+  double_array tractionInitialVertex(spaceDim);
+  const ALE::Obj<RealSection>& tractionInitialSection = (0 != _dbInitial) ?
+    _fields->get("initial traction").section() : 0;
+
+  double_array lagrangeTVertex(spaceDim);
+  const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
+  assert(!dispTSection.isNull());
+  
+  double_array lagrangeTIncrVertex(spaceDim);
+  const ALE::Obj<RealSection>& dispTIncrSection = 
+    fields->get("dispIncr(t->t+dt)").section();
+  assert(!dispTIncrSection.isNull());  
+
+  double_array jacobianVertex(2*spaceDim);
+  const ALE::Obj<RealSection>& jacobianSection = 
+    _fields->get("Jacobian diagonal").section();
+  assert(!jacobianSection.isNull());
+  _updateJacobianDiagonal(*fields);
+
+  slipSection->view("SLIP");
+  areaSection->view("AREA");
+  tractionInitialSection->view("INITIAL TRACTION");
+  dispTSection->view("DISP (t)");
+  dispTIncrSection->view("DISP INCR (t->t+dt)");
+
+  // Get mesh and fault vertices and renumbering
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const SieveSubMesh::label_sequence::iterator verticesBegin = 
+    vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  SieveSubMesh::renumbering_type& renumbering = 
+    faultSieveMesh->getRenumbering();
+  const SieveSubMesh::renumbering_type::const_iterator renumberingEnd =
+    renumbering.end();
+
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin; 
+       v_iter != verticesEnd;
+       ++v_iter)
+    if (renumbering.find(*v_iter) != renumberingEnd) {
+      const int vertexFault = renumbering[*v_iter];
+      const int vertexMesh = *v_iter;
+
+      // Get slip
+      slipSection->restrictPoint(vertexFault, 
+				 &slipVertex[0], slipVertex.size());
+
+      // Get total fault area asssociated with vertex (assembled over all cells)
+      const double* areaVertex = areaSection->restrictPoint(vertexFault);
+      assert(0 != areaVertex);
+      assert(1 == areaSection->getFiberDimension(vertexFault));
+
+      // Get fault orientation
+      orientationSection->restrictPoint(vertexFault, &orientationVertex[0],
+					orientationVertex.size());
+
+      // Get diagonal of Jacobian at conventional vertices i and j
+      // associated with Lagrange vertex k
+      jacobianSection->restrictPoint(vertexFault, &jacobianVertex[0], 
+				     jacobianVertex.size());
+
+      // Get initial fault tractions
+      if (0 != _dbInitial) {
+	assert(!tractionInitialSection.isNull());
+	tractionInitialSection->restrictPoint(vertexFault, 
+					      &tractionInitialVertex[0],
+					      tractionInitialVertex.size());
+      } // if
+
+      // Get Lagrange multiplier values from disp(t), and dispIncr(t->t+dt)
+      dispTSection->restrictPoint(vertexMesh, &lagrangeTVertex[0],
+				  lagrangeTVertex.size());
+      dispTIncrSection->restrictPoint(vertexMesh, &lagrangeTIncrVertex[0],
+				      lagrangeTIncrVertex.size());
+      
+      // Compute Lagrange multiplier at time t+dt
+      lagrangeTpdtVertex = lagrangeTVertex + lagrangeTIncrVertex;
+      dLagrangeTpdtVertex = 0.0;
+      
+      // :KLUDGE: Solution at Lagrange constraint vertices is the
+      // Lagrange multiplier value, which is currently the force.
+      // Compute traction by dividing force by area
+      assert(*areaVertex > 0);
+      tractionTVertex = lagrangeTVertex / (*areaVertex);
+      tractionTpdtVertex = lagrangeTpdtVertex / (*areaVertex);      
+      
+      // Use fault constitutive model to compute traction associated with
+      // friction.
+      // :KLUDGE: TEMPORARY BEGIN CONSTANT COEFFICIENT OF FRICTION
+      const double muf = 0.6;
+      switch (spaceDim)
+	{ // switch
+	case 1 :
+	  { // case 1
+	    // Sensitivity of slip to changes in the Lagrange multipliers
+	    // Aixjx = 1.0/Aix + 1.0/Ajx
+	    const double Aixjx = 
+	      1.0/jacobianVertex[0] + 1.0/jacobianVertex[spaceDim+0];
+	    const double Spp = 1.0;
+
+	    if (tractionTpdtVertex[0]+tractionInitialVertex[0] < 0) {
+	      // if compression, then no changes to solution
+	    } else {
+	      // if tension, then traction is zero.
+	      
+	      // Update slip based on value required to stick versus
+	      // zero traction
+	      dLagrangeTpdtVertex[0] = tractionTpdtVertex[0] * (*areaVertex);
+	      slipVertex[0] += Spp * dLagrangeTpdtVertex[0];
+
+	      // Set traction to zero.
+	      tractionTpdtVertex[0] = 0.0;
+	    } // else
+	    break;
+	  } // case 1
+	case 2 :
+	  { // case 2
+	    std::cout << "Normal traction:"
+		      << tractionTpdtVertex[1]+tractionInitialVertex[1]
+		      << std::endl;
+
+	    // Sensitivity of slip to changes in the Lagrange multipliers
+	    // Aixjx = 1.0/Aix + 1.0/Ajx
+	    assert(jacobianVertex[0] > 0.0);
+	    assert(jacobianVertex[spaceDim+0] > 0.0);
+	    const double Aixjx = 
+	      1.0 / jacobianVertex[0] + 1.0 / jacobianVertex[spaceDim+0];
+	    // Aiyjy = 1.0/Aiy + 1.0/Ajy
+	    assert(jacobianVertex[1] > 0.0);
+	    assert(jacobianVertex[spaceDim+1] > 0.0);
+	    const double Aiyjy = 
+	      1.0 / jacobianVertex[1] + 1.0 / jacobianVertex[spaceDim+1];
+	    const double Cpx = orientationVertex[0];
+	    const double Cpy = orientationVertex[1];
+	    const double Cqx = orientationVertex[2];
+	    const double Cqy = orientationVertex[3];
+	    const double Spp = Cpx*Cpx*Aixjx + Cpy*Cpy*Aiyjy;
+	    const double Spq = Cpx*Cqx*Aixjx + Cpy*Cqy*Aiyjy;
+	    const double Sqq = Cqx*Cqx*Aixjx + Cqy*Cqy*Aiyjy;
+
+	    if (tractionTpdtVertex[1]+tractionInitialVertex[1] < 0 &&
+		0 == slipVertex[1]) {
+	      // if in compression and no opening
+	      std::cout << "FAULT IN COMPRESSION" << std::endl;
+	      const double friction =
+		-muf * (tractionInitialVertex[1] + tractionTpdtVertex[1]);
+	      std::cout << "friction: " << friction << std::endl;
+	      if (tractionTpdtVertex[0] > friction ||
+		  (tractionTpdtVertex[0] < friction && slipVertex[0] > 0.0)) {
+		// traction is limited by friction, so have sliding
+		std::cout << "LIMIT TRACTION, HAVE SLIDING" << std::endl;
+
+		// Update slip based on value required to stick versus friction
+		dLagrangeTpdtVertex[0] = 
+		  (tractionTpdtVertex[0] - friction) * (*areaVertex);
+		slipVertex[0] += Spp * dLagrangeTpdtVertex[0];
+		std::cout << "Estimated slip: " << slipVertex[0] << std::endl;
+		// Limit traction
+		tractionTpdtVertex[0] = friction;
+	      } else {
+		// else friction exceeds value necessary, so stick
+		std::cout << "STICK" << std::endl;
+		// no changes to solution
+	      } // if/else
+	    } else {
+	      // if in tension, then traction is zero.
+	      std::cout << "FAULT IN TENSION" << std::endl;
+	      
+		// Update slip based on value required to stick versus
+		// zero traction
+	      dLagrangeTpdtVertex[0] = tractionTpdtVertex[0] * (*areaVertex);
+	      dLagrangeTpdtVertex[1] = tractionTpdtVertex[1] * (*areaVertex);
+	      slipVertex[0] += 
+		Spp * dLagrangeTpdtVertex[0] +
+		Spq * dLagrangeTpdtVertex[1];
+	      slipVertex[1] += 
+		Spq * dLagrangeTpdtVertex[0] +
+		Sqq * dLagrangeTpdtVertex[1];
+	      
+	      // Set traction to zero
+	      tractionTpdtVertex = 0.0;
+	    } // else
+	    break;
+	  } // case 2
+	case 3 :
+	  { // case 3
+	    std::cout << "Normal traction:"
+		      << tractionTpdtVertex[2]+tractionInitialVertex[2]
+		      << std::endl;
+
+	    // Sensitivity of slip to changes in the Lagrange multipliers
+	    // Aixjx = 1.0/Aix + 1.0/Ajx
+	    assert(jacobianVertex[0] > 0.0);
+	    assert(jacobianVertex[spaceDim+0] > 0.0);
+	    const double Aixjx = 
+	      1.0/jacobianVertex[0] + 1.0/jacobianVertex[spaceDim+0];
+	    // Aiyjy = 1.0/Aiy + 1.0/Ajy
+	    assert(jacobianVertex[1] > 0.0);
+	    assert(jacobianVertex[spaceDim+1] > 0.0);
+	    const double Aiyjy = 
+	      1.0/jacobianVertex[1] + 1.0/jacobianVertex[spaceDim+1];
+	    // Aizjz = 1.0/Aiz + 1.0/Ajz
+	    assert(jacobianVertex[2] > 0.0);
+	    assert(jacobianVertex[spaceDim+2] > 0.0);
+	    const double Aizjz = 
+	      1.0/jacobianVertex[2] + 1.0/jacobianVertex[spaceDim+2];
+	    const double Cpx = orientationVertex[0];
+	    const double Cpy = orientationVertex[1];
+	    const double Cpz = orientationVertex[2];
+	    const double Cqx = orientationVertex[3];
+	    const double Cqy = orientationVertex[4];
+	    const double Cqz = orientationVertex[5];
+	    const double Crx = orientationVertex[6];
+	    const double Cry = orientationVertex[7];
+	    const double Crz = orientationVertex[8];
+	    const double Spp = Cpx*Cpx*Aixjx + Cpy*Cpy*Aiyjy + Cpz*Cpz*Aizjz;
+	    const double Spq = Cpx*Cqx*Aixjx + Cpy*Cqy*Aiyjy + Cpz*Cqz*Aizjz;
+	    const double Spr = Cpx*Crx*Aixjx + Cpy*Cry*Aiyjy + Cpz*Crz*Aizjz;
+	    const double Sqq = Cqx*Cqx*Aixjx + Cqy*Cqy*Aiyjy + Cqz*Cqz*Aizjz;
+	    const double Sqr = Cqx*Crx*Aixjx + Cqy*Cry*Aiyjy + Cqz*Crz*Aizjz;
+	    const double Srr = Crx*Crx*Aixjx + Cry*Cry*Aiyjy + Crz*Crz*Aizjz;
+
+	    double tractionTotalVertex;
+	    double tractionShearVertex;
+	    double slipShearVertex;
+
+	    tractionTotalVertex = tractionTpdtVertex[2]+tractionInitialVertex[2];
+	    tractionShearVertex = sqrt(pow(tractionTpdtVertex[1],2) +pow(tractionTpdtVertex[0],2));
+	    slipShearVertex = sqrt(pow(slipVertex[1],2)+pow(slipVertex[0],2));
+
+	    if (tractionTotalVertex < 0 && 0 == slipVertex[2]) {
+	      // if in compression and no opening
+	      std::cout << "FAULT IN COMPRESSION" << std::endl;
+	      const double friction =
+		-muf * (tractionTotalVertex);
+	      std::cout << "friction: " << friction << std::endl;
+	      if (tractionShearVertex > friction ||
+		  (tractionShearVertex < friction && slipShearVertex > 0.0)) {
+		// traction is limited by friction, so have sliding
+		std::cout << "LIMIT TRACTION, HAVE SLIDING" << std::endl;
+
+		// Update slip based on value required to stick versus friction
+		dLagrangeTpdtVertex[0] = (tractionShearVertex-friction) *
+		  tractionTpdtVertex[0] / tractionShearVertex * (*areaVertex);
+		dLagrangeTpdtVertex[1] = (tractionShearVertex-friction) *
+		  tractionTpdtVertex[1] / tractionShearVertex * (*areaVertex);
+		slipVertex[0] += 
+		  Spp * dLagrangeTpdtVertex[0] +
+		  Spq * dLagrangeTpdtVertex[1];
+
+		slipVertex[1] += 
+		  Spq * dLagrangeTpdtVertex[0] +
+		  Sqq * dLagrangeTpdtVertex[1];
+
+	      std::cout << "Estimated slip: "
+			<< "  " << slipVertex[0]
+			<< "  " << slipVertex[1]
+			<< "  " << slipVertex[2]
+			<< std::endl;
+
+		// Limit traction
+		tractionTpdtVertex[0] = 
+		  friction * tractionTpdtVertex[0] / tractionShearVertex;
+		tractionTpdtVertex[1] = 
+		  friction * tractionTpdtVertex[1] / tractionShearVertex;
+	      } else {
+		// else friction exceeds value necessary, so stick
+		std::cout << "STICK" << std::endl;
+		// no changes to solution
+	      } // if/else
+	    } else {
+	      // if in tension, then traction is zero.
+	      std::cout << "FAULT IN TENSION" << std::endl;
+	      
+		// Update slip based on value required to stick versus
+		// zero traction
+	      dLagrangeTpdtVertex[0] = tractionTpdtVertex[0] * (*areaVertex);
+	      dLagrangeTpdtVertex[1] = tractionTpdtVertex[1] * (*areaVertex);
+	      dLagrangeTpdtVertex[2] = tractionTpdtVertex[2] * (*areaVertex);
+	      slipVertex[0] += 
+		Spp * dLagrangeTpdtVertex[0] +
+		Spq * dLagrangeTpdtVertex[1] +
+		Spr * dLagrangeTpdtVertex[2];
+	      slipVertex[1] += 
+		Spq * dLagrangeTpdtVertex[0] +
+		Sqq * dLagrangeTpdtVertex[1] +
+		Sqr * dLagrangeTpdtVertex[2];
+	      slipVertex[2] += 
+		Spr * dLagrangeTpdtVertex[0] +
+		Sqr * dLagrangeTpdtVertex[1] +
+		Srr * dLagrangeTpdtVertex[2];
+
+	      std::cout << "Estimated slip: "
+			<< "  " << slipVertex[0]
+			<< "  " << slipVertex[1]
+			<< "  " << slipVertex[2]
+			<< std::endl;
+
+	      // Set traction to zero
+	      tractionTpdtVertex = 0.0;
+	    } // else
+	    break;
+	  } // case 3
+	default :
+	  assert(0);
+	} // switch
+      // TEMPORARY END
+      
+      // Update Lagrange multiplier values.
+      // :KLUDGE: (TEMPORARY) Solution at Lagrange constraint vertices
+      // is the Lagrange multiplier value, which is currently the
+      // force.  Compute force by multipling traction by area
+      lagrangeTIncrVertex =
+	(tractionTpdtVertex - tractionTVertex) * (*areaVertex);
+      assert(lagrangeTIncrVertex.size() == 
+	     dispTIncrSection->getFiberDimension(vertexMesh));
+      dispTIncrSection->updatePoint(vertexMesh, &lagrangeTIncrVertex[0]);
+      
+      // Update the slip estimate based on adjustment to the Lagrange
+      // multiplier values.
+      assert(slipVertex.size() == 
+	     slipSection->getFiberDimension(vertexFault));
+      slipSection->updatePoint(vertexFault, &slipVertex[0]);
+    } // if
+  
+  dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
+  slipSection->view("AFTER SLIP");
+
+  // FIX THIS
+  PetscLogFlops(0);
+} // constrainSolnSpace
+
+// ----------------------------------------------------------------------
+// Verify configuration is acceptable.
+void
+pylith::faults::FaultCohesiveDynL::verifyConfiguration(
+					 const topology::Mesh& mesh) const
+{ // verifyConfiguration
+  assert(0 != _quadrature);
+
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+  assert(!sieveMesh.isNull());
+
+  if (!sieveMesh->hasIntSection(label())) {
+    std::ostringstream msg;
+    msg << "Mesh missing group of vertices '" << label()
+	<< " for boundary condition.";
+    throw std::runtime_error(msg.str());
+  } // if  
+
+  // check compatibility of mesh and quadrature scheme
+  const int dimension = mesh.dimension()-1;
+  if (_quadrature->cellDim() != dimension) {
+    std::ostringstream msg;
+    msg << "Dimension of reference cell in quadrature scheme (" 
+	<< _quadrature->cellDim() 
+	<< ") does not match dimension of cells in mesh (" 
+	<< dimension << ") for fault '" << label()
+	<< "'.";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  const int numCorners = _quadrature->refGeometry().numCorners();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", id());
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    const int cellNumCorners = sieveMesh->getNumCellCorners(*c_iter);
+    if (3*numCorners != cellNumCorners) {
+      std::ostringstream msg;
+      msg << "Number of vertices in reference cell (" << numCorners 
+	  << ") is not compatible with number of vertices (" << cellNumCorners
+	  << ") in cohesive cell " << *c_iter << " for fault '"
+	  << label() << "'.";
+      throw std::runtime_error(msg.str());
+    } // if
+  } // for
+} // verifyConfiguration
+
+// ----------------------------------------------------------------------
+// Get vertex field associated with integrator.
+const pylith::topology::Field<pylith::topology::SubMesh>&
+pylith::faults::FaultCohesiveDynL::vertexField(
+				  const char* name,
+				  const topology::SolutionFields* fields)
+{ // vertexField
+  assert(0 != _faultMesh);
+  assert(0 != _quadrature);
+  assert(0 != _normalizer);
+  assert(0 != _fields);
+
+  const int cohesiveDim = _faultMesh->dimension();
+  const int spaceDim = _quadrature->spaceDim();
+
+  const int slipStrLen = strlen("final_slip");
+  const int timeStrLen = strlen("slip_time");
+
+  double scale = 0.0;
+  int fiberDim = 0;
+  if (0 == strcasecmp("slip", name)) {
+    const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+    return slip;
+
+  } else if (cohesiveDim > 0 && 0 == strcasecmp("strike_dir", name)) {
+    const ALE::Obj<RealSection>& orientationSection =
+      _fields->get("orientation").section();
+    assert(!orientationSection.isNull());
+    const ALE::Obj<RealSection>& dirSection =
+      orientationSection->getFibration(0);
+    assert(!dirSection.isNull());
+    _allocateBufferVertexVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+      _fields->get("buffer (vector)");
+    buffer.copy(dirSection);
+    buffer.label("strike_dir");
+    buffer.scale(1.0);
+    return buffer;
+
+  } else if (2 == cohesiveDim && 0 == strcasecmp("dip_dir", name)) {
+    const ALE::Obj<RealSection>& orientationSection =
+      _fields->get("orientation").section();
+    assert(!orientationSection.isNull());
+    const ALE::Obj<RealSection>& dirSection =
+      orientationSection->getFibration(1);
+    _allocateBufferVertexVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+      _fields->get("buffer (vector)");
+    buffer.copy(dirSection);
+    buffer.label("dip_dir");
+    buffer.scale(1.0);
+    return buffer;
+
+  } else if (0 == strcasecmp("normal_dir", name)) {
+    const ALE::Obj<RealSection>& orientationSection =
+      _fields->get("orientation").section();
+    assert(!orientationSection.isNull());
+    const int space = 
+      (0 == cohesiveDim) ? 0 : (1 == cohesiveDim) ? 1 : 2;
+    const ALE::Obj<RealSection>& dirSection =
+      orientationSection->getFibration(space);
+    assert(!dirSection.isNull());
+    _allocateBufferVertexVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+      _fields->get("buffer (vector)");
+    buffer.copy(dirSection);
+    buffer.label("normal_dir");
+    buffer.scale(1.0);
+    return buffer;
+
+  } else if (0 == strncasecmp("initial_traction", name, slipStrLen)) {
+    assert(0 != _dbInitial);
+    const topology::Field<topology::SubMesh>& initialTraction =
+      _fields->get("initial traction");
+    return initialTraction;
+
+  } else if (0 == strcasecmp("traction", name)) {
+    assert(0 != fields);
+    const topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
+    _allocateBufferVertexVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+      _fields->get("buffer (vector)");
+    _calcTractions(&buffer, dispT);
+    return buffer;
+
+  } else {
+    std::ostringstream msg;
+    msg << "Request for unknown vertex field '" << name
+	<< "' for fault '" << label() << "'.";
+    throw std::runtime_error(msg.str());
+  } // else
+
+  
+  // Satisfy return values
+  assert(0 != _fields);
+  const topology::Field<topology::SubMesh>& buffer = 
+    _fields->get("buffer (vector)");
+  return buffer;
+} // vertexField
+
+// ----------------------------------------------------------------------
+// Get cell field associated with integrator.
+const pylith::topology::Field<pylith::topology::SubMesh>&
+pylith::faults::FaultCohesiveDynL::cellField(
+				      const char* name,
+				      const topology::SolutionFields* fields)
+{ // cellField
+  // Should not reach this point if requested field was found
+  std::ostringstream msg;
+  msg << "Request for unknown cell field '" << name
+      << "' for fault '" << label() << ".";
+  throw std::runtime_error(msg.str());
+
+  // Satisfy return values
+  assert(0 != _fields);
+  const topology::Field<topology::SubMesh>& buffer = 
+    _fields->get("buffer (vector)");
+  return buffer;
+} // cellField
+
+// ----------------------------------------------------------------------
+// Calculate orientation at fault vertices.
+void
+pylith::faults::FaultCohesiveDynL::_calcOrientation(const double upDir[3],
+						   const double normalDir[3])
+{ // _calcOrientation
+  assert(0 != upDir);
+  assert(0 != normalDir);
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+
+  double_array upDirArray(upDir, 3);
+
+  // Get vertices in fault mesh.
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
+    faultSieveMesh->depthStratum(0);
+  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  
+  // Containers for orientation information.
+  const int cohesiveDim = _faultMesh->dimension();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int orientationSize = spaceDim*spaceDim;
+  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
+  const double_array& verticesRef = cellGeometry.vertices();
+  const int jacobianSize = (cohesiveDim > 0) ? spaceDim * cohesiveDim : 1;
+  const double_array& quadWts = _quadrature->quadWts();
+  double_array jacobian(jacobianSize);
+  double jacobianDet = 0;
+  double_array orientationVertex(orientationSize);
+  double_array coordinatesCell(numBasis*spaceDim);
+  double_array refCoordsVertex(cohesiveDim);
+
+  // Allocate orientation field.
+  _fields->add("orientation", "orientation");
+  topology::Field<topology::SubMesh>& orientation = _fields->get("orientation");
+  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+  orientation.newSection(slip, orientationSize);
+  const ALE::Obj<RealSection>& orientationSection = orientation.section();
+  assert(!orientationSection.isNull());
+  // Create subspaces for along-strike, up-dip, and normal directions
+  for (int iDim=0; iDim <= cohesiveDim; ++iDim)
+    orientationSection->addSpace();
+  for (int iDim=0; iDim <= cohesiveDim; ++iDim)
+    orientationSection->setFiberDimension(vertices, spaceDim, iDim);
+  orientation.allocate();
+  orientation.zero();
+  
+  // Get fault cells.
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+    faultSieveMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Compute orientation of fault at constraint vertices
+
+  // Get section containing coordinates of vertices
+  const ALE::Obj<RealSection>& coordinatesSection = 
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinatesSection.isNull());
+  topology::Mesh::RestrictVisitor coordinatesVisitor(*coordinatesSection,
+						     coordinatesCell.size(),
+						     &coordinatesCell[0]);
+
+  // Set orientation function
+  assert(cohesiveDim == _quadrature->cellDim());
+  assert(spaceDim == _quadrature->spaceDim());
+
+  // Loop over cohesive cells, computing orientation weighted by
+  // jacobian at constraint vertices
+  
+  const ALE::Obj<SieveSubMesh::sieve_type>& sieve = faultSieveMesh->getSieve();
+  assert(!sieve.isNull());
+  typedef ALE::SieveAlg<SieveSubMesh> SieveAlg;
+
+  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve, (size_t) pow(sieve->getMaxConeSize(), std::max(0, faultSieveMesh->depth())));
+
+  for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Get orientations at fault cell's vertices.
+    coordinatesVisitor.clear();
+    faultSieveMesh->restrictClosure(*c_iter, coordinatesVisitor);
+
+    ncV.clear();
+    ALE::ISieveTraversal<SieveSubMesh::sieve_type>::orientedClosure(*sieve, *c_iter, ncV);
+    const int               coneSize = ncV.getSize();
+    const Mesh::point_type *cone     = ncV.getPoints();
+    
+    for (int v=0; v < coneSize; ++v) {
+      // Compute Jacobian and determinant of Jacobian at vertex
+      memcpy(&refCoordsVertex[0], &verticesRef[v*cohesiveDim],
+	     cohesiveDim*sizeof(double));
+      cellGeometry.jacobian(&jacobian, &jacobianDet, coordinatesCell,
+			    refCoordsVertex);
+
+      // Compute orientation
+      cellGeometry.orientation(&orientationVertex, jacobian, jacobianDet, 
+			       upDirArray);
+      
+      // Update orientation
+      orientationSection->updateAddPoint(cone[v], &orientationVertex[0]);
+    } // for
+  } // for
+
+  //orientation.view("ORIENTATION BEFORE COMPLETE");
+
+  // Assemble orientation information
+  orientation.complete();
+
+  // Loop over vertices, make orientation information unit magnitude
+  double_array vertexDir(orientationSize);
+  int count = 0;
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter, ++count) {
+    orientationVertex = 0.0;
+    orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
+				      orientationVertex.size());
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      double mag = 0;
+      for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
+	mag += pow(orientationVertex[index+jDim],2);
+      mag = sqrt(mag);
+      assert(mag > 0.0);
+      for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
+	orientationVertex[index+jDim] /= mag;
+    } // for
+
+    orientationSection->updatePoint(*v_iter, &orientationVertex[0]);
+  } // for
+  PetscLogFlops(count * orientationSize * 4);
+
+  if (2 == cohesiveDim && vertices->size() > 0) {
+    // Check orientation of first vertex, if dot product of fault
+    // normal with preferred normal is negative, flip up/down dip
+    // direction.
+    //
+    // If the user gives the correct normal direction (points from
+    // footwall to ahanging wall), we should end up with
+    // left-lateral-slip, reverse-slip, and fault-opening for positive
+    // slip values.
+    //
+    // When we flip the up/down dip direction, we create a left-handed
+    // strike/dip/normal coordinate system, but it gives the correct
+    // sense of slip. In reality the strike/dip/normal directions that
+    // are used are the opposite of what we would want, but we cannot
+    // flip the fault normal direction because it is tied to how the
+    // cohesive cells are created.
+    
+    assert(vertices->size() > 0);
+    orientationSection->restrictPoint(*vertices->begin(), &orientationVertex[0],
+				      orientationVertex.size());
+				      
+    assert(3 == spaceDim);
+    double_array normalDirVertex(&orientationVertex[6], 3);
+    const double normalDot = 
+      normalDir[0]*normalDirVertex[0] +
+      normalDir[1]*normalDirVertex[1] +
+      normalDir[2]*normalDirVertex[2];
+    
+    const int istrike = 0;
+    const int idip = 3;
+    const int inormal = 6;
+    if (normalDot < 0.0) {
+      // Flip dip direction
+      for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+	   v_iter != verticesEnd;
+	   ++v_iter) {
+	orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
+					  orientationVertex.size());
+	assert(9 == orientationSection->getFiberDimension(*v_iter));
+	for (int iDim=0; iDim < 3; ++iDim) // flip dip
+	  orientationVertex[idip+iDim] *= -1.0;
+	
+	// Update direction
+	orientationSection->updatePoint(*v_iter, &orientationVertex[0]);
+      } // for
+      PetscLogFlops(5 + count * 3);
+    } // if
+  } // if
+
+  //orientation.view("ORIENTATION");
+} // _calcOrientation
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveDynL::_calcArea(void)
+{ // _calcArea
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+
+  // Containers for area information
+  const int cellDim = _quadrature->cellDim();
+  const int numBasis = _quadrature->numBasis();
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int spaceDim = _quadrature->spaceDim();
+  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  double jacobianDet = 0;
+  double_array areaCell(numBasis);
+
+  // Get vertices in fault mesh.
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
+    faultSieveMesh->depthStratum(0);
+  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  
+  // Allocate area field.
+  _fields->add("area", "area");
+
+  topology::Field<topology::SubMesh>& area = _fields->get("area");
+  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+  area.newSection(slip, 1);
+  area.allocate();
+  area.zero();
+  const ALE::Obj<RealSection>& areaSection = area.section();
+  assert(!areaSection.isNull());
+  topology::Mesh::UpdateAddVisitor areaVisitor(*areaSection, &areaCell[0]);  
+  
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+    faultSieveMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Loop over cells in fault mesh, compute area
+  for (SieveSubMesh::label_sequence::iterator c_iter = cellsBegin;
+      c_iter != cellsEnd;
+      ++c_iter) {
+    areaCell = 0.0;
+    
+    // Compute geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Compute area
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+        const double dArea = wt*basis[iQuad*numBasis+iBasis];
+	areaCell[iBasis] += dArea;
+      } // for
+    } // for
+    areaVisitor.clear();
+    faultSieveMesh->updateClosure(*c_iter, areaVisitor);
+
+    PetscLogFlops( numQuadPts*(1+numBasis*2) );
+  } // for
+
+  // Assemble area information
+  area.complete();
+
+#if 0 // DEBUGGING
+  area.view("AREA");
+  //_faultMesh->getSendOverlap()->view("Send fault overlap");
+  //_faultMesh->getRecvOverlap()->view("Receive fault overlap");
+#endif
+} // _calcArea
+
+// ----------------------------------------------------------------------
+// Compute change in tractions on fault surface using solution.
+// NOTE: We must convert vertex labels to fault vertex labels
+void
+pylith::faults::FaultCohesiveDynL::_calcTractions(
+			     topology::Field<topology::SubMesh>* tractions,
+			     const topology::Field<topology::Mesh>& dispT)
+{ // _calcTractionsChange
+  assert(0 != tractions);
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+  assert(0 != _normalizer);
+
+  // Get vertices from mesh of domain.
+  const ALE::Obj<SieveMesh>& sieveMesh = dispT.mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+
+  // Get fault vertices
+  const ALE::Obj<SieveMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& fvertices = 
+    faultSieveMesh->depthStratum(0);
+  const SieveSubMesh::label_sequence::iterator fverticesBegin = fvertices->begin();
+  const SieveSubMesh::label_sequence::iterator fverticesEnd = fvertices->end();
+
+  // Get sections.
+  const ALE::Obj<RealSection>& areaSection = 
+    _fields->get("area").section();
+  assert(!areaSection.isNull());
+  const ALE::Obj<RealSection>& dispTSection = dispT.section();
+  assert(!dispTSection.isNull());  
+
+  // Fiber dimension of tractions matches spatial dimension.
+  const int fiberDim = _quadrature->spaceDim();
+  double_array tractionsVertex(fiberDim);
+
+  // Allocate buffer for tractions field (if nec.).
+  const ALE::Obj<RealSection>& tractionsSection = tractions->section();
+  if (tractionsSection.isNull()) {
+    ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
+    //logger.stagePush("Fault");
+
+    const topology::Field<topology::SubMesh>& slip =_fields->get("slip");
+    tractions->newSection(slip, fiberDim);
+    tractions->allocate();
+
+    //logger.stagePop();
+  } // if
+  assert(!tractionsSection.isNull());
+  const double pressureScale = _normalizer->pressureScale();
+  tractions->label("traction");
+  tractions->scale(pressureScale);
+  tractions->zero();
+
+  // Set tractions to initial tractions if they exist
+  if (0 != _dbInitial) {
+    const ALE::Obj<RealSection>& initialTractionSection = 
+      _fields->get("initial traction").section();
+    assert(!initialTractionSection.isNull());
+    for (SubMesh::label_sequence::iterator v_iter = fverticesBegin;
+	 v_iter != fverticesEnd;
+	 ++v_iter) {
+      initialTractionSection->restrictPoint(*v_iter, &tractionsVertex[0],
+					    tractionsVertex.size());
+      assert(fiberDim == tractionsSection->getFiberDimension(*v_iter));
+      tractionsSection->updatePoint(*v_iter, &tractionsVertex[0]);
+    } // for
+  } // if
+
+  const int numFaultVertices = fvertices->size();
+  Mesh::renumbering_type& renumbering = faultSieveMesh->getRenumbering();
+  const SieveSubMesh::renumbering_type::const_iterator renumberingEnd =
+    renumbering.end();
+
+#if 0 // DEBUGGING, MOVE TO SEPARATE CHECK METHOD
+  // Check fault mesh and volume mesh coordinates
+  const ALE::Obj<RealSection>& coordinates  = mesh->getRealSection("coordinates");
+  const ALE::Obj<RealSection>& fCoordinates = _faultMesh->getRealSection("coordinates");
+
+  for (Mesh::label_sequence::iterator v_iter = verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter) {
+    if (renumbering.find(*v_iter) != renumberingEnd) {
+      const int     v    = *v_iter;
+      const int     dim  = coordinates->getFiberDimension(*v_iter);
+      const double *a    = coordinates->restrictPoint(*v_iter);
+      const int     fv   = renumbering[*v_iter];
+      const int     fDim = fCoordinates->getFiberDimension(fv);
+      const double *fa   = fCoordinates->restrictPoint(fv);
+
+      if (dim != fDim) throw ALE::Exception("Coordinate fiber dimensions do not match");
+      for(int d = 0; d < dim; ++d) {
+        if (a[d] != fa[d]) throw ALE::Exception("Coordinate values do not match");
+      }
+    }
+  }
+#endif
+
+  for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; 
+       v_iter != verticesEnd;
+       ++v_iter)
+    if (renumbering.find(*v_iter) != renumberingEnd) {
+      const int vertexMesh = *v_iter;
+      const int vertexFault = renumbering[*v_iter];
+      assert(fiberDim == dispTSection->getFiberDimension(vertexMesh));
+      assert(fiberDim == tractionsSection->getFiberDimension(vertexFault));
+      assert(1 == areaSection->getFiberDimension(vertexFault));
+
+      const double* dispTVertex = dispTSection->restrictPoint(vertexMesh);
+      assert(0 != dispTVertex);
+      const double* areaVertex = areaSection->restrictPoint(vertexFault);
+      assert(0 != areaVertex);
+
+      for (int i=0; i < fiberDim; ++i)
+	tractionsVertex[i] = dispTVertex[i] / areaVertex[0];
+
+      tractionsSection->updatePointAllAdd(vertexFault, &tractionsVertex[0]);
+    } // if
+
+  PetscLogFlops(numFaultVertices * (1 + fiberDim) );
+
+#if 0 // DEBUGGING
+  tractions->view("TRACTIONS");
+#endif
+} // _calcTractions
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveDynL::_getInitialTractions(void)
+{ // _getInitialTractions
+  assert(0 != _normalizer);
+  assert(0 != _quadrature);
+
+  const double pressureScale = _normalizer->pressureScale();
+  const double lengthScale = _normalizer->lengthScale();
+
+  const int spaceDim = _quadrature->spaceDim();
+  const int numQuadPts = _quadrature->numQuadPts();
+
+  if (0 != _dbInitial) { // Setup initial values, if provided.
+    // Create section to hold initial tractions.
+    _fields->add("initial traction", "initial_traction");
+    topology::Field<topology::SubMesh>& traction = _fields->get("initial traction");
+    topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+    traction.cloneSection(slip);
+    traction.scale(pressureScale);
+    const ALE::Obj<RealSection>& tractionSection = traction.section();
+    assert(!tractionSection.isNull());
+
+    _dbInitial->open();
+    switch (spaceDim)
+      { // switch
+      case 1 : {
+	const char* valueNames[] = {"traction-normal"};
+	_dbInitial->queryVals(valueNames, 1);
+	break;
+      } // case 1
+      case 2 : {
+	const char* valueNames[] = {"traction-shear", "traction-normal"};
+	_dbInitial->queryVals(valueNames, 2);
+	break;
+      } // case 2
+      case 3 : {
+	const char* valueNames[] = {"traction-shear-leftlateral",
+				    "traction-shear-updip",
+				    "traction-normal"};
+	_dbInitial->queryVals(valueNames, 3);
+	break;
+      } // case 3
+      default :
+	std::cerr << "Bad spatial dimension '" << spaceDim << "'." << std::endl;
+	assert(0);
+	throw std::logic_error("Bad spatial dimension in Neumann.");
+      } // switch
+
+    // Get 'fault' vertices.
+    const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+    assert(!faultSieveMesh.isNull());
+    const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
+      faultSieveMesh->depthStratum(0);
+    assert(!vertices.isNull());
+    const SieveSubMesh::label_sequence::iterator verticesBegin =
+      vertices->begin();
+    const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+
+    const int numBasis = _quadrature->numBasis();
+    const int spaceDim = _quadrature->spaceDim();
+  
+    // Containers for database query results and quadrature coordinates in
+    // reference geometry.
+    double_array tractionVertex(spaceDim);
+    double_array coordsVertex(spaceDim);
+    
+    // Get sections.
+    const ALE::Obj<RealSection>& coordinates =
+      faultSieveMesh->getRealSection("coordinates_dimensioned");
+    assert(!coordinates.isNull());
+    const spatialdata::geocoords::CoordSys* cs = _faultMesh->coordsys();
+    
+    // Loop over vertices in fault mesh and perform queries.
+    for (SieveSubMesh::label_sequence::iterator v_iter = verticesBegin;
+	 v_iter != verticesEnd;
+	 ++v_iter) {
+      coordinates->restrictPoint(*v_iter, 
+				 &coordsVertex[0], coordsVertex.size());
+      
+      tractionVertex = 0.0;
+      const int err = _dbInitial->query(&tractionVertex[0], spaceDim,
+					&coordsVertex[0], spaceDim, cs);
+      if (err) {
+	std::ostringstream msg;
+	msg << "Could not find initial tractions at (";
+	for (int i=0; i < spaceDim; ++i)
+	  msg << " " << coordsVertex[i];
+	msg << ") for dynamic fault interface " << label() << "\n"
+	    << "using spatial database " << _dbInitial->label() << ".";
+	throw std::runtime_error(msg.str());
+      } // if
+	
+      _normalizer->nondimensionalize(&tractionVertex[0], tractionVertex.size(),
+				     pressureScale);
+      
+      // Update section
+      assert(tractionVertex.size() == tractionSection->getFiberDimension(*v_iter));
+      tractionSection->updatePoint(*v_iter, &tractionVertex[0]);
+    } // for
+    
+    _dbInitial->close();
+
+    // debugging
+    traction.view("INITIAL TRACTIONS");
+  } // if
+} // _getInitialTractions
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveDynL::_initConstitutiveModel(void)
+{ // _initConstitutiveModel
+  // :TODO: ADD STUFF HERE
+} // _initConstitutiveModel
+
+// ----------------------------------------------------------------------
+// Update diagonal of Jacobian at conventional vertices i and j
+//  associated with Lagrange vertex k.
+void
+pylith::faults::FaultCohesiveDynL::_updateJacobianDiagonal(
+				     const topology::SolutionFields& fields)
+{ // _updateJacobianDiagonal
+  assert(0 != _fields);
+
+  // Get cohesive cells
+  const ALE::Obj<SieveMesh>& sieveMesh = fields.mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& cellsCohesive = 
+    sieveMesh->getLabelStratum("material-id", id());
+  assert(!cellsCohesive.isNull());
+  const SieveMesh::label_sequence::iterator cellsCohesiveBegin =
+    cellsCohesive->begin();
+  const SieveMesh::label_sequence::iterator cellsCohesiveEnd =
+    cellsCohesive->end();
+  const int cellsCohesiveSize = cellsCohesive->size();
+
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  const int spaceDim = _quadrature->spaceDim();
+  const int numConstraintVert = _quadrature->numBasis();
+  const int numCorners = 3*numConstraintVert; // cohesive cell
+
+  // Get section information
+  double_array jacobianDiagCell(numCorners*spaceDim);
+  const ALE::Obj<RealSection>& jacobianDiagSection = 
+    fields.get("Jacobian diagonal").section();
+  assert(!jacobianDiagSection.isNull());  
+  topology::Mesh::RestrictVisitor jacobianDiagVisitor(*jacobianDiagSection,
+						      jacobianDiagCell.size(),
+						      &jacobianDiagCell[0]);
+
+  double_array jacobianDiagFaultCell(numConstraintVert*2*spaceDim);
+  const ALE::Obj<RealSection>& jacobianDiagFaultSection = 
+    _fields->get("Jacobian diagonal").section();
+  topology::Mesh::UpdateAllVisitor jacobianDiagFaultVisitor(*jacobianDiagFaultSection,
+							    &jacobianDiagFaultCell[0]);
+
+  for (SieveMesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
+       c_iter != cellsCohesiveEnd;
+       ++c_iter) {
+    const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
+
+    jacobianDiagVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, jacobianDiagVisitor);
+
+    for (int iConstraint=0, indexF=0; 
+	 iConstraint < numConstraintVert;
+	 ++iConstraint) {
+      // Blocks in cell matrix associated with normal cohesive
+      // vertices i and j and constraint vertex k
+      const int indexI = iConstraint;
+      const int indexJ = iConstraint +   numConstraintVert;
+      const int indexK = iConstraint + 2*numConstraintVert;
+      
+      // Diagonal for vertex i
+      for (int iDim=0; iDim < spaceDim; ++iDim) {
+	jacobianDiagFaultCell[indexF+iDim] = 
+	  jacobianDiagCell[indexI*spaceDim+iDim];
+	assert(jacobianDiagFaultCell[indexF+iDim] > 0.0);
+      } // for
+      indexF += spaceDim;
+
+      // Diagonal for vertex j
+      for (int iDim=0; iDim < spaceDim; ++iDim) {
+	jacobianDiagFaultCell[indexF+iDim] = 
+	  jacobianDiagCell[indexJ*spaceDim+iDim];
+	assert(jacobianDiagFaultCell[indexF+iDim] > 0.0);
+      } // for
+      indexF += spaceDim;
+    } // for
+
+    // Insert cell contribution into 
+    jacobianDiagFaultVisitor.clear();
+    faultSieveMesh->updateClosure(c_fault, jacobianDiagFaultVisitor);
+  } // for
+} // _updateJacobianDiagonal
+
+// ----------------------------------------------------------------------
+// Allocate buffer for vector field.
+void
+pylith::faults::FaultCohesiveDynL::_allocateBufferVertexVectorField(void)
+{ // _allocateBufferVertexVectorField
+  assert(0 != _fields);
+  if (_fields->hasField("buffer (vector)"))
+    return;
+
+  ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
+  logger.stagePush("Output");
+
+  // Create vector field; use same shape/chart as slip field.
+  assert(0 != _faultMesh);
+  _fields->add("buffer (vector)", "buffer");
+  topology::Field<topology::SubMesh>& buffer =
+    _fields->get("buffer (vector)");
+  const topology::Field<topology::SubMesh>& slip = 
+    _fields->get("slip");
+  buffer.cloneSection(slip);
+  buffer.zero();
+
+  logger.stagePop();
+} // _allocateBufferVertexVectorField
+
+// ----------------------------------------------------------------------
+// Allocate buffer for scalar field.
+void
+pylith::faults::FaultCohesiveDynL::_allocateBufferVertexScalarField(void)
+{ // _allocateBufferVertexScalarField
+  assert(0 != _fields);
+  if (_fields->hasField("buffer (scalar)"))
+    return;
+
+  ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
+  logger.stagePush("Output");
+
+  // Create vector field; use same shape/chart as area field.
+  assert(0 != _faultMesh);
+  _fields->add("buffer (scalar)", "buffer");
+  topology::Field<topology::SubMesh>& buffer =
+    _fields->get("buffer (scalar)");
+  const topology::Field<topology::SubMesh>& area = _fields->get("area");
+  buffer.cloneSection(area);
+  buffer.zero();
+
+  logger.stagePop();
+} // _allocateBufferVertexScalarField
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/faults/FaultCohesiveDynL.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,299 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/FaultCohesiveDynL.hh
+ *
+ * @brief C++ implementation for a fault surface with spontaneous
+ * (dynamic) slip implemented with cohesive elements.
+ */
+
+#if !defined(pylith_faults_faultcohesivedynl_hh)
+#define pylith_faults_faultcohesivedynl_hh
+
+// Include directives ---------------------------------------------------
+#include "FaultCohesive.hh" // ISA FaultCohesive
+
+#include "pylith/topology/SubMesh.hh" // ISA Integrator<Quadrature<SubMesh> >
+#include "pylith/feassemble/Quadrature.hh" // ISA Integrator<Quadrature>
+#include "pylith/feassemble/Integrator.hh" // ISA Integrator
+
+#include <string> // HASA std::string
+
+// FaultCohesiveDynL -----------------------------------------------------
+/**
+ * @brief C++ implementation for a fault surface with spontaneous
+ * (dynamic) slip implemented with cohesive elements.
+ *
+ * The fault constitutive model is implemented using Lagrange
+ * multipliers. The constraints associated with stick/slip behavior
+ * are associated with "constraint" vertices which sit between the
+ * pair of vertices on each side of the fault.
+ *
+ * The ordering of vertices in a cohesive cell is the vertices on the
+ * "negative" side of the fault, the corresponding entries on the
+ * "positive" side of the fault, and then the corresponding constraint
+ * vertices.
+ *
+ * The system without Lagrange multipliers is
+ *
+ * [A(t+dt)]{u(t+dt)} = {b(t+dt)}
+ *
+ * With Lagrange multipliers this system becomes
+ *
+ * [A(t+dt) C^T ]{ u(t+dt) } = {b(t+dt)}
+ * [ C      0   ]{ L(t+dt) }   {D(t+dt)}
+ *
+ * where C is the matrix of Lagrange constraints, L is the vector of
+ * Lagrange multiplies (internal forces in this case), and D is the
+ * fault slip.
+ *
+ * We solve for the increment in the displacement field, so we rewrite
+ * the system as
+ *
+ * [A(t+dt) C^T ]{ du(t) } = {b(t+dt)} - [A(t+dt) C^T ]{ u(t) }
+ * [ C      0   ]{ dL(t) }   {D(t+dt)}   [ C      0   ]{ L(t) }
+ * 
+ * We form the residual as
+ *
+ * {r(t+dt)} = {b(t+dt)} - [A(t+dt) C^T ]{ u(t)+du(t) }
+ *             {D(t+dt)}   [ C      0   ]{ L(t)+dL(t) }
+ * 
+ * The terms in the residual contributing to the DOF at the Lagrange
+ * vertices are
+ *
+ * {r(t+dt)} = {D(t+dt)} - [C]{u(t)+dt(t)}
+ *
+ * The first term, {D(t+dt)}, does not involve integration over the
+ * cohesive cells, so it does not require assembling over cohesive
+ * cells or processors. We compute the term in
+ * integrateResidualAssembled().
+ *
+ * The term in the residual contributing to the DOF at the
+ * non-Lagrange vertices of the cohesive cells is
+ *
+ * {r(t+dt)} = -[C]^T{L(t)+dL(t)}
+ *
+ * We integrate the Lagrange multiplier term and the relative
+ * displacement term over the cohesive cells, because this introduces
+ * weighting of the orientation of the fault for the direction of slip
+ * at the vertices of the cohesive cells.
+ */
+class pylith::faults::FaultCohesiveDynL : public FaultCohesive
+{ // class FaultCohesiveDynL
+  friend class TestFaultCohesiveDynL; // unit testing
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  FaultCohesiveDynL(void);
+
+  /// Destructor.
+  virtual
+  ~FaultCohesiveDynL(void);
+
+  /// Deallocate PETSc and local data structures.
+  virtual
+  void deallocate(void);
+  
+  /** Sets the spatial database for the inital tractions.
+   *
+   * @param db spatial database for initial tractions
+   */
+  void dbInitial(spatialdata::spatialdb::SpatialDB* db);
+  
+  /** Initialize fault. Determine orientation and setup boundary
+   * condition parameters.
+   *
+   * @param mesh Finite-element mesh.
+   * @param upDir Direction perpendicular to along-strike direction that is 
+   *   not collinear with fault normal (usually "up" direction but could 
+   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+   * @param normalDir General preferred direction for fault normal
+   *   (used to pick which of two possible normal directions for
+   *   interface; only applies to fault surfaces in a 3-D domain).
+   */
+  void initialize(const topology::Mesh& mesh,
+		  const double upDir[3],
+		  const double normalDir[3]);
+
+  /** Split solution field for separate preconditioning of normal DOF
+   * from DOF associated with Lagrange multipliers.
+   *
+   * @param field Solution field.
+   */
+  void splitField(topology::Field<topology::Mesh>* field);
+
+  /** Integrate contributions to residual term (r) for operator that
+   * require assembly across processors.
+   *
+   * @param residual Field containing values for residual
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateResidual(const topology::Field<topology::Mesh>& residual,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
+  /** Integrate contributions to residual term (r) for operator that
+   * do not require assembly across cells, vertices, or processors.
+   *
+   * @param residual Field containing values for residual
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
+				  const double t,
+				  topology::SolutionFields* const fields);
+
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator that do not require assembly across cells, vertices, or
+   * processors.
+   *
+   * @param jacobian Sparse matrix
+   * @param t Current time
+   * @param fields Solution fields
+   * @param mesh Finite-element mesh
+   */
+  void integrateJacobianAssembled(topology::Jacobian* jacobian,
+				  const double t,
+				  topology::SolutionFields* const fields);
+
+  /** Update state variables as needed.
+   *
+   * @param t Current time
+   * @param fields Solution fields
+   * @param mesh Finite-element mesh
+   */
+  void updateStateVars(const double t,
+		       topology::SolutionFields* const fields);
+
+  /** Constrain solution space based on friction.
+   *
+   * @param fields Solution fields.
+   * @param t Current time.
+   * @param jacobian Sparse matrix for system Jacobian.
+   */
+  void constrainSolnSpace(topology::SolutionFields* const fields,
+			  const double t,
+			  const topology::Jacobian& jacobian);
+
+  /** Verify configuration is acceptable.
+   *
+   * @param mesh Finite-element mesh
+   */
+  void verifyConfiguration(const topology::Mesh& mesh) const;
+
+  /** Get vertex field associated with integrator.
+   *
+   * @param name Name of cell field.
+   * @param fields Solution fields.
+   * @returns Vertex field.
+   */
+  const topology::Field<topology::SubMesh>&
+  vertexField(const char* name,
+	      const topology::SolutionFields* fields =0);
+
+  /** Get cell field associated with integrator.
+   *
+   * @param name Name of cell field.
+   * @param fields Solution fields.
+   * @returns Cell field.
+   */
+  const topology::Field<topology::SubMesh>&
+  cellField(const char* name,
+	    const topology::SolutionFields* fields =0);
+
+  /** Cohesive cells use Lagrange multiplier constraints?
+   *
+   * @returns True if implementation using Lagrange multiplier
+   * constraints, false otherwise.
+   */
+  bool useLagrangeConstraints(void) const;
+
+  /** Get fields associated with fault.
+   *
+   * @returns Fields associated with fault.
+   */
+  const topology::Fields<topology::Field<topology::SubMesh> >*
+  fields(void) const;
+
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Calculate orientation at fault vertices.
+   *
+   * @param upDir Direction perpendicular to along-strike direction that is 
+   *   not collinear with fault normal (usually "up" direction but could 
+   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+   * @param normalDir General preferred direction for fault normal
+   *   (used to pick which of two possible normal directions for
+   *   interface; only applies to fault surfaces in a 3-D domain).
+   */
+  void _calcOrientation(const double upDir[3],
+			const double normalDir[3]);
+
+  /// Calculate fault area field.
+  void _calcArea(void);
+
+  /** Get initial tractions using a spatial database.
+   */
+  void _getInitialTractions(void);
+
+  /** Setup fault constitutive model.
+   */
+  void _initConstitutiveModel(void);
+
+  /** Update diagonal of Jacobian at conventional vertices i and j
+   *  associated with Lagrange vertex k.
+   *
+   * @param fields Solution fields.
+   */
+  void _updateJacobianDiagonal(const topology::SolutionFields& fields);
+
+  /** Compute change in tractions on fault surface using solution.
+   *
+   * @param tractions Field for tractions.
+   * @param solution Solution over domain
+   */
+  void _calcTractions(topology::Field<topology::SubMesh>* tractions,
+		      const topology::Field<topology::Mesh>& solution);
+
+  /// Allocate buffer for vector field.
+  void _allocateBufferVertexVectorField(void);
+
+  /// Allocate buffer for scalar field.
+  void _allocateBufferVertexScalarField(void);
+
+  // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+  /// Database for initial tractions.
+  spatialdata::spatialdb::SpatialDB* _dbInitial;
+
+  // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+  /// Not implemented
+  FaultCohesiveDynL(const FaultCohesiveDynL&);
+
+  /// Not implemented
+  const FaultCohesiveDynL& operator=(const FaultCohesiveDynL&);
+
+}; // class FaultCohesiveDynL
+
+#include "FaultCohesiveDynL.icc" // inline methods
+
+#endif // pylith_faults_faultcohesivedynl_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.icc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/faults/FaultCohesiveDynL.icc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.icc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.icc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,32 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#if !defined(pylith_faults_faultcohesivedynl_hh)
+#error "FaultCohesiveDynL.icc can only be included from FaultCohesiveDynL.hh"
+#endif
+
+// Cohesive cells use Lagrange multiplier constraints?
+inline
+bool
+pylith::faults::FaultCohesiveDynL::useLagrangeConstraints(void) const {
+  return true;
+} // useLagrangeConstraints
+
+// Get fields associated with fault.
+inline
+const pylith::topology::Fields<pylith::topology::Field<pylith::topology::SubMesh> >*
+pylith::faults::FaultCohesiveDynL::fields(void) const {
+  return _fields;
+} // fields
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -135,13 +135,6 @@
   slip.vectorFieldType(topology::FieldBase::VECTOR);
   slip.scale(_normalizer->lengthScale());
 
-  // Allocate cumulative slip field
-  _fields->add("cumulative slip", "cumulative_slip");
-  topology::Field<topology::SubMesh>& cumSlip = _fields->get("cumulative slip");
-  cumSlip.cloneSection(slip);
-  cumSlip.vectorFieldType(topology::FieldBase::VECTOR);
-  cumSlip.scale(_normalizer->lengthScale());
-
   const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
     faultSieveMesh->heightStratum(0);
   assert(!cells.isNull());
@@ -225,8 +218,8 @@
   // vertex k make 2 contributions to the residual:
   //
   //   * DOF i and j: internal forces in soln field associated with 
-  //                  slip
-  //   * DOF k: slip values
+  //                  slip  -[C]^T{L(t)+dL(t)}
+  //   * DOF k: slip values  -[C]{u(t)+dt(t)}
 
   // Get cell information and setup storage for cell data
   const int spaceDim = _quadrature->spaceDim();
@@ -434,11 +427,9 @@
   assert(0 != _fields);
 
   // Cohesive cells with normal vertices i and j, and constraint
-  // vertex k make 2 contributions to the residual:
+  // vertex k make contributions to the assembled residual:
   //
-  //   * DOF i and j: internal forces in soln field associated with 
-  //                  slip
-  //   * DOF k: slip values
+  //   * DOF k: slip values {D(t+dt)}
 
   topology::Field<topology::SubMesh>& slip = _fields->get("slip");
   slip.zero();
@@ -503,8 +494,6 @@
   assert(0 != fields);
   assert(0 != _fields);
 
-  typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PetscInt> visitor_type;
-
   // Add constraint information to Jacobian matrix; these are the
   // direction cosines. Entries are associated with vertices ik, jk,
   // ki, and kj.
@@ -639,22 +628,465 @@
 } // integrateJacobianAssembled
   
 // ----------------------------------------------------------------------
+// Compute Jacobian matrix (A) associated with operator that do not
+// require assembly across cells, vertices, or processors.
+void
+pylith::faults::FaultCohesiveKin::integrateJacobianAssembled(
+				    topology::Field<topology::Mesh>& jacobian,
+				    const double t,
+				    topology::SolutionFields* const fields)
+{ // integrateJacobianAssembled
+  assert(0 != fields);
+  assert(0 != _fields);
+
+  // Add ones to diagonal Jacobian matrix (as field) for
+  // convenience. Instead of including the constraints in the Jacobian
+  // matrix, we adjust the solution to account for the Lagrange
+  // multipliers as part of the solve.
+
+  // Get domain Sieve mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+
+  // Get fault Sieve mesh
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const SieveSubMesh::label_sequence::iterator verticesBegin = 
+    vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  SieveSubMesh::renumbering_type& renumbering = 
+    faultSieveMesh->getRenumbering();
+  const SieveSubMesh::renumbering_type::const_iterator renumberingEnd =
+    renumbering.end();
+
+  // Get section information
+  const int spaceDim = _quadrature->spaceDim();
+  double_array jacobianVertex(spaceDim);
+  jacobianVertex = 1.0;
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  assert(!jacobianSection.isNull());  
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin; 
+       v_iter != verticesEnd;
+       ++v_iter)
+    if (renumbering.find(*v_iter) != renumberingEnd) {
+      assert(jacobianSection->getFiberDimension(*v_iter) == spaceDim);
+      jacobianSection->updatePoint(*v_iter, &jacobianVertex[0]);
+    } // if
+
+  PetscLogFlops(0);
+
+  _needNewJacobian = false;
+} // integrateJacobianAssembled
+  
+// ----------------------------------------------------------------------
 // Update state variables as needed.
 void
-pylith::faults::FaultCohesiveKin::updateStateVars(const double t,
-		       topology::SolutionFields* const fields)
+pylith::faults::FaultCohesiveKin::updateStateVars(
+				     const double t,
+				     topology::SolutionFields* const fields)
 { // updateStateVars
   assert(0 != fields);
   assert(0 != _fields);
 
-  // Update cumulative slip
-  topology::Field<topology::SubMesh>& cumSlip = _fields->get("cumulative slip");
-  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  cumSlip.zero();
-  cumSlip += slip;
 } // updateStateVars
 
 // ----------------------------------------------------------------------
+// Adjust solution from solver with lumped Jacobian to match Lagrange
+// multiplier constraints.
+void
+pylith::faults::FaultCohesiveKin::adjustSolnLumped(topology::SolutionFields* const fields,
+			const topology::Field<topology::Mesh>& jacobian)
+{ // adjustSolnLumped
+  assert(0 != fields);
+  assert(0 != _quadrature);
+
+  // Cohesive cells with conventional vertices i and j, and constraint
+  // vertex k require 2 adjustments to the solution:
+  //
+  //   * DOF k: Compute increment in Lagrange multipliers
+  //            dl_k = 1/(A_i+A_j) (C_ki A_j r_i - C_kj A_i r_j)
+  //                   - A_i A_j / (A_i+A_j) d_k
+  //   * DOF i and j: Adjust displacement increment (solution) to account
+  //            for Lagrange multiplier constraints
+  //            du_i = -A_i^-1 C_ki^T dlk
+  //            du_j = +A_j^-1 C_kj^T dlk
+
+  // Get cell information and setup storage for cell data
+  const int spaceDim = _quadrature->spaceDim();
+  const int orientationSize = spaceDim*spaceDim;
+  const int numBasis = _quadrature->numBasis();
+  const int numConstraintVert = numBasis;
+  const int numCorners = 3*numConstraintVert; // cohesive cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+
+  // Get cohesive cells
+  const ALE::Obj<SieveMesh>& sieveMesh = 
+    fields->get("dispIncr(t->t+dt)").mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& cellsCohesive = 
+    sieveMesh->getLabelStratum("material-id", id());
+  assert(!cellsCohesive.isNull());
+  const SieveMesh::label_sequence::iterator cellsCohesiveBegin =
+    cellsCohesive->begin();
+  const SieveMesh::label_sequence::iterator cellsCohesiveEnd =
+    cellsCohesive->end();
+  const int cellsCohesiveSize = cellsCohesive->size();
+
+  // Get fault Sieve mesh
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  // Get section information
+  double_array orientationCell(numConstraintVert*orientationSize);
+  const ALE::Obj<RealSection>& orientationSection = 
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+  topology::Mesh::RestrictVisitor orientationVisitor(*orientationSection,
+						     orientationCell.size(),
+						     &orientationCell[0]);
+
+  double_array slipCell(numConstraintVert*spaceDim);
+  const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
+  assert(!slipSection.isNull());
+  topology::Mesh::RestrictVisitor slipVisitor(*slipSection,
+					      slipCell.size(),
+					      &slipCell[0]);
+
+  // Tributary area for the current for each vertex.
+  double_array areaVertexCell(numConstraintVert);
+  // Total fault area associated with each vertex (assembled over all cells).
+  double_array areaCell(numConstraintVert);
+  const ALE::Obj<RealSection>& areaSection = 
+    _fields->get("area").section();
+  assert(!areaSection.isNull());
+  topology::Mesh::RestrictVisitor areaVisitor(*areaSection,
+					      areaCell.size(), &areaCell[0]);
+
+  double_array jacobianCell(numCorners*spaceDim);
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  assert(!jacobianSection.isNull());  
+  topology::Mesh::RestrictVisitor jacobianVisitor(*jacobianSection,
+					       jacobianCell.size(), 
+					       &jacobianCell[0]);
+
+  double_array residualCell(numCorners*spaceDim);
+  const ALE::Obj<RealSection>& residualSection = 
+    fields->get("residual").section();
+  topology::Mesh::RestrictVisitor residualVisitor(*residualSection,
+						  residualCell.size(),
+						  &residualCell[0]);
+
+  double_array dispTCell(numCorners*spaceDim);
+  const ALE::Obj<RealSection>& dispTSection = 
+    fields->get("disp(t)").section();
+  topology::Mesh::RestrictVisitor dispTVisitor(*dispTSection,
+					       dispTCell.size(),
+					       &dispTCell[0]);
+
+  double_array solutionCell(numCorners*spaceDim);
+  const ALE::Obj<RealSection>& solutionSection = 
+    fields->get("dispIncr(t->t+dt)").section();
+  topology::Mesh::UpdateAddVisitor solutionVisitor(*solutionSection,
+						   &solutionCell[0]);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  for (SieveMesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
+       c_iter != cellsCohesiveEnd;
+       ++c_iter) {
+    const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
+    areaVertexCell = 0.0;
+    solutionCell = 0.0;
+
+    // Compute geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(c_fault);
+#else
+    coordsVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, c_fault);
+#endif
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Compute contributory area for cell (to weight contributions)
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+        const double dArea = wt*basis[iQuad*numBasis+iBasis];
+	areaVertexCell[iBasis] += dArea;
+      } // for
+    } // for
+        
+    // Get orientations at fault cell's vertices.
+    orientationVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, orientationVisitor);
+    
+    // Get area at fault cell's vertices.
+    areaVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, areaVisitor);
+    
+    // Get slip at fault cell's vertices.
+    slipVisitor.clear();
+    faultSieveMesh->restrictClosure(c_fault, slipVisitor);
+    
+    // Get residual at cohesive cell's vertices.
+    residualVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, residualVisitor);
+    
+    // Get jacobian at cohesive cell's vertices.
+    jacobianVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, jacobianVisitor);
+    
+    // Get disp(t) at cohesive cell's vertices.
+    dispTVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTVisitor);
+    
+    for (int iConstraint=0; iConstraint < numConstraintVert; ++iConstraint) {
+      // Blocks in cell matrix associated with normal cohesive
+      // vertices i and j and constraint vertex k
+      const int indexI = iConstraint;
+      const int indexJ = iConstraint +   numConstraintVert;
+      const int indexK = iConstraint + 2*numConstraintVert;
+
+      assert(areaCell[iConstraint] > 0);
+      const double wt = areaVertexCell[iConstraint] / areaCell[iConstraint];
+      
+      // Get orientation at constraint vertex
+      const double* orientationVertex = 
+	&orientationCell[iConstraint*orientationSize];
+      assert(0 != orientationVertex);
+
+      // Get slip at constraint vertex
+      const double* slipVertex = &slipCell[iConstraint*spaceDim];
+      assert(0 != slipVertex);
+
+      // Get Jacobian at conventional vertices i and j
+      const double* Ai = &jacobianCell[indexI*spaceDim];
+      assert(0 != Ai);
+      const double* Aj = &jacobianCell[indexJ*spaceDim];
+      assert(0 != Aj);
+
+      // Get residual at conventional vertices i and j
+      const double* ri = &residualCell[indexI*spaceDim];
+      assert(0 != ri);
+      const double* rj = &residualCell[indexJ*spaceDim];
+      assert(0 != rj);
+      
+      // Get disp(t) at conventional vertices i and j
+      const double* ui = &dispTCell[indexI*spaceDim];
+      assert(0 != ui);
+      const double* uj = &dispTCell[indexJ*spaceDim];
+      assert(0 != uj);
+
+      switch(spaceDim)
+	{ // switch
+	case 1 : {
+	  const double d00 = 1.0/Ai[0] + 1.0/Aj[0];
+	  const double dinv00 = 1.0 / d00;
+
+	  // Aru = A_i^{-1} r_i - A_j^{-1} r_j + u_i - u_j
+	  const double Aru = ri[0]/Ai[0] - rj[0]/Aj[0] + ui[0] - uj[0];
+
+	  // dl_k = D^{-1}( C_{ki} Aru - d_k)
+	  const double Aruslip = Aru - slipVertex[0];
+	  const double dlp = dinv00*Aruslip;
+
+	  // Update displacements at node I
+	  solutionCell[indexI*spaceDim+0] =  wt * -1.0/Ai[0] * dlp;
+
+	  // Update displacements at node J
+	  solutionCell[indexJ*spaceDim+0] = wt * +1.0/Aj[0] * dlp;
+
+	  // Update Lagrange multipliers
+	  solutionCell[indexK*spaceDim+0] = wt * dlp;
+
+	  break;
+	} // case 1
+	case 2 : {
+	  const double Cpx = orientationVertex[0];
+	  const double Cpy = orientationVertex[1];
+	  const double Cqx = orientationVertex[2];
+	  const double Cqy = orientationVertex[3];
+	  const double Crx = orientationVertex[4];
+	  const double Cry = orientationVertex[5];
+
+	  const double Spp = 
+	    Cpx*Cpx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cpy*Cpy*(1.0/Ai[1] + 1.0/Aj[1]);
+	  const double Spq =
+	    Cpx*Cqx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cpy*Cqy*(1.0/Ai[1] + 1.0/Aj[1]);
+	  const double Sqq = 
+	    Cqx*Cqx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cqy*Cqy*(1.0/Ai[1] + 1.0/Aj[1]);
+	  const double detS = Spp*Sqq - Spq*Spq;
+	  const double Sinvpp = Sqq / detS;
+	  const double Sinvpq = -Spq / detS;
+	  const double Sinvqq = Spp / detS;
+
+	  // Aru = A_i^{-1} r_i - A_j^{-1} r_j + u_i - u_j
+	  const double Arux = ri[0]/Ai[0] - rj[0]/Aj[0] + ui[0] - uj[0];
+	  const double Aruy = ri[1]/Ai[1] - rj[1]/Aj[1] + ui[1] - uj[1];
+
+	  // dl_k = D^{-1}( C_{ki} Aru - d_k)
+	  const double Arup = Cpx*Arux + Cpy*Aruy;
+	  const double Aruq = Cqx*Arux + Cqy*Aruy;
+	  const double Arupslip = Arup - slipVertex[0];
+	  const double Aruqslip = Aruq - slipVertex[1];
+	  const double dlp = Sinvpp*Arupslip + Sinvpq*Aruqslip;
+	  const double dlq = Sinvpq*Arupslip + Sinvqq*Aruqslip;
+
+	  // Update displacements at node I
+	  solutionCell[indexI*spaceDim+0] = 
+	    wt * -1.0/Ai[0] * (Cpx*dlp + Cqx*dlq);
+	  solutionCell[indexI*spaceDim+1] = 
+	    wt * -1.0/Ai[1] * (Cpy*dlp + Cqy*dlq);
+
+	  // Update displacements at node J
+	  solutionCell[indexJ*spaceDim+0] = 
+	    wt * +1.0/Aj[0] * (Cpx*dlp + Cqx*dlq);
+	  solutionCell[indexJ*spaceDim+1] = 
+	    wt * +1.0/Aj[1] * (Cpy*dlp + Cqy*dlq);
+
+	  // Update Lagrange multipliers
+	  solutionCell[indexK*spaceDim+0] = wt * dlp;
+	  solutionCell[indexK*spaceDim+1] = wt * dlq;
+
+	  break;
+	} // case 2
+	case 3 : {
+	  const double Cpx = orientationVertex[0];
+	  const double Cpy = orientationVertex[1];
+	  const double Cpz = orientationVertex[2];
+	  const double Cqx = orientationVertex[3];
+	  const double Cqy = orientationVertex[4];
+	  const double Cqz = orientationVertex[5];
+	  const double Crx = orientationVertex[6];
+	  const double Cry = orientationVertex[7];
+	  const double Crz = orientationVertex[8];
+
+	  const double Spp = 
+	    Cpx*Cpx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cpy*Cpy*(1.0/Ai[1] + 1.0/Aj[1]) +
+	    Cpz*Cpz*(1.0/Ai[2] + 1.0/Aj[2]);
+	  const double Spq =
+	    Cpx*Cqx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cpy*Cqy*(1.0/Ai[1] + 1.0/Aj[1]) +
+	    Cpz*Cqz*(1.0/Ai[2] + 1.0/Aj[2]);
+	  const double Spr =
+	    Cpx*Crx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cpy*Cry*(1.0/Ai[1] + 1.0/Aj[1]) +
+	    Cpz*Crz*(1.0/Ai[2] + 1.0/Aj[2]);
+	  const double Sqq = 
+	    Cqx*Cqx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cqy*Cqy*(1.0/Ai[1] + 1.0/Aj[1]) +
+	    Cqz*Cqz*(1.0/Ai[2] + 1.0/Aj[2]);
+	  const double Sqr =
+	    Cqx*Crx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cqy*Cry*(1.0/Ai[1] + 1.0/Aj[1]) +
+	    Cqz*Crz*(1.0/Ai[2] + 1.0/Aj[2]);
+	  const double Srr = 
+	    Crx*Crx*(1.0/Ai[0] + 1.0/Aj[0]) +
+	    Cry*Cry*(1.0/Ai[1] + 1.0/Aj[1]) +
+	    Crz*Crz*(1.0/Ai[2] + 1.0/Aj[2]);
+	  const double detS =
+	    Spp * (Sqq*Srr - Sqr*Sqr) +
+	    Spq * (Spr*Sqr - Spq*Srr) +
+	    Spr * (Spq*Sqr - Spr*Sqq);
+	  const double Sinvpp = (Sqq*Srr - Sqr*Sqr) / detS;
+	  const double Sinvpq = (Spr*Sqr - Spq*Srr) / detS;
+	  const double Sinvpr = (Spq*Sqr - Spr*Sqq) / detS;
+	  const double Sinvqq = (Spp*Srr - Spr*Spr) / detS;
+	  const double Sinvqr = (Spq*Spr - Spp*Sqr) / detS;
+	  const double Sinvrr = (Spp*Sqq - Spq*Spq) / detS;
+
+	  // Aru = A_i^{-1} r_i - A_j^{-1} r_j + u_i - u_j
+	  const double Arux = ri[0]/Ai[0] - rj[0]/Aj[0] + ui[0] - uj[0];
+	  const double Aruy = ri[1]/Ai[1] - rj[1]/Aj[1] + ui[1] - uj[1];
+	  const double Aruz = ri[2]/Ai[2] - rj[2]/Aj[2] + ui[2] - uj[2];
+
+	  // dl_k = D^{-1}( C_{ki} Aru - d_k)
+	  const double Arup = Cpx*Arux + Cpy*Aruy + Cpz*Aruz;
+	  const double Aruq = Cqx*Arux + Cqy*Aruy + Cqz*Aruz;
+	  const double Arur = Crx*Arux + Cry*Aruy + Crz*Aruz;
+	  const double Arupslip = Arup - slipVertex[0];
+	  const double Aruqslip = Aruq - slipVertex[1];
+	  const double Arurslip = Arur - slipVertex[2];
+	  const double dlp = 
+	    Sinvpp*Arupslip + Sinvpq*Aruqslip + Sinvpr*Arurslip;
+	  const double dlq = 
+	    Sinvpq*Arupslip + Sinvqq*Aruqslip + Sinvqr*Arurslip;
+	  const double dlr = 
+	    Sinvpr*Arupslip + Sinvqr*Aruqslip + Sinvrr*Arurslip;
+
+	  // Update displacements at node I
+	  solutionCell[indexI*spaceDim+0] = 
+	    wt * -1.0/Ai[0] * (Cpx*dlp + Cqx*dlq + Crx*dlr);
+	  solutionCell[indexI*spaceDim+1] = 
+	    wt * -1.0/Ai[1] * (Cpy*dlp + Cqy*dlq + Cry*dlr);
+	  solutionCell[indexI*spaceDim+2] = 
+	    wt * -1.0/Ai[2] * (Cpz*dlp + Cqz*dlq + Crz*dlr);
+
+	  // Update displacements at node J
+	  solutionCell[indexJ*spaceDim+0] = 
+	    wt * +1.0/Aj[0] * (Cpx*dlp + Cqx*dlq + Crx*dlr);
+	  solutionCell[indexJ*spaceDim+1] = 
+	    wt * +1.0/Aj[1] * (Cpy*dlp + Cqy*dlq + Cry*dlr);
+	  solutionCell[indexJ*spaceDim+2] = 
+	    wt * +1.0/Aj[2] * (Cpz*dlp + Cqz*dlq + Crz*dlr);
+
+	  // Update Lagrange multipliers
+	  solutionCell[indexK*spaceDim+0] = wt * dlp;
+	  solutionCell[indexK*spaceDim+1] = wt * dlq;
+	  solutionCell[indexK*spaceDim+2] = wt * dlr;
+
+	  break;
+	} // case 3
+	default :
+	  assert(0);
+	  throw std::logic_error("Unknown spatial dimension.");
+	} // switch
+    } // for
+      
+#if 0 // DEBUGGING
+    std::cout << "Adjusting lumped solution for cell " << *c_iter << std::endl;
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  dispTpdt["<<i<<"]: " << dispTpdtCell[i] << std::endl;
+    }
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  dispT["<<i<<"]: " << dispTCell[i] << std::endl;
+    }
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  dispIncr["<<i<<"]: " << dispTIncrCell[i] << std::endl;
+    }
+    for(int i = 0; i < numCorners*spaceDim; ++i) {
+      std::cout << "  v["<<i<<"]: " << residualCell[i] << std::endl;
+    }
+#endif
+
+    solutionVisitor.clear();
+    sieveMesh->updateClosure(*c_iter, solutionVisitor);
+  } // for
+
+  // FIX THIS
+  PetscLogFlops(0);
+} // adjustSolnLumped
+
+// ----------------------------------------------------------------------
 // Verify configuration is acceptable.
 void
 pylith::faults::FaultCohesiveKin::verifyConfiguration(
@@ -726,9 +1158,9 @@
   double scale = 0.0;
   int fiberDim = 0;
   if (0 == strcasecmp("slip", name)) {
-    const topology::Field<topology::SubMesh>& cumSlip = 
-      _fields->get("cumulative slip");
-    return cumSlip;
+    const topology::Field<topology::SubMesh>& slip = 
+      _fields->get("slip");
+    return slip;
 
   } else if (cohesiveDim > 0 && 0 == strcasecmp("strike_dir", name)) {
     const ALE::Obj<RealSection>& orientationSection =
@@ -834,6 +1266,290 @@
 } // cellField
 
 // ----------------------------------------------------------------------
+// Calculate orientation at fault vertices.
+void
+pylith::faults::FaultCohesiveKin::_calcOrientation(const double upDir[3],
+						   const double normalDir[3])
+{ // _calcOrientation
+  assert(0 != upDir);
+  assert(0 != normalDir);
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+
+  double_array upDirArray(upDir, 3);
+
+  // Get vertices in fault mesh.
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
+    faultSieveMesh->depthStratum(0);
+  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  
+  // Containers for orientation information.
+  const int cohesiveDim = _faultMesh->dimension();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int orientationSize = spaceDim*spaceDim;
+  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
+  const double_array& verticesRef = cellGeometry.vertices();
+  const int jacobianSize = (cohesiveDim > 0) ? spaceDim * cohesiveDim : 1;
+  const double_array& quadWts = _quadrature->quadWts();
+  double_array jacobian(jacobianSize);
+  double jacobianDet = 0;
+  double_array orientationVertex(orientationSize);
+  double_array coordinatesCell(numBasis*spaceDim);
+  double_array refCoordsVertex(cohesiveDim);
+
+  // Allocate orientation field.
+  _fields->add("orientation", "orientation");
+  topology::Field<topology::SubMesh>& orientation = _fields->get("orientation");
+  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+  orientation.newSection(slip, orientationSize);
+  const ALE::Obj<RealSection>& orientationSection = orientation.section();
+  assert(!orientationSection.isNull());
+  // Create subspaces for along-strike, up-dip, and normal directions
+  for (int iDim=0; iDim <= cohesiveDim; ++iDim)
+    orientationSection->addSpace();
+  for (int iDim=0; iDim <= cohesiveDim; ++iDim)
+    orientationSection->setFiberDimension(vertices, spaceDim, iDim);
+  orientation.allocate();
+  orientation.zero();
+  
+  // Get fault cells.
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+    faultSieveMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Compute orientation of fault at constraint vertices
+
+  // Get section containing coordinates of vertices
+  const ALE::Obj<RealSection>& coordinatesSection = 
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinatesSection.isNull());
+  topology::Mesh::RestrictVisitor coordinatesVisitor(*coordinatesSection,
+						     coordinatesCell.size(),
+						     &coordinatesCell[0]);
+
+  // Set orientation function
+  assert(cohesiveDim == _quadrature->cellDim());
+  assert(spaceDim == _quadrature->spaceDim());
+
+  // Loop over cohesive cells, computing orientation weighted by
+  // jacobian at constraint vertices
+  
+  const ALE::Obj<SieveSubMesh::sieve_type>& sieve = faultSieveMesh->getSieve();
+  assert(!sieve.isNull());
+  typedef ALE::SieveAlg<SieveSubMesh> SieveAlg;
+
+  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve, (size_t) pow(sieve->getMaxConeSize(), std::max(0, faultSieveMesh->depth())));
+
+  for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Get orientations at fault cell's vertices.
+    coordinatesVisitor.clear();
+    faultSieveMesh->restrictClosure(*c_iter, coordinatesVisitor);
+
+    ncV.clear();
+    ALE::ISieveTraversal<SieveSubMesh::sieve_type>::orientedClosure(*sieve, *c_iter, ncV);
+    const int               coneSize = ncV.getSize();
+    const Mesh::point_type *cone     = ncV.getPoints();
+    
+    for (int v=0; v < coneSize; ++v) {
+      // Compute Jacobian and determinant of Jacobian at vertex
+      memcpy(&refCoordsVertex[0], &verticesRef[v*cohesiveDim],
+	     cohesiveDim*sizeof(double));
+      cellGeometry.jacobian(&jacobian, &jacobianDet, coordinatesCell,
+			    refCoordsVertex);
+
+      // Compute orientation
+      cellGeometry.orientation(&orientationVertex, jacobian, jacobianDet, 
+			       upDirArray);
+      
+      // Update orientation
+      orientationSection->updateAddPoint(cone[v], &orientationVertex[0]);
+    } // for
+  } // for
+
+  //orientation.view("ORIENTATION BEFORE COMPLETE");
+
+  // Assemble orientation information
+  orientation.complete();
+
+  // Loop over vertices, make orientation information unit magnitude
+  double_array vertexDir(orientationSize);
+  int count = 0;
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter, ++count) {
+    orientationVertex = 0.0;
+    orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
+				      orientationVertex.size());
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      double mag = 0;
+      for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
+	mag += pow(orientationVertex[index+jDim],2);
+      mag = sqrt(mag);
+      assert(mag > 0.0);
+      for (int jDim=0, index=iDim*spaceDim; jDim < spaceDim; ++jDim)
+	orientationVertex[index+jDim] /= mag;
+    } // for
+
+    orientationSection->updatePoint(*v_iter, &orientationVertex[0]);
+  } // for
+  PetscLogFlops(count * orientationSize * 4);
+
+  if (2 == cohesiveDim && vertices->size() > 0) {
+    // Check orientation of first vertex, if dot product of fault
+    // normal with preferred normal is negative, flip up/down dip
+    // direction.
+    //
+    // If the user gives the correct normal direction (points from
+    // footwall to ahanging wall), we should end up with
+    // left-lateral-slip, reverse-slip, and fault-opening for positive
+    // slip values.
+    //
+    // When we flip the up/down dip direction, we create a left-handed
+    // strike/dip/normal coordinate system, but it gives the correct
+    // sense of slip. In reality the strike/dip/normal directions that
+    // are used are the opposite of what we would want, but we cannot
+    // flip the fault normal direction because it is tied to how the
+    // cohesive cells are created.
+    
+    assert(vertices->size() > 0);
+    orientationSection->restrictPoint(*vertices->begin(), &orientationVertex[0],
+				      orientationVertex.size());
+				      
+    assert(3 == spaceDim);
+    double_array normalDirVertex(&orientationVertex[6], 3);
+    const double normalDot = 
+      normalDir[0]*normalDirVertex[0] +
+      normalDir[1]*normalDirVertex[1] +
+      normalDir[2]*normalDirVertex[2];
+    
+    const int istrike = 0;
+    const int idip = 3;
+    const int inormal = 6;
+    if (normalDot < 0.0) {
+      // Flip dip direction
+      for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+	   v_iter != verticesEnd;
+	   ++v_iter) {
+	orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
+					  orientationVertex.size());
+	assert(9 == orientationSection->getFiberDimension(*v_iter));
+	for (int iDim=0; iDim < 3; ++iDim) // flip dip
+	  orientationVertex[idip+iDim] *= -1.0;
+	
+	// Update direction
+	orientationSection->updatePoint(*v_iter, &orientationVertex[0]);
+      } // for
+      PetscLogFlops(5 + count * 3);
+    } // if
+  } // if
+
+  //orientation.view("ORIENTATION");
+} // _calcOrientation
+
+// ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveKin::_calcArea(void)
+{ // _calcArea
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+
+  // Containers for area information
+  const int cellDim = _quadrature->cellDim();
+  const int numBasis = _quadrature->numBasis();
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int spaceDim = _quadrature->spaceDim();
+  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  double jacobianDet = 0;
+  double_array areaCell(numBasis);
+
+  // Get vertices in fault mesh.
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
+    faultSieveMesh->depthStratum(0);
+  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  
+  // Allocate area field.
+  _fields->add("area", "area");
+
+  topology::Field<topology::SubMesh>& area = _fields->get("area");
+  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
+  area.newSection(slip, 1);
+  area.allocate();
+  area.zero();
+  const ALE::Obj<RealSection>& areaSection = area.section();
+  assert(!areaSection.isNull());
+  topology::Mesh::UpdateAddVisitor areaVisitor(*areaSection, &areaCell[0]);  
+  
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
+    faultSieveMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Loop over cells in fault mesh, compute area
+  for (SieveSubMesh::label_sequence::iterator c_iter = cellsBegin;
+      c_iter != cellsEnd;
+      ++c_iter) {
+    areaCell = 0.0;
+    
+    // Compute geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Compute area
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+        const double dArea = wt*basis[iQuad*numBasis+iBasis];
+	areaCell[iBasis] += dArea;
+      } // for
+    } // for
+    areaVisitor.clear();
+    faultSieveMesh->updateClosure(*c_iter, areaVisitor);
+
+    PetscLogFlops( numQuadPts*(1+numBasis*2) );
+  } // for
+
+  // Assemble area information
+  area.complete();
+
+#if 0 // DEBUGGING
+  area.view("AREA");
+  //_faultMesh->getSendOverlap()->view("Send fault overlap");
+  //_faultMesh->getRecvOverlap()->view("Receive fault overlap");
+#endif
+} // _calcArea
+
+// ----------------------------------------------------------------------
 // Compute change in tractions on fault surface using solution.
 // NOTE: We must convert vertex labels to fault vertex labels
 void
@@ -962,13 +1678,13 @@
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("Output");
 
-  // Create vector field; use same shape/chart as cumulative slip field.
+  // Create vector field; use same shape/chart as slip field.
   assert(0 != _faultMesh);
   _fields->add("buffer (vector)", "buffer");
   topology::Field<topology::SubMesh>& buffer =
     _fields->get("buffer (vector)");
   const topology::Field<topology::SubMesh>& slip = 
-    _fields->get("cumulative slip");
+    _fields->get("slip");
   buffer.cloneSection(slip);
   buffer.zero();
 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,6 +14,24 @@
  *
  * @brief C++ implementation for a fault surface with kinematic
  * (prescribed) slip implemented with cohesive elements.
+ */
+
+#if !defined(pylith_faults_faultcohesivekin_hh)
+#define pylith_faults_faultcohesivekin_hh
+
+// Include directives ---------------------------------------------------
+#include "FaultCohesive.hh" // ISA FaultCohesive
+
+#include "pylith/topology/SubMesh.hh" // ISA Integrator<Quadrature<SubMesh> >
+#include "pylith/feassemble/Quadrature.hh" // ISA Integrator<Quadrature>
+#include "pylith/feassemble/Integrator.hh" // ISA Integrator
+
+#include <string> // HASA std::string
+
+// FaultCohesiveKin -----------------------------------------------------
+/**
+ * @brief C++ implementation for a fault surface with kinematic
+ * (prescribed) slip implemented with cohesive elements.
  *
  * Fault boundary condition is specified using Lagrange
  * multipliers. The constraints are associated with "constraint"
@@ -49,25 +67,26 @@
  * {r(t+dt)} = {b(t+dt)} - [A(t+dt) C^T ]{ u(t)+du(t) }
  *             {D(t+dt)}   [ C      0   ]{ L(t)+dL(t) }
  * 
- * The term D does not involve integration over cohesive cells. We
- * integrate the Lagrange multiplier terms over the cohesive cells
- * because this introduces weighting of the orientation of the fault
- * for the direction of slip at the vertices of the cohesive cells.
+ * The terms in the residual contributing to the DOF at the Lagrange
+ * vertices are
+ *
+ * {r(t+dt)} = {D(t+dt)} - [C]{u(t)+dt(t)}
+ *
+ * The first term, {D(t+dt)}, does not involve integration over the
+ * cohesive cells, so it does not require assembling over cohesive
+ * cells or processors. We compute the term in
+ * integrateResidualAssembled().
+ *
+ * The term in the residual contributing to the DOF at the
+ * non-Lagrange vertices of the cohesive cells is
+ *
+ * {r(t+dt)} = -[C]^T{L(t)+dL(t)}
+ *
+ * We integrate the Lagrange multiplier term and the relative
+ * displacement term over the cohesive cells, because this introduces
+ * weighting of the orientation of the fault for the direction of slip
+ * at the vertices of the cohesive cells.
  */
-
-#if !defined(pylith_faults_faultcohesivekin_hh)
-#define pylith_faults_faultcohesivekin_hh
-
-// Include directives ---------------------------------------------------
-#include "FaultCohesive.hh" // ISA FaultCohesive
-
-#include "pylith/topology/SubMesh.hh" // ISA Integrator<Quadrature<SubMesh> >
-#include "pylith/feassemble/Quadrature.hh" // ISA Integrator<Quadrature>
-#include "pylith/feassemble/Integrator.hh" // ISA Integrator
-
-#include <string> // HASA std::string
-
-// FaultCohesiveKin -----------------------------------------------------
 class pylith::faults::FaultCohesiveKin : public FaultCohesive
 { // class FaultCohesiveKin
   friend class TestFaultCohesiveKin; // unit testing
@@ -145,15 +164,26 @@
    * operator that do not require assembly across cells, vertices, or
    * processors.
    *
-   * @param mat Sparse matrix
+   * @param jacobian Sparse matrix
    * @param t Current time
    * @param fields Solution fields
-   * @param mesh Finite-element mesh
    */
   void integrateJacobianAssembled(topology::Jacobian* jacobian,
 				  const double t,
 				  topology::SolutionFields* const fields);
 
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator that do not require assembly across cells, vertices, or
+   * processors.
+   *
+   * @param jacobian Diagonal Jacobian matrix as a field.
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateJacobianAssembled(topology::Field<topology::Mesh>& jacobian,
+				  const double t,
+				  topology::SolutionFields* const fields);
+
   /** Update state variables as needed.
    *
    * @param t Current time
@@ -163,6 +193,16 @@
   void updateStateVars(const double t,
 		       topology::SolutionFields* const fields);
 
+  /** Adjust solution from solver with lumped Jacobian to match Lagrange
+   *  multiplier constraints.
+   *
+   * @param solution Solution field.
+   * @param jacobian Jacobian of the system.
+   * @param residual Residual field.
+   */
+  void adjustSolnLumped(topology::SolutionFields* fields,
+			const topology::Field<topology::Mesh>& jacobian);
+
   /** Verify configuration is acceptable.
    *
    * @param mesh Finite-element mesh
@@ -206,6 +246,21 @@
   // PRIVATE METHODS ////////////////////////////////////////////////////
 private :
 
+  /** Calculate orientation at fault vertices.
+   *
+   * @param upDir Direction perpendicular to along-strike direction that is 
+   *   not collinear with fault normal (usually "up" direction but could 
+   *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+   * @param normalDir General preferred direction for fault normal
+   *   (used to pick which of two possible normal directions for
+   *   interface; only applies to fault surfaces in a 3-D domain).
+   */
+  void _calcOrientation(const double upDir[3],
+			const double normalDir[3]);
+
+  /// Calculate fault area field.
+  void _calcArea(void);
+
   /** Compute change in tractions on fault surface using solution.
    *
    * @param tractions Field for tractions.

Modified: short/3D/PyLith/trunk/libsrc/faults/LiuCosSlipFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/LiuCosSlipFn.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/LiuCosSlipFn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -12,11 +12,7 @@
 
 /** @file libsrc/faults/LiuCosSlipFn.hh
  *
- * @brief C++ implementation of LiuCos slip time function.
- *
- * Sine/cosine slip time function from Liu, Archuleta, and Hartzell,
- * BSSA, 2006 (doi:10.1785/0120060036) which has a rapid rise and then
- * a gradual falloff with a finite duration.
+ * @brief C++ implementation of Liu cosine-sine slip time function.
  */
 
 #if !defined(pylith_faults_liucosslipfn_hh)
@@ -30,6 +26,13 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // LiuCosSlipFn ---------------------------------------------------------
+/**
+ * @brief C++ implementation of Liu cosine-sine slip time function.
+ *
+ * Sine/cosine slip time function from Liu, Archuleta, and Hartzell,
+ * BSSA, 2006 (doi:10.1785/0120060036) which has a rapid rise and then
+ * a gradual falloff with a finite duration.
+ */
 class pylith::faults::LiuCosSlipFn : public SlipTimeFn
 { // class LiuCosSlipFn
   friend class TestLiuCosSlipFn; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -25,6 +25,8 @@
 	FaultCohesive.hh \
 	FaultCohesiveDyn.hh \
 	FaultCohesiveDyn.icc \
+	FaultCohesiveDynL.hh \
+	FaultCohesiveDynL.icc \
 	FaultCohesiveKin.hh \
 	FaultCohesiveKin.icc \
 	LiuCosSlipFn.hh \
@@ -32,6 +34,8 @@
 	SlipTimeFn.hh \
 	StepSlipFn.hh \
 	StepSlipFn.icc \
+	TimeHistorySlipFn.hh \
+	TimeHistorySlipFn.icc \
 	faultsfwd.hh
 
 noinst_HEADERS = \

Modified: short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/SlipTimeFn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,8 +13,6 @@
 /** @file libsrc/faults/SlipTimeFn.hh
  *
  * @brief C++ abstract base class for kinematic slip time function.
- *
- * Interface definition for slip time function.
  */
 
 #if !defined(pylith_faults_sliptimefn_hh)
@@ -29,6 +27,11 @@
 #include "spatialdata/spatialdb/spatialdbfwd.hh" // USES SpatialDB
 
 // SlipTimeFn -----------------------------------------------------------
+/**
+ * @brief Abstract base class for kinematic slip time function.
+ *
+ * Interface definition for slip time function.
+ */
 class pylith::faults::SlipTimeFn
 { // class SlipTimeFn
   friend class TestSlipTimeFn; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/faults/StepSlipFn.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/StepSlipFn.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/StepSlipFn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,10 +13,6 @@
 /** @file libsrc/faults/StepSlipFn.hh
  *
  * @brief C++ implementation of a step-function slip time function.
- *
- * Slip time function is a step function with slip beginning at time t0.
- *
- * Normalized slip = 1 if t >= t0, 0 otherwise
  */
 
 #if !defined(pylith_faults_stepslipfn_hh)
@@ -28,6 +24,13 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // StepSlipFn -----------------------------------------------------------
+/**
+ * @brief C++ implementation of a step-function slip time function.
+ *
+ * Slip time function is a step function with slip beginning at time t0.
+ *
+ * Normalized slip = 1 if t >= t0, 0 otherwise
+*/
 class pylith::faults::StepSlipFn : public SlipTimeFn
 { // class StepSlipFn
   friend class TestStepSlipFn; // unit testing

Copied: short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/faults/TimeHistorySlipFn.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,356 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TimeHistorySlipFn.hh" // implementation of object methods
+
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/Field.hh" // USES Field
+
+#include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
+#include "spatialdata/spatialdb/TimeHistory.hh" // USES TimeHistory
+#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <cassert> // USES assert()
+#include <sstream> // USES std::ostringstream
+#include <stdexcept> // USES std::runtime_error
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::SubMesh::SieveMesh SieveMesh;
+typedef pylith::topology::SubMesh::SieveMesh::label_sequence label_sequence;
+typedef pylith::topology::SubMesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::faults::TimeHistorySlipFn::TimeHistorySlipFn(void) :
+  _slipTimeVertex(0),
+  _timeScale(1.0),
+  _dbAmplitude(0),
+  _dbSlipTime(0),
+  _dbTimeHistory(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::faults::TimeHistorySlipFn::~TimeHistorySlipFn(void)
+{ // destructor
+  deallocate();
+} // destructor
+
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void 
+pylith::faults::TimeHistorySlipFn::deallocate(void)
+{ // deallocate
+  SlipTimeFn::deallocate();
+
+  _dbAmplitude = 0; // :TODO: Use shared pointer
+  _dbSlipTime = 0; // :TODO: Use shared pointer
+  if (0 != _dbTimeHistory)
+    _dbTimeHistory->close();
+  _dbTimeHistory = 0; // :TODO: Use shared pointer
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Initialize slip time function.
+void
+pylith::faults::TimeHistorySlipFn::initialize(
+			    const topology::SubMesh& faultMesh,
+			    const spatialdata::units::Nondimensional& normalizer,
+			    const double originTime)
+{ // initialize
+  assert(0 != _dbAmplitude);
+  assert(0 != _dbSlipTime);
+
+  const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
+  assert(0 != cs);
+  const int spaceDim = cs->spaceDim();
+
+  const double lengthScale = normalizer.lengthScale();
+  const double timeScale = normalizer.timeScale();
+
+  // Memory logging
+  ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
+  logger.stagePush("Fault");
+
+  // Get vertices in fault mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = faultMesh.sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<label_sequence>& vertices = sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const label_sequence::iterator verticesBegin = vertices->begin();
+  const label_sequence::iterator verticesEnd = vertices->end();
+
+  delete _parameters; _parameters = new topology::Fields<topology::Field<topology::SubMesh> >(faultMesh);
+  assert(0 != _parameters);
+  _parameters->add("slip amplitude", "slip_amplitude");
+
+  topology::Field<topology::SubMesh>& slipAmplitude = 
+    _parameters->get("slip amplitude");
+  slipAmplitude.newSection(vertices, spaceDim);
+  slipAmplitude.allocate();
+  slipAmplitude.scale(lengthScale);
+  slipAmplitude.vectorFieldType(topology::FieldBase::VECTOR);
+  const ALE::Obj<RealSection>& slipAmplitudeSection = slipAmplitude.section();
+  assert(!slipAmplitudeSection.isNull());  
+
+  _parameters->add("slip time", "slip_time");
+  topology::Field<topology::SubMesh>& slipTime = _parameters->get("slip time");
+  slipTime.newSection(slipAmplitude, 1);
+  slipTime.allocate();
+  slipTime.scale(timeScale);
+  slipTime.vectorFieldType(topology::FieldBase::SCALAR);
+  const ALE::Obj<RealSection>& slipTimeSection = slipTime.section();
+  assert(!slipTimeSection.isNull());
+
+  logger.stagePop();
+
+  // Open databases and set query values
+  _dbAmplitude->open();
+  switch (spaceDim)
+    { // switch
+    case 1 : {
+      const char* slipValues[] = {"fault-opening"};
+      _dbAmplitude->queryVals(slipValues, 1);
+      break;
+    } // case 1
+    case 2 : {
+      const char* slipValues[] = {"left-lateral-slip", "fault-opening"};
+      _dbAmplitude->queryVals(slipValues, 2);
+      break;
+    } // case 2
+    case 3 : {
+      const char* slipValues[] = {"left-lateral-slip", "reverse-slip", 
+				  "fault-opening"};
+      _dbAmplitude->queryVals(slipValues, 3);
+      break;
+    } // case 3
+    default :
+      std::cerr << "Bad spatial dimension '" << spaceDim << "'." << std::endl;
+      assert(0);
+      throw std::logic_error("Bad spatial dimension in TimeHistorySlipFn.");
+    } // switch
+
+  _dbSlipTime->open();
+  const char* slipTimeValues[] = {"slip-time"};
+  _dbSlipTime->queryVals(slipTimeValues, 1);
+
+  // Get coordinates of vertices
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+
+  _slipVertex.resize(spaceDim);
+  double_array vCoordsGlobal(spaceDim);  
+  for (label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter) {
+    coordinates->restrictPoint(*v_iter, 
+			       &vCoordsGlobal[0], vCoordsGlobal.size());
+    normalizer.dimensionalize(&vCoordsGlobal[0], vCoordsGlobal.size(),
+			      lengthScale);
+        
+    int err = _dbAmplitude->query(&_slipVertex[0], _slipVertex.size(), 
+				  &vCoordsGlobal[0], vCoordsGlobal.size(), cs);
+    if (err) {
+      std::ostringstream msg;
+      msg << "Could not find slip amplitude at (";
+      for (int i=0; i < spaceDim; ++i)
+	msg << "  " << vCoordsGlobal[i];
+      msg << ") using spatial database " << _dbAmplitude->label() << ".";
+      throw std::runtime_error(msg.str());
+    } // if
+    normalizer.nondimensionalize(&_slipVertex[0], _slipVertex.size(),
+				 lengthScale);
+
+    err = _dbSlipTime->query(&_slipTimeVertex, 1, 
+			     &vCoordsGlobal[0], vCoordsGlobal.size(), cs);
+    if (err) {
+      std::ostringstream msg;
+      msg << "Could not find slip initiation time at (";
+      for (int i=0; i < spaceDim; ++i)
+	msg << "  " << vCoordsGlobal[i];
+      msg << ") using spatial database " << _dbSlipTime->label() << ".";
+      throw std::runtime_error(msg.str());
+    } // if
+    normalizer.nondimensionalize(&_slipTimeVertex, 1, timeScale);
+    // add origin time to rupture time
+    _slipTimeVertex += originTime;
+
+    slipAmplitudeSection->updatePoint(*v_iter, &_slipVertex[0]);
+    slipTimeSection->updatePoint(*v_iter, &_slipTimeVertex);
+  } // for
+
+  // Close databases.
+  _dbAmplitude->close();
+  _dbSlipTime->close();
+
+  // Open time history database.
+  _dbTimeHistory->open();
+  _timeScale = timeScale;
+} // initialize
+
+// ----------------------------------------------------------------------
+// Get slip on fault surface at time t.
+void
+pylith::faults::TimeHistorySlipFn::slip(topology::Field<topology::SubMesh>* slip,
+				 const double t)
+{ // slip
+  assert(0 != slip);
+  assert(0 != _parameters);
+  assert(0 != _dbTimeHistory);
+
+  // Get vertices in fault mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = slip->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<label_sequence>& vertices = sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const label_sequence::iterator verticesBegin = vertices->begin();
+  const label_sequence::iterator verticesEnd = vertices->end();
+
+  // Get sections
+  const topology::Field<topology::SubMesh>& slipAmplitude = 
+    _parameters->get("slip amplitude");
+  const ALE::Obj<RealSection>& slipAmplitudeSection = slipAmplitude.section();
+  assert(!slipAmplitudeSection.isNull());
+  const topology::Field<topology::SubMesh>& slipTime =
+    _parameters->get("slip time");
+  const ALE::Obj<RealSection>& slipTimeSection = slipTime.section();
+  assert(!slipTimeSection.isNull());
+  const ALE::Obj<RealSection>& slipSection = slip->section();
+  assert(!slipSection.isNull());
+
+  double amplitude = 0.0;
+  for (label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter) {
+    slipAmplitudeSection->restrictPoint(*v_iter, 
+					&_slipVertex[0], _slipVertex.size());
+    slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
+
+    double relTime = t - _slipTimeVertex;
+    if (relTime < 0.0)
+      _slipVertex = 0.0;
+    else {
+      relTime *= _timeScale;
+      const int err = _dbTimeHistory->query(&amplitude, relTime);
+      if (0 != err) {
+	std::ostringstream msg;
+	msg << "Error querying for time '" << relTime
+	    << "' in time history database "
+	    << _dbTimeHistory->label() << ".";
+	throw std::runtime_error(msg.str());
+      } // if
+      _slipVertex *= amplitude;
+    } // else
+    
+    // Update field
+    slipSection->updateAddPoint(*v_iter, &_slipVertex[0]);
+  } // for
+
+  PetscLogFlops(vertices->size() * 3);
+} // slip
+
+// ----------------------------------------------------------------------
+// Get increment of slip on fault surface between time t0 and t1.
+void
+pylith::faults::TimeHistorySlipFn::slipIncr(topology::Field<topology::SubMesh>* slip,
+				     const double t0,
+				     const double t1)
+{ // slipIncr
+  assert(0 != slip);
+  assert(0 != _parameters);
+  assert(0 != _dbTimeHistory);
+
+  // Get vertices in fault mesh
+  const ALE::Obj<SieveMesh>& sieveMesh = slip->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<label_sequence>& vertices = sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const label_sequence::iterator verticesBegin = vertices->begin();
+  const label_sequence::iterator verticesEnd = vertices->end();
+
+  // Get sections
+  const topology::Field<topology::SubMesh>& slipAmplitude = 
+    _parameters->get("slip amplitude");
+  const ALE::Obj<RealSection>& slipAmplitudeSection = slipAmplitude.section();
+  assert(!slipAmplitudeSection.isNull());
+  const topology::Field<topology::SubMesh>& slipTime =
+    _parameters->get("slip time");
+  const ALE::Obj<RealSection>& slipTimeSection = slipTime.section();
+  assert(!slipTimeSection.isNull());
+  const ALE::Obj<RealSection>& slipSection = slip->section();
+  assert(!slipSection.isNull());
+
+  double amplitude0 = 0.0;
+  double amplitude1 = 0.0;
+  for (label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter) {
+    slipAmplitudeSection->restrictPoint(*v_iter, &_slipVertex[0], _slipVertex.size());
+    slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
+
+    double relTime0 = t0 - _slipTimeVertex;
+    double relTime1 = t1 - _slipTimeVertex;
+    if (relTime1 < 0.0)
+      _slipVertex = 0.0;
+    else {
+      relTime0 *= _timeScale;
+      relTime1 *= _timeScale;
+      int err = _dbTimeHistory->query(&amplitude0, relTime0);
+      if (0 != err) {
+	std::ostringstream msg;
+	msg << "Error querying for time '" << relTime0
+	    << "' in time history database "
+	    << _dbTimeHistory->label() << ".";
+	throw std::runtime_error(msg.str());
+      } // if
+      err = _dbTimeHistory->query(&amplitude1, relTime1);
+      if (0 != err) {
+	std::ostringstream msg;
+	msg << "Error querying for time '" << relTime1
+	    << "' in time history database "
+	    << _dbTimeHistory->label() << ".";
+	throw std::runtime_error(msg.str());
+      } // if
+      _slipVertex *= amplitude1 - amplitude0;
+    } // else
+
+    // Update field
+    slipSection->updateAddPoint(*v_iter, &_slipVertex[0]);
+  } // for
+
+  PetscLogFlops(vertices->size() * 6);
+} // slipIncr
+
+// ----------------------------------------------------------------------
+// Get final slip.
+const pylith::topology::Field<pylith::topology::SubMesh>&
+pylith::faults::TimeHistorySlipFn::finalSlip(void)
+{ // finalSlip
+  return _parameters->get("slip amplitude");
+} // finalSlip
+
+// ----------------------------------------------------------------------
+// Get time when slip begins at each point.
+const pylith::topology::Field<pylith::topology::SubMesh>&
+pylith::faults::TimeHistorySlipFn::slipTime(void)
+{ // slipTime
+  return _parameters->get("slip time");
+} // slipTime
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/faults/TimeHistorySlipFn.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,144 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/faults/TimeHistorySlipFn.hh
+ *
+ * @brief C++ implementation of a slip time function with a
+ * user-specified time history.
+ */
+
+#if !defined(pylith_faults_timehistoryslipfn_hh)
+#define pylith_faults_timehistoryslipfn_hh
+
+// Include directives ---------------------------------------------------
+#include "SlipTimeFn.hh"
+
+#include "pylith/utils/array.hh" // HASA double_array
+
+// TimeHistorySlipFn -----------------------------------------------------------
+/**
+ * @brief C++ implementation of a slip time function with a
+ * user-specified time history.
+ *
+ * User-specified slip time function with spatial variable amplitude
+ * and starting time t0.
+*/
+class pylith::faults::TimeHistorySlipFn : public SlipTimeFn
+{ // class TimeHistorySlipFn
+  friend class TestTimeHistorySlipFn; // unit testing
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  TimeHistorySlipFn(void);
+
+  /// Destructor.
+  ~TimeHistorySlipFn(void);
+
+  /// Deallocate PETSc and local data structures.
+  virtual
+  void deallocate(void);
+  
+  /** Set spatial database for amplitude of slip time history.
+   *
+   * @param db Spatial database
+   */
+  void dbAmplitude(spatialdata::spatialdb::SpatialDB* const db);
+
+  /** Set spatial database for slip initiation time.
+   *
+   * @param db Spatial database
+   */
+  void dbSlipTime(spatialdata::spatialdb::SpatialDB* const db);
+
+  /** Set time history.
+   *
+   * @param th Time history.
+   */
+  void dbTimeHistory(spatialdata::spatialdb::TimeHistory* const th);
+
+  /** Initialize slip time function.
+   *
+   * @param faultMesh Finite-element mesh of fault.
+   * @param cs Coordinate system for mesh
+   * @param normalizer Nondimensionalization of scales.
+   * @param originTime Origin time for earthquake source.
+   */
+  void initialize(const topology::SubMesh& faultMesh,
+		  const spatialdata::units::Nondimensional& normalizer,
+		  const double originTime =0.0);
+
+  /** Get slip on fault surface at time t.
+   *
+   * @param slipField Slip field over fault surface.
+   * @param t Time t.
+   *
+   * @returns Slip vector as left-lateral/reverse/normal.
+   */
+  void slip(topology::Field<topology::SubMesh>* const slipField,
+	    const double t);
+  
+  /** Get slip increment on fault surface between time t0 and t1.
+   *
+   * @param slipField Slip field over fault surface.
+   * @param t0 Time t.
+   * @param t1 Time t+dt.
+   * 
+   * @returns Increment in slip vector as left-lateral/reverse/normal.
+   */
+  void slipIncr(topology::Field<topology::SubMesh>* slipField,
+		const double t0,
+		const double t1);
+
+  /** Get final slip.
+   *
+   * @returns Final slip.
+   */
+  const topology::Field<topology::SubMesh>& finalSlip(void);
+
+  /** Get time when slip begins at each point.
+   *
+   * @returns Time when slip begins.
+   */
+  const topology::Field<topology::SubMesh>& slipTime(void);
+
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  TimeHistorySlipFn(const TimeHistorySlipFn&); ///< Not implemented.
+  const TimeHistorySlipFn& operator=(const TimeHistorySlipFn&); ///< Not implemented
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private :
+
+  double _slipTimeVertex; ///< Slip time at a vertex.
+  double _timeScale; ///< Time scale.
+  double_array _slipVertex; ///< Final slip at a vertex.
+
+  /// Spatial database for amplitude of slip time history.
+  spatialdata::spatialdb::SpatialDB* _dbAmplitude;
+
+  /// Spatial database for slip time.
+  spatialdata::spatialdb::SpatialDB* _dbSlipTime;
+
+  /// Time history database.
+  spatialdata::spatialdb::TimeHistory* _dbTimeHistory;
+
+}; // class TimeHistorySlipFn
+
+#include "TimeHistorySlipFn.icc" // inline methods
+
+#endif // pylith_faults_timehistoryslipfn_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.icc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/faults/TimeHistorySlipFn.icc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.icc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/faults/TimeHistorySlipFn.icc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,39 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#if !defined(pylith_faults_timehistoryslipfn_hh)
+#error "TimeHistorySlipFn.icc can only be included from TimeHistorySlipFn.hh"
+#endif
+
+// Set spatial database for final slip.
+inline
+void
+pylith::faults::TimeHistorySlipFn::dbAmplitude(spatialdata::spatialdb::SpatialDB* const db) {
+  _dbAmplitude = db;
+} // dbFinalSlip
+
+// Set spatial database for slip initiation time.
+inline
+void
+pylith::faults::TimeHistorySlipFn::dbSlipTime(spatialdata::spatialdb::SpatialDB* const db) {
+  _dbSlipTime = db;
+} // dbSlipTime
+
+// Set time history.
+inline
+void
+pylith::faults::TimeHistorySlipFn::dbTimeHistory(spatialdata::spatialdb::TimeHistory* const th) {
+  _dbTimeHistory = th;
+} // dbTimeHistory
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/libsrc/faults/TopologyOps.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/TopologyOps.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/TopologyOps.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -12,7 +12,7 @@
 
 /** @file libsrc/faults/TopologyOps.hh
  *
- * @brief C++ object to manage creation of cohesive cells.
+ * @brief C++ helper object for creation of cohesive cells.
  */
 
 #if !defined(pylith_faults_topologyops_hh)
@@ -24,6 +24,7 @@
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
 // TopologyOps ----------------------------------------------------------
+/// Helper object for creation of cohesive cells.
 class pylith::faults::TopologyOps
 { // class TopologyOps
 

Modified: short/3D/PyLith/trunk/libsrc/faults/TopologyVisitors.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/TopologyVisitors.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/TopologyVisitors.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -22,6 +22,7 @@
 #include "faultsfwd.hh" // forward declarations
 
 // ReplaceVisitor -------------------------------------------------------
+/// Visitor for replacement.
 template<typename Sieve, typename Renumbering>
 class pylith::faults::ReplaceVisitor {
 private:
@@ -46,6 +47,7 @@
 };
 
 // ClassifyVisitor ------------------------------------------------------
+/// Visitor for classification.
 template<typename Sieve>
 class pylith::faults::ClassifyVisitor {
 public:

Modified: short/3D/PyLith/trunk/libsrc/faults/faultsfwd.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/faultsfwd.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/faults/faultsfwd.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -29,6 +29,7 @@
     class Fault;
     class FaultCohesive;
     class FaultCohesiveDyn;
+    class FaultCohesiveDynL;
     class FaultCohesiveKin;
 
     class EqKinSrc;
@@ -37,6 +38,7 @@
     class ConstRateSlipFn;
     class LiuCosSlipFn;
     class StepSlipFn;
+    class TimeHistorySlipFn;
 
     class TopologyOps;
     template<typename Sieve, typename Renumbering> class ReplaceVisitor;


Property changes on: short/3D/PyLith/trunk/libsrc/feassemble
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/feassemble/CellGeometry.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/CellGeometry.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/CellGeometry.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/CellGeometry.hh
+ * @file libsrc/feassemble/CellGeometry.hh
  *
  * @brief C++ abstract base class for cell geometry calculations.
  */
@@ -25,6 +25,7 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // CellGeometry ---------------------------------------------------------
+/// Abstract base class for cell geometry calculations.
 class pylith::feassemble::CellGeometry
 { // CellGeometry
   friend class TestCellGeometry; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Constraint.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Constraint.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Constraint.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -26,6 +26,9 @@
 #include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
 
 // Constraint -----------------------------------------------------------
+/** @brief Abstract base class for defining constraints applied to
+ *  vertices of finite-elements.
+ */
 class pylith::feassemble::Constraint
 { // class Constraint
   friend class TestConstraint; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -247,7 +247,41 @@
     const double_array& basis = _quadrature->basis();
     const double_array& basisDeriv = _quadrature->basisDeriv();
     const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& quadPtsNondim = _quadrature->quadPts();
 
+    // Compute body force vector if gravity is being used.
+    if (0 != _gravityField) {
+      _logger->eventBegin(computeEvent);
+      const spatialdata::geocoords::CoordSys* cs = fields->mesh().coordsys();
+      assert(0 != cs);
+
+      // Get density at quadrature points for this cell
+      const double_array& density = _material->calcDensity();
+
+      quadPtsGlobal = quadPtsNondim;
+      _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+          lengthScale);
+
+      // Compute action for element body forces
+      for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
+        const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+            &quadPtsGlobal[0], spaceDim, cs);
+        if (err)
+          throw std::runtime_error("Unable to get gravity vector for point.");
+        _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
+            gravityScale);
+        const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+        for (int iBasis = 0, iQ = iQuad * numBasis; iBasis < numBasis; ++iBasis) {
+          const double valI = wt * basis[iQ + iBasis];
+          for (int iDim = 0; iDim < spaceDim; ++iDim) {
+            _cellVector[iBasis * spaceDim + iDim] += valI * gravVec[iDim];
+          } // for
+        } // for
+      } // for
+      PetscLogFlops(numQuadPts * (2 + numBasis * (1 + 2 * spaceDim)));
+      _logger->eventEnd(computeEvent);
+    } // if
+
     // Compute action for inertial terms
     _logger->eventBegin(computeEvent);
     const double_array& density = _material->calcDensity();
@@ -431,5 +465,137 @@
   _material->resetNeedNewJacobian();
 } // integrateJacobian
 
+// ----------------------------------------------------------------------
+// Compute matrix associated with operator.
+void
+pylith::feassemble::ElasticityExplicit::integrateJacobian(
+			    const topology::Field<topology::Mesh>& jacobian,
+			    const double t,
+			    topology::SolutionFields* fields)
+{ // integrateJacobian
+  assert(0 != _quadrature);
+  assert(0 != _material);
+  assert(0 != fields);
 
+  const int setupEvent = _logger->eventId("ElIJ setup");
+  const int geometryEvent = _logger->eventId("ElIJ geometry");
+  const int computeEvent = _logger->eventId("ElIJ compute");
+  const int restrictEvent = _logger->eventId("ElIJ restrict");
+  const int stateVarsEvent = _logger->eventId("ElIJ stateVars");
+  const int updateEvent = _logger->eventId("ElIJ update");
+
+  _logger->eventBegin(setupEvent);
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const int tensorSize = _material->tensorSize();
+  if (cellDim != spaceDim)
+    throw std::logic_error("Don't know how to integrate elasticity " \
+			   "contribution to Jacobian matrix for cells with " \
+			   "different dimensions than the spatial dimension.");
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get parameters used in integration.
+  const double dt = _dt;
+  const double dt2 = dt*dt;
+  assert(dt > 0);
+
+  // Get sections
+  double_array dispTCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& dispTSection = 
+    fields->get("disp(t)").section();
+  assert(!dispTSection.isNull());
+
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  assert(!jacobianSection.isNull());
+  topology::Mesh::UpdateAddVisitor jacobianVisitor(*jacobianSection, 
+						   &_cellVector[0]);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  _logger->eventEnd(setupEvent);
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry information for current cell
+    _logger->eventBegin(geometryEvent);
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+    _logger->eventEnd(geometryEvent);
+
+    // Get state variables for cell.
+    _logger->eventBegin(stateVarsEvent);
+    _material->retrievePropsAndVars(*c_iter);
+    _logger->eventEnd(stateVarsEvent);
+
+    // Reset element matrix to zero
+    _resetCellMatrix();
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Get material physical properties at quadrature points for this cell
+    const double_array& density = _material->calcDensity();
+
+    // Compute Jacobian for inertial terms
+    _logger->eventBegin(computeEvent);
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = 
+	quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad] / dt2;
+      for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+        const double valI = wt*basis[iQ+iBasis];
+        for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+          const double valIJ = valI * basis[iQ+jBasis];
+          for (int iDim=0; iDim < spaceDim; ++iDim) {
+            const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
+            const int jBlock = (jBasis*spaceDim + iDim);
+            _cellMatrix[iBlock+jBlock] += valIJ;
+          } // for
+        } // for
+      } // for
+    } // for
+    PetscLogFlops(numQuadPts*(3+numBasis*(1+numBasis*(1+spaceDim))));
+    _lumpCellMatrix();
+    _logger->eventEnd(computeEvent);
+    
+    // Assemble cell contribution into lumped matrix.
+    _logger->eventBegin(updateEvent);
+    jacobianVisitor.clear();
+    sieveMesh->updateClosure(*c_iter, jacobianVisitor);
+    _logger->eventEnd(updateEvent);
+  } // for
+
+  _needNewJacobian = false;
+  _material->resetNeedNewJacobian();
+} // integrateJacobian
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,10 +11,21 @@
 //
 
 /**
- * @file pylith/feassemble/ElasticityExplicit.hh
+ * @file libsrc/feassemble/ElasticityExplicit.hh
  *
  * @brief Explicit time integration of dynamic elasticity equation
  * using finite-elements.
+ */
+
+#if !defined(pylith_feassemble_elasticityexplicit_hh)
+#define pylith_feassemble_elasticityexplicit_hh
+
+// Include directives ---------------------------------------------------
+#include "IntegratorElasticity.hh" // ISA IntegratorElasticity
+
+// ElasticityExplicit ---------------------------------------------------
+/**@brief Explicit time integration of the dynamic elasticity equation
+ * using finite-elements.
  *
  * Note: This object operates on a single finite-element family, which
  * is defined by the quadrature and a database of material property
@@ -22,9 +33,9 @@
  *
  * Computes contributions to terms A and r in
  *
- * A(t) u(t+dt) = b(u(t), u(t-dt)),
+ * A(t+dt) du(t) = b(t+dt, u(t), u(t-dt)) - A(t+dt) u(t),
  *
- * r = b - A u0(t+dt)
+ * r(t+dt) = b(t+dt) - A(t+dt) (u(t) + du(t))
  *
  * where A(t) is a sparse matrix or vector, u(t+dt) is the field we
  * want to compute at time t+dt, b is a vector that depends on the
@@ -50,15 +61,7 @@
  *
  * See governing equations section of user manual for more
  * information.
- */
-
-#if !defined(pylith_feassemble_elasticityexplicit_hh)
-#define pylith_feassemble_elasticityexplicit_hh
-
-// Include directives ---------------------------------------------------
-#include "IntegratorElasticity.hh" // ISA IntegratorElasticity
-
-// ElasticityExplicit ---------------------------------------------------
+*/
 class pylith::feassemble::ElasticityExplicit : public IntegratorElasticity
 { // ElasticityExplicit
   friend class TestElasticityExplicit; // unit testing
@@ -109,6 +112,17 @@
 			 const double t,
 			 topology::SolutionFields* const fields);
 
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator.
+   *
+   * @param jacobian Diagonal matrix (as field) for Jacobian of system.
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateJacobian(const topology::Field<topology::Mesh>& jacobian,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :
 

Copied: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/ElasticityExplicitLgDeform.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,603 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "ElasticityExplicitLgDeform.hh" // implementation of class methods
+
+#include "Quadrature.hh" // USES Quadrature
+#include "CellGeometry.hh" // USES CellGeometry
+
+#include "pylith/materials/ElasticMaterial.hh" // USES ElasticMaterial
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+
+#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
+#include "pylith/utils/lapack.h" // USES LAPACKdgesvd
+
+#include "petscmat.h" // USES PetscMat
+#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimendional
+
+#include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
+#include <cassert> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+
+//#define PRECOMPUTE_GEOMETRY
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::ElasticityExplicitLgDeform::ElasticityExplicitLgDeform(void) :
+  _dtm1(-1.0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::ElasticityExplicitLgDeform::~ElasticityExplicitLgDeform(void)
+{ // destructor
+  deallocate();
+} // destructor
+  
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void
+pylith::feassemble::ElasticityExplicitLgDeform::deallocate(void)
+{ // deallocate
+  IntegratorElasticityLgDeform::deallocate();
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Set time step for advancing from time t to time t+dt.
+void
+pylith::feassemble::ElasticityExplicitLgDeform::timeStep(const double dt)
+{ // timeStep
+  if (_dt != -1.0)
+    _dtm1 = _dt;
+  else
+    _dtm1 = dt;
+  _dt = dt;
+  assert(_dt == _dtm1); // For now, don't allow variable time step
+  if (0 != _material)
+    _material->timeStep(_dt);
+} // timeStep
+
+// ----------------------------------------------------------------------
+// Set flag for setting constraints for total field solution or
+// incremental field solution.
+void
+pylith::feassemble::ElasticityExplicitLgDeform::useSolnIncr(const bool flag)
+{ // useSolnIncr
+  if (!flag)
+    throw std::logic_error("Non-incremental solution not supported for "
+			   "explicit time integration of elasticity "
+			   "equation.");
+} // useSolnIncr
+
+// ----------------------------------------------------------------------
+// Integrate constributions to residual term (r) for operator.
+void
+pylith::feassemble::ElasticityExplicitLgDeform::integrateResidual(
+			  const topology::Field<topology::Mesh>& residual,
+			  const double t,
+			  topology::SolutionFields* const fields)
+{ // integrateResidual
+  /// Member prototype for _elasticityResidualXD()
+  typedef void (pylith::feassemble::ElasticityExplicitLgDeform::*elasticityResidual_fn_type)
+    (const double_array&, const double_array&);
+
+  assert(0 != _quadrature);
+  assert(0 != _material);
+  assert(0 != _logger);
+  assert(0 != fields);
+
+  const int setupEvent = _logger->eventId("ElIR setup");
+  const int geometryEvent = _logger->eventId("ElIR geometry");
+  const int computeEvent = _logger->eventId("ElIR compute");
+  const int restrictEvent = _logger->eventId("ElIR restrict");
+  const int stateVarsEvent = _logger->eventId("ElIR stateVars");
+  const int stressEvent = _logger->eventId("ElIR stress");
+  const int updateEvent = _logger->eventId("ElIR update");
+
+  _logger->eventBegin(setupEvent);
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const int tensorSize = _material->tensorSize();
+  /** :TODO:
+   *
+   * If cellDim and spaceDim are different, we need to transform
+   * displacements into cellDim, compute action, and transform result
+   * back into spaceDim. We get this information from the Jacobian and
+   * inverse of the Jacobian.
+   */
+  if (cellDim != spaceDim)
+    throw std::logic_error("Integration for cells with spatial dimensions "
+			   "different than the spatial dimension of the "
+			   "domain not implemented yet.");
+
+  // Set variables dependent on dimension of cell
+  totalStrain_fn_type calcTotalStrainFn;
+  elasticityResidual_fn_type elasticityResidualFn;
+  if (1 == cellDim) {
+    elasticityResidualFn = 
+      &pylith::feassemble::ElasticityExplicitLgDeform::_elasticityResidual1D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain1D;
+  } else if (2 == cellDim) {
+    elasticityResidualFn = 
+      &pylith::feassemble::ElasticityExplicitLgDeform::_elasticityResidual2D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain2D;
+  } else if (3 == cellDim) {
+    elasticityResidualFn = 
+      &pylith::feassemble::ElasticityExplicitLgDeform::_elasticityResidual3D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain3D;
+  } else
+    assert(0);
+
+  // Allocate vectors for cell values.
+  double_array dispTCell(numBasis*spaceDim);
+  double_array dispTmdtCell(numBasis*spaceDim);
+  double_array deformCell(numQuadPts*spaceDim*spaceDim);
+  double_array strainCell(numQuadPts*tensorSize);
+  double_array gravVec(spaceDim);
+  double_array quadPtsGlobal(numQuadPts*spaceDim);
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get sections
+  const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
+  assert(!dispTSection.isNull());
+  topology::Mesh::RestrictVisitor dispTVisitor(*dispTSection,
+					       numBasis*spaceDim, 
+					       &dispTCell[0]);
+  const ALE::Obj<RealSection>& dispTmdtSection = 
+    fields->get("disp(t-dt)").section();
+  assert(!dispTmdtSection.isNull());
+  topology::Mesh::RestrictVisitor dispTmdtVisitor(*dispTmdtSection,
+					       numBasis*spaceDim, 
+					       &dispTmdtCell[0]);
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  topology::Mesh::UpdateAddVisitor residualVisitor(*residualSection,
+						   &_cellVector[0]);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  assert(0 != _normalizer);
+  const double lengthScale = _normalizer->lengthScale();
+  const double gravityScale = 
+    _normalizer->pressureScale() / (_normalizer->lengthScale() *
+				    _normalizer->densityScale());
+
+  // Get parameters used in integration.
+  const double dt = _dt;
+  const double dt2 = dt*dt;
+  assert(dt > 0);
+
+  _logger->eventEnd(setupEvent);
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry information for current cell
+    _logger->eventBegin(geometryEvent);
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+    _logger->eventEnd(geometryEvent);
+
+    // Get state variables for cell.
+    _logger->eventBegin(stateVarsEvent);
+    _material->retrievePropsAndVars(*c_iter);
+    _logger->eventEnd(stateVarsEvent);
+
+    // Reset element vector to zero
+    _resetCellVector();
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& basisDeriv = _quadrature->basisDeriv();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& quadPtsNondim = _quadrature->quadPts();
+
+    // Restrict input fields to cell
+    _logger->eventBegin(restrictEvent);
+    dispTVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTVisitor);
+    dispTmdtVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTmdtVisitor);
+    _logger->eventEnd(restrictEvent);
+
+    // Compute body force vector if gravity is being used.
+    if (0 != _gravityField) {
+      _logger->eventBegin(computeEvent);
+      const spatialdata::geocoords::CoordSys* cs = fields->mesh().coordsys();
+      assert(0 != cs);
+      
+      // Get density at quadrature points for this cell
+      const double_array& density = _material->calcDensity();
+
+      quadPtsGlobal = quadPtsNondim;
+      _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+				  lengthScale);
+
+      // Compute action for element body forces
+      for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+	const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+					     &quadPtsGlobal[0], spaceDim, cs);
+	if (err)
+	  throw std::runtime_error("Unable to get gravity vector for point.");
+	_normalizer->nondimensionalize(&gravVec[0], gravVec.size(), 
+				       gravityScale);
+	const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+	for (int iBasis=0, iQ=iQuad*numBasis;
+	     iBasis < numBasis; ++iBasis) {
+	  const double valI = wt*basis[iQ+iBasis];
+	  for (int iDim=0; iDim < spaceDim; ++iDim) {
+	    _cellVector[iBasis*spaceDim+iDim] += valI*gravVec[iDim];
+	  } // for
+	} // for
+      } // for
+      PetscLogFlops(numQuadPts*(2+numBasis*(1+2*spaceDim)));
+      _logger->eventEnd(computeEvent);      
+    } // if
+
+    // Compute action for inertial terms
+    _logger->eventBegin(computeEvent);
+    const double_array& density = _material->calcDensity();
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = 
+	quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad] / dt2;
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+        const double valI = wt*basis[iQuad*numBasis+iBasis];
+        for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+          const double valIJ = valI * basis[iQuad*numBasis+jBasis];
+          for (int iDim=0; iDim < spaceDim; ++iDim)
+            _cellVector[iBasis*spaceDim+iDim] += 
+	      valIJ * (dispTCell[jBasis*spaceDim+iDim]
+		       - dispTmdtCell[jBasis*spaceDim+iDim]);
+        } // for
+      } // for
+    } // for
+    PetscLogFlops(numQuadPts*(3+numBasis*(1+numBasis*(6*spaceDim))));
+    _logger->eventEnd(computeEvent);
+
+    // Compute B(transpose) * sigma, first computing strains
+    _logger->eventBegin(stressEvent);
+    _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispTCell,
+		     numBasis, numQuadPts, spaceDim);
+    calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
+    const double_array& stressCell = _material->calcStress(strainCell, true);
+    _logger->eventEnd(stressEvent);
+
+    _logger->eventBegin(computeEvent);
+    CALL_MEMBER_FN(*this, elasticityResidualFn)(stressCell, dispTCell);
+    _logger->eventEnd(computeEvent);
+
+    // Assemble cell contribution into field
+    _logger->eventBegin(updateEvent);
+    residualVisitor.clear();
+    sieveMesh->updateClosure(*c_iter, residualVisitor);
+    _logger->eventEnd(updateEvent);
+  } // for
+} // integrateResidual
+
+// ----------------------------------------------------------------------
+// Compute matrix associated with operator.
+void
+pylith::feassemble::ElasticityExplicitLgDeform::integrateJacobian(
+					topology::Jacobian* jacobian,
+					const double t,
+					topology::SolutionFields* fields)
+{ // integrateJacobian
+  assert(0 != _quadrature);
+  assert(0 != _material);
+  assert(0 != jacobian);
+  assert(0 != fields);
+
+  const int setupEvent = _logger->eventId("ElIJ setup");
+  const int geometryEvent = _logger->eventId("ElIJ geometry");
+  const int computeEvent = _logger->eventId("ElIJ compute");
+  const int restrictEvent = _logger->eventId("ElIJ restrict");
+  const int stateVarsEvent = _logger->eventId("ElIJ stateVars");
+  const int updateEvent = _logger->eventId("ElIJ update");
+
+  _logger->eventBegin(setupEvent);
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const int tensorSize = _material->tensorSize();
+  if (cellDim != spaceDim)
+    throw std::logic_error("Don't know how to integrate elasticity " \
+			   "contribution to Jacobian matrix for cells with " \
+			   "different dimensions than the spatial dimension.");
+
+  // Allocate vectors for cell data.
+  double_array dispTCell(numBasis*spaceDim);
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get sections
+  const ALE::Obj<RealSection>& dispTSection = 
+    fields->get("disp(t)").section();
+  assert(!dispTSection.isNull());
+
+  // Get sparse matrix
+  const PetscMat jacobianMat = jacobian->matrix();
+  assert(0 != jacobianMat);
+
+  // Get parameters used in integration.
+  const double dt = _dt;
+  const double dt2 = dt*dt;
+  assert(dt > 0);
+
+  const ALE::Obj<SieveMesh::order_type>& globalOrder = 
+    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", dispTSection);
+  assert(!globalOrder.isNull());
+  // We would need to request unique points here if we had an interpolated mesh
+  topology::Mesh::IndicesVisitor jacobianVisitor(*dispTSection, *globalOrder,
+		  (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
+			    sieveMesh->depth())*spaceDim);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  _logger->eventEnd(setupEvent);
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry information for current cell
+    _logger->eventBegin(geometryEvent);
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+    _logger->eventEnd(geometryEvent);
+
+    // Get state variables for cell.
+    _logger->eventBegin(stateVarsEvent);
+    _material->retrievePropsAndVars(*c_iter);
+    _logger->eventEnd(stateVarsEvent);
+
+    // Reset element matrix to zero
+    _resetCellMatrix();
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Get material physical properties at quadrature points for this cell
+    const double_array& density = _material->calcDensity();
+
+    // Compute Jacobian for inertial terms
+    _logger->eventBegin(computeEvent);
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = 
+	quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad] / dt2;
+      for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+        const double valI = wt*basis[iQ+iBasis];
+        for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+          const double valIJ = valI * basis[iQ+jBasis];
+          for (int iDim=0; iDim < spaceDim; ++iDim) {
+            const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
+            const int jBlock = (jBasis*spaceDim + iDim);
+            _cellMatrix[iBlock+jBlock] += valIJ;
+          } // for
+        } // for
+      } // for
+    } // for
+    PetscLogFlops(numQuadPts*(3+numBasis*(1+numBasis*(1+spaceDim))));
+    _logger->eventEnd(computeEvent);
+    
+    // Assemble cell contribution into PETSc matrix.
+    _logger->eventBegin(updateEvent);
+    jacobianVisitor.clear();
+    PetscErrorCode err = updateOperator(jacobianMat, *sieveMesh->getSieve(),
+					jacobianVisitor, *c_iter,
+					&_cellMatrix[0], ADD_VALUES);
+    CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
+    _logger->eventEnd(updateEvent);
+  } // for
+
+  _needNewJacobian = false;
+  _material->resetNeedNewJacobian();
+} // integrateJacobian
+
+// ----------------------------------------------------------------------
+// Compute matrix associated with operator.
+void
+pylith::feassemble::ElasticityExplicitLgDeform::integrateJacobian(
+			    const topology::Field<topology::Mesh>& jacobian,
+			    const double t,
+			    topology::SolutionFields* fields)
+{ // integrateJacobian
+  assert(0 != _quadrature);
+  assert(0 != _material);
+  assert(0 != fields);
+
+  const int setupEvent = _logger->eventId("ElIJ setup");
+  const int geometryEvent = _logger->eventId("ElIJ geometry");
+  const int computeEvent = _logger->eventId("ElIJ compute");
+  const int restrictEvent = _logger->eventId("ElIJ restrict");
+  const int stateVarsEvent = _logger->eventId("ElIJ stateVars");
+  const int updateEvent = _logger->eventId("ElIJ update");
+
+  _logger->eventBegin(setupEvent);
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const int tensorSize = _material->tensorSize();
+  if (cellDim != spaceDim)
+    throw std::logic_error("Don't know how to integrate elasticity " \
+			   "contribution to Jacobian matrix for cells with " \
+			   "different dimensions than the spatial dimension.");
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get parameters used in integration.
+  const double dt = _dt;
+  const double dt2 = dt*dt;
+  assert(dt > 0);
+
+  // Get sections
+  double_array dispTCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& dispTSection = 
+    fields->get("disp(t)").section();
+  assert(!dispTSection.isNull());
+
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  assert(!jacobianSection.isNull());
+  topology::Mesh::UpdateAddVisitor jacobianVisitor(*jacobianSection, 
+						   &_cellVector[0]);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  _logger->eventEnd(setupEvent);
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry information for current cell
+    _logger->eventBegin(geometryEvent);
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+    _logger->eventEnd(geometryEvent);
+
+    // Get state variables for cell.
+    _logger->eventBegin(stateVarsEvent);
+    _material->retrievePropsAndVars(*c_iter);
+    _logger->eventEnd(stateVarsEvent);
+
+    // Reset element matrix to zero
+    _resetCellMatrix();
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Get material physical properties at quadrature points for this cell
+    const double_array& density = _material->calcDensity();
+
+    // Compute Jacobian for inertial terms
+    _logger->eventBegin(computeEvent);
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = 
+	quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad] / dt2;
+      for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+        const double valI = wt*basis[iQ+iBasis];
+        for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+          const double valIJ = valI * basis[iQ+jBasis];
+          for (int iDim=0; iDim < spaceDim; ++iDim) {
+            const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
+            const int jBlock = (jBasis*spaceDim + iDim);
+            _cellMatrix[iBlock+jBlock] += valIJ;
+          } // for
+        } // for
+      } // for
+    } // for
+    PetscLogFlops(numQuadPts*(3+numBasis*(1+numBasis*(1+spaceDim))));
+    _lumpCellMatrix();
+    _logger->eventEnd(computeEvent);
+    
+    // Assemble cell contribution into lumped matrix.
+    _logger->eventBegin(updateEvent);
+    jacobianVisitor.clear();
+    sieveMesh->updateClosure(*c_iter, jacobianVisitor);
+    _logger->eventEnd(updateEvent);
+  } // for
+
+  _needNewJacobian = false;
+  _material->resetNeedNewJacobian();
+} // integrateJacobian
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/ElasticityExplicitLgDeform.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitLgDeform.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,147 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file libsrc/feassemble/ElasticityExplicitLgDeform.hh
+ *
+ * @brief Explicit time integration of dynamic elasticity equation
+ * with large rigid body motion and small strains using
+ * finite-elements.
+ */
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeform_hh)
+#define pylith_feassemble_elasticityexplicitlgdeform_hh
+
+// Include directives ---------------------------------------------------
+#include "IntegratorElasticityLgDeform.hh" // ISA IntegratorElasticityLgDeform
+
+// ElasticityExplicitLgDeform -------------------------------------------
+/**@brief Explicit time integration of the dynamic elasticity equation
+ * with large rigid body motion and small strains using finite-elements.
+ *
+ * Note: This object operates on a single finite-element family, which
+ * is defined by the quadrature and a database of material property
+ * parameters.
+ *
+ * Computes contributions to terms A and r in
+ *
+ * A(t+dt) du(t) = b(t+dt, u(t), u(t-dt)) - A(t+dt) u(t),
+ *
+ * r(t+dt) = b(t+dt) - A(t+dt) (u(t) + du(t))
+ *
+ * where A(t) is a sparse matrix or vector, u(t+dt) is the field we
+ * want to compute at time t+dt, b is a vector that depends on the
+ * field at time t and t-dt, and u0 is zero at unknown DOF and set to
+ * the known values at the constrained DOF.
+ *
+ * Contributions from elasticity include the intertial and stiffness
+ * terms, so this object computes the following portions of A and r:
+ *
+ * A = 1/(dt*dt) [M]
+ *
+ * r = (1/(dt*dt) [M])(- {u(t+dt)} + 2/(dt*dt){u(t)} - {u(t-dt)}) - [K]{u(t)}
+ *
+ * Translational inertia.
+ *   - Residual action over cell
+ *     \f[
+ *       \int_{V^e} \rho N^p \sum_q N^q u_i^q \, dV
+ *     \f]
+ *   - Jacobian action over cell
+ *     \f[
+ *       \int_{V^e} (\rho N^q N^q)_i \, dV
+ *     \f]
+ *
+ * See governing equations section of user manual for more
+ * information.
+*/
+class pylith::feassemble::ElasticityExplicitLgDeform :
+  public IntegratorElasticityLgDeform
+{ // ElasticityExplicitLgDeform
+  friend class TestElasticityExplicitLgDeform; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  ElasticityExplicitLgDeform(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeform(void);
+
+  /// Deallocate PETSc and local data structures.
+  void deallocate(void);
+  
+  /** Set time step for advancing from time t to time t+dt.
+   *
+   * @param dt Time step
+   */
+  void timeStep(const double dt);
+
+  /** Set flag for setting constraints for total field solution or
+   *  incremental field solution.
+   *
+   * @param flag True if using incremental solution, false otherwise.
+   */
+  void useSolnIncr(const bool flag);
+
+  /** Integrate contributions to residual term (r) for operator.
+   *
+   * @param residual Field containing values for residual
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateResidual(const topology::Field<topology::Mesh>& residual,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator.
+   *
+   * @param jacobian Sparse matrix for Jacobian of system.
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateJacobian(topology::Jacobian* jacobian,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator.
+   *
+   * @param jacobian Diagonal matrix (as field) for Jacobian of system.
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateJacobian(const topology::Field<topology::Mesh>& jacobian,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  /// Not implemented.
+  ElasticityExplicitLgDeform(const ElasticityExplicitLgDeform&);
+
+  /// Not implemented
+  const ElasticityExplicitLgDeform& operator=(const ElasticityExplicitLgDeform&);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private :
+
+  double _dtm1; ///< Time step for t-dt1 -> t
+
+}; // ElasticityExplicitLgDeform
+
+#endif // pylith_feassemble_elasticityexplicitlgdeform_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -258,33 +258,32 @@
       _logger->eventBegin(computeEvent);
       const spatialdata::geocoords::CoordSys* cs = fields->mesh().coordsys();
       assert(0 != cs);
-      
+
       // Get density at quadrature points for this cell
       const double_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
-				  lengthScale);
+          lengthScale);
 
       // Compute action for element body forces
-      for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-	const int err = _gravityField->query(&gravVec[0], gravVec.size(),
-					     &quadPtsGlobal[0], spaceDim, cs);
-	if (err)
-	  throw std::runtime_error("Unable to get gravity vector for point.");
-	_normalizer->nondimensionalize(&gravVec[0], gravVec.size(), 
-				       gravityScale);
-	const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
-	for (int iBasis=0, iQ=iQuad*numBasis;
-	     iBasis < numBasis; ++iBasis) {
-	  const double valI = wt*basis[iQ+iBasis];
-	  for (int iDim=0; iDim < spaceDim; ++iDim) {
-	    _cellVector[iBasis*spaceDim+iDim] += valI*gravVec[iDim];
-	  } // for
-	} // for
+      for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
+        const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+            &quadPtsGlobal[0], spaceDim, cs);
+        if (err)
+          throw std::runtime_error("Unable to get gravity vector for point.");
+        _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
+            gravityScale);
+        const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+        for (int iBasis = 0, iQ = iQuad * numBasis; iBasis < numBasis; ++iBasis) {
+          const double valI = wt * basis[iQ + iBasis];
+          for (int iDim = 0; iDim < spaceDim; ++iDim) {
+            _cellVector[iBasis * spaceDim + iDim] += valI * gravVec[iDim];
+          } // for
+        } // for
       } // for
-      PetscLogFlops(numQuadPts*(2+numBasis*(1+2*spaceDim)));
-      _logger->eventEnd(computeEvent);      
+      PetscLogFlops(numQuadPts * (2 + numBasis * (1 + 2 * spaceDim)));
+      _logger->eventEnd(computeEvent);
     } // if
 
     // residualSection->view("After gravity contribution");
@@ -309,7 +308,6 @@
     _logger->eventBegin(updateEvent);
     residualVisitor.clear();
     sieveMesh->updateClosure(*c_iter, residualVisitor);
-    // residualSection->view("After stress contribution");
     _logger->eventEnd(updateEvent);
   } // for
 } // integrateResidual
@@ -357,19 +355,26 @@
   // Set variables dependent on dimension of cell
   totalStrain_fn_type calcTotalStrainFn;
   elasticityJacobian_fn_type elasticityJacobianFn;
+  elasticityJacobian_fn_type elasticityPreconFn;
   if (1 == cellDim) {
     elasticityJacobianFn = 
       &pylith::feassemble::ElasticityImplicit::_elasticityJacobian1D;
+    elasticityPreconFn = 
+      &pylith::feassemble::ElasticityImplicit::_elasticityPrecon1D;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain1D;
   } else if (2 == cellDim) {
     elasticityJacobianFn = 
       &pylith::feassemble::ElasticityImplicit::_elasticityJacobian2D;
+    elasticityPreconFn = 
+      &pylith::feassemble::ElasticityImplicit::_elasticityPrecon2D;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain2D;
   } else if (3 == cellDim) {
     elasticityJacobianFn = 
       &pylith::feassemble::ElasticityImplicit::_elasticityJacobian3D;
+    elasticityPreconFn = 
+      &pylith::feassemble::ElasticityImplicit::_elasticityPrecon3D;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain3D;
   } else
@@ -525,6 +530,21 @@
 					&_cellMatrix[0], ADD_VALUES);
     CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
     _logger->eventEnd(updateEvent);
+#if 0
+    _logger->eventBegin(computeEvent);
+    // Get laplacian matrix at quadrature points for this cell
+    CALL_MEMBER_FN(*this, elasticityPreconFn)(elasticConsts);
+    _logger->eventEnd(computeEvent);
+
+    // Assemble cell contribution into PETSc preconditioner matrix.
+    _logger->eventBegin(updateEvent);
+    jacobianVisitor.clear();
+    PetscErrorCode err = updateOperator(preconMat, *sieveMesh->getSieve(),
+					jacobianVisitor, *c_iter,
+					&_cellMatrix[0], ADD_VALUES);
+    CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
+    _logger->eventEnd(updateEvent);
+#endif
   } // for
   _needNewJacobian = false;
   _material->resetNeedNewJacobian();

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/ElasticityImplicit.hh
+ * @file libsrc/feassemble/ElasticityImplicit.hh
  *
  * @brief Implicit time integration of quasi-static elasticity equation
  * using finite-elements.
@@ -22,13 +22,13 @@
  *
  * Computes contributions to terms A and r in
  *
- * A(t) u(t+dt) = b(u(t), u(t-dt)),
+ * A(t+dt) du(t) = b(t+dt, u(t), u(t-dt)) - A(t+dt) u(t)
  *
- * r = b - A u0(t+dt)
+ * r = b(t+dt) - A(t+dt) (u(t) + du(t))
  *
  * where A(t) is a sparse matrix or vector, u(t+dt) is the field we
- * want to compute at time t+dt, b is a vector that depends on the
- * field at time t and t-dt, and u0 is zero at unknown DOF and set to
+ * want to compute at time t+dt, b(t+dt) is a vector that depends on the
+ * field at time t+dt and t, and du is zero at unknown DOF and set to
  * the constrained values at known DOF.
  *
  * Contributions to the RHS (b) include body forces, which are either

Copied: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/ElasticityImplicitLgDeform.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,540 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "ElasticityImplicitLgDeform.hh" // implementation of class methods
+
+#include "Quadrature.hh" // USES Quadrature
+#include "CellGeometry.hh" // USES CellGeometry
+
+#include "pylith/materials/ElasticMaterial.hh" // USES ElasticMaterial
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+
+#include "pylith/utils/EventLogger.hh" // USES EventLogger
+#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
+#include "pylith/utils/lapack.h" // USES LAPACKdgesvd
+
+#include "petscmat.h" // USES PetscMat
+#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimendional
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+#include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
+#include <cassert> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+
+//#define PRECOMPUTE_GEOMETRY
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::ElasticityImplicitLgDeform::ElasticityImplicitLgDeform(void) :
+  _dtm1(-1.0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::ElasticityImplicitLgDeform::~ElasticityImplicitLgDeform(void)
+{ // destructor
+  deallocate();
+} // destructor
+  
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void
+pylith::feassemble::ElasticityImplicitLgDeform::deallocate(void)
+{ // deallocate
+  IntegratorElasticityLgDeform::deallocate();
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Set time step for advancing from time t to time t+dt.
+void
+pylith::feassemble::ElasticityImplicitLgDeform::timeStep(const double dt)
+{ // timeStep
+  if (_dt != -1.0)
+    _dtm1 = _dt;
+  else
+    _dtm1 = dt;
+  _dt = dt;
+  if (0 != _material)
+    _material->timeStep(_dt);
+} // timeStep
+
+// ----------------------------------------------------------------------
+// Get stable time step for advancing from time t to time t+dt.
+double
+pylith::feassemble::ElasticityImplicitLgDeform::stableTimeStep(const topology::Mesh& mesh) const
+{ // stableTimeStep
+  assert(0 != _material);
+  return _material->stableTimeStepImplicit(mesh);
+} // stableTimeStep
+
+// ----------------------------------------------------------------------
+// Set flag for setting constraints for total field solution or
+// incremental field solution.
+void
+pylith::feassemble::ElasticityImplicitLgDeform::useSolnIncr(const bool flag)
+{ // useSolnIncr
+  assert(0 != _material);
+  _useSolnIncr = flag;
+  _material->useElasticBehavior(!_useSolnIncr);
+} // useSolnIncr
+
+// ----------------------------------------------------------------------
+// Integrate constributions to residual term (r) for operator.
+void
+pylith::feassemble::ElasticityImplicitLgDeform::integrateResidual(
+			  const topology::Field<topology::Mesh>& residual,
+			  const double t,
+			  topology::SolutionFields* const fields)
+{ // integrateResidual
+  /// Member prototype for _elasticityResidualXD()
+  typedef void (pylith::feassemble::ElasticityImplicitLgDeform::*elasticityResidual_fn_type)
+    (const double_array&, const double_array&);
+  
+  assert(0 != _quadrature);
+  assert(0 != _material);
+  assert(0 != _logger);
+  assert(0 != fields);
+
+  const int setupEvent = _logger->eventId("ElIR setup");
+  const int geometryEvent = _logger->eventId("ElIR geometry");
+  const int computeEvent = _logger->eventId("ElIR compute");
+  const int restrictEvent = _logger->eventId("ElIR restrict");
+  const int stateVarsEvent = _logger->eventId("ElIR stateVars");
+  const int stressEvent = _logger->eventId("ElIR stress");
+  const int updateEvent = _logger->eventId("ElIR update");
+
+  _logger->eventBegin(setupEvent);
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const int tensorSize = _material->tensorSize();
+  if (cellDim != spaceDim)
+    throw std::logic_error("Integration for cells with spatial dimensions "
+			   "different than the spatial dimension of the "
+			   "domain not implemented yet.");
+
+  // Set variables dependent on dimension of cell
+  totalStrain_fn_type calcTotalStrainFn;
+  elasticityResidual_fn_type elasticityResidualFn;
+  if (1 == cellDim) {
+    elasticityResidualFn = 
+      &pylith::feassemble::ElasticityImplicitLgDeform::_elasticityResidual1D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain1D;
+  } else if (2 == cellDim) {
+    elasticityResidualFn = 
+      &pylith::feassemble::ElasticityImplicitLgDeform::_elasticityResidual2D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain2D;
+  } else if (3 == cellDim) {
+    elasticityResidualFn = 
+      &pylith::feassemble::ElasticityImplicitLgDeform::_elasticityResidual3D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain3D;
+  } else
+    assert(0);
+
+  // Allocate vectors for cell values.
+  double_array dispTCell(numBasis*spaceDim);
+  double_array dispTIncrCell(numBasis*spaceDim);
+  double_array dispTpdtCell(numBasis*spaceDim);
+  double_array deformCell(numQuadPts*spaceDim*spaceDim);
+  double_array strainCell(numQuadPts*tensorSize);
+  double_array gravVec(spaceDim);
+  double_array quadPtsGlobal(numQuadPts*spaceDim);
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get sections
+  const ALE::Obj<RealSection>& dispTSection = 
+    fields->get("disp(t)").section();
+  assert(!dispTSection.isNull());
+  topology::Mesh::RestrictVisitor dispTVisitor(*dispTSection,
+					       numBasis*spaceDim, 
+					       &dispTCell[0]);
+  const ALE::Obj<RealSection>& dispTIncrSection = 
+    fields->get("dispIncr(t->t+dt)").section();
+  assert(!dispTIncrSection.isNull());
+  topology::Mesh::RestrictVisitor dispTIncrVisitor(*dispTIncrSection,
+						   numBasis*spaceDim, 
+						   &dispTIncrCell[0]);
+
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  topology::Mesh::UpdateAddVisitor residualVisitor(*residualSection,
+						   &_cellVector[0]);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  assert(0 != _normalizer);
+  const double lengthScale = _normalizer->lengthScale();
+  const double gravityScale = 
+    _normalizer->pressureScale() / (_normalizer->lengthScale() *
+				    _normalizer->densityScale());
+
+  _logger->eventEnd(setupEvent);
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry information for current cell
+    _logger->eventBegin(geometryEvent);
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+    _logger->eventEnd(geometryEvent);
+
+    // Get state variables for cell.
+    _logger->eventBegin(stateVarsEvent);
+    _material->retrievePropsAndVars(*c_iter);
+    _logger->eventEnd(stateVarsEvent);
+
+    // Reset element vector to zero
+    _resetCellVector();
+
+    // Restrict input fields to cell
+    _logger->eventBegin(restrictEvent);
+    dispTVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTVisitor);
+    dispTIncrVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
+    _logger->eventBegin(restrictEvent);
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& basisDeriv = _quadrature->basisDeriv();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const double_array& quadPtsNondim = _quadrature->quadPts();
+
+    // Compute current estimate of displacement at time t+dt using
+    // solution increment.
+    dispTpdtCell = dispTCell + dispTIncrCell;
+
+    // Compute body force vector if gravity is being used.
+    if (0 != _gravityField) {
+      _logger->eventBegin(computeEvent);
+      const spatialdata::geocoords::CoordSys* cs = fields->mesh().coordsys();
+      assert(0 != cs);
+      
+      // Get density at quadrature points for this cell
+      const double_array& density = _material->calcDensity();
+
+      quadPtsGlobal = quadPtsNondim;
+      _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+				  lengthScale);
+
+      // Compute action for element body forces
+      for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+	const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+					     &quadPtsGlobal[0], spaceDim, cs);
+	if (err)
+	  throw std::runtime_error("Unable to get gravity vector for point.");
+	_normalizer->nondimensionalize(&gravVec[0], gravVec.size(), 
+				       gravityScale);
+	const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+	for (int iBasis=0, iQ=iQuad*numBasis;
+	     iBasis < numBasis; ++iBasis) {
+	  const double valI = wt*basis[iQ+iBasis];
+	  for (int iDim=0; iDim < spaceDim; ++iDim) {
+	    _cellVector[iBasis*spaceDim+iDim] += valI*gravVec[iDim];
+	  } // for
+	} // for
+      } // for
+      PetscLogFlops(numQuadPts*(2+numBasis*(1+2*spaceDim)));
+      _logger->eventEnd(computeEvent);      
+    } // if
+
+    // Compute B(transpose) * sigma, first computing deformation
+    // tensor and strains
+    _logger->eventBegin(stressEvent);
+    _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispTpdtCell,
+		     numBasis, numQuadPts, spaceDim);
+    calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
+    const double_array& stressCell = _material->calcStress(strainCell, true);
+    _logger->eventEnd(stressEvent);
+
+    _logger->eventBegin(computeEvent);
+    CALL_MEMBER_FN(*this, elasticityResidualFn)(stressCell, dispTpdtCell);
+    _logger->eventEnd(computeEvent);
+
+#if 0 // DEBUGGING
+    std::cout << "Updating residual for cell " << *c_iter << std::endl;
+    for(int i = 0; i < _quadrature->spaceDim() * _quadrature->numBasis(); ++i) {
+      std::cout << "  v["<<i<<"]: " << _cellVector[i] << std::endl;
+    }
+#endif
+    // Assemble cell contribution into field
+    _logger->eventBegin(updateEvent);
+    residualVisitor.clear();
+    sieveMesh->updateClosure(*c_iter, residualVisitor);
+    _logger->eventEnd(updateEvent);
+  } // for
+} // integrateResidual
+
+// ----------------------------------------------------------------------
+// Compute stiffness matrix.
+void
+pylith::feassemble::ElasticityImplicitLgDeform::integrateJacobian(
+					topology::Jacobian* jacobian,
+					const double t,
+					topology::SolutionFields* fields)
+{ // integrateJacobian
+  /// Member prototype for _elasticityJacobianXD()
+  typedef void (pylith::feassemble::ElasticityImplicitLgDeform::*elasticityJacobian_fn_type)
+    (const double_array&, const double_array&, const double_array&);
+
+  assert(0 != _quadrature);
+  assert(0 != _material);
+  assert(0 != _logger);
+  assert(0 != jacobian);
+  assert(0 != fields);
+
+  const int setupEvent = _logger->eventId("ElIJ setup");
+  const int geometryEvent = _logger->eventId("ElIJ geometry");
+  const int computeEvent = _logger->eventId("ElIJ compute");
+  const int restrictEvent = _logger->eventId("ElIJ restrict");
+  const int stateVarsEvent = _logger->eventId("ElIJ stateVars");
+  const int updateEvent = _logger->eventId("ElIJ update");
+
+  _logger->eventBegin(setupEvent);
+
+  // Get cell geometry information that doesn't depend on cell
+  const int numQuadPts = _quadrature->numQuadPts();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const int tensorSize = _material->tensorSize();
+  if (cellDim != spaceDim)
+    throw std::logic_error("Don't know how to integrate elasticity " \
+			   "contribution to Jacobian matrix for cells with " \
+			   "different dimensions than the spatial dimension.");
+
+  // Set variables dependent on dimension of cell
+  totalStrain_fn_type calcTotalStrainFn;
+  elasticityJacobian_fn_type elasticityJacobianFn;
+  if (1 == cellDim) {
+    elasticityJacobianFn = 
+      &pylith::feassemble::ElasticityImplicitLgDeform::_elasticityJacobian1D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain1D;
+  } else if (2 == cellDim) {
+    elasticityJacobianFn = 
+      &pylith::feassemble::ElasticityImplicitLgDeform::_elasticityJacobian2D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain2D;
+  } else if (3 == cellDim) {
+    elasticityJacobianFn = 
+      &pylith::feassemble::ElasticityImplicitLgDeform::_elasticityJacobian3D;
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain3D;
+  } else
+    assert(0);
+
+  // Allocate vector for total strain
+  double_array dispTCell(numBasis*spaceDim);
+  double_array dispTIncrCell(numBasis*spaceDim);
+  double_array dispTpdtCell(numBasis*spaceDim);
+  double_array deformCell(numQuadPts*spaceDim*spaceDim);
+  double_array strainCell(numQuadPts*tensorSize);
+  double_array stressCell(numQuadPts*tensorSize);
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get sections
+  const ALE::Obj<RealSection>& dispTSection = 
+    fields->get("disp(t)").section();
+  assert(!dispTSection.isNull());
+  topology::Mesh::RestrictVisitor dispTVisitor(*dispTSection,
+					       numBasis*spaceDim, 
+					       &dispTCell[0]);
+  const ALE::Obj<RealSection>& dispTIncrSection = 
+    fields->get("dispIncr(t->t+dt)").section();
+  assert(!dispTIncrSection.isNull());
+  topology::Mesh::RestrictVisitor dispTIncrVisitor(*dispTIncrSection,
+						   numBasis*spaceDim, 
+						   &dispTIncrCell[0]);
+
+  // Get sparse matrix
+  const PetscMat jacobianMat = jacobian->matrix();
+  assert(0 != jacobianMat);
+
+  // Get parameters used in integration.
+  const double dt = _dt;
+  assert(dt > 0);
+
+  const ALE::Obj<SieveMesh::order_type>& globalOrder = 
+    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+					    dispTSection);
+  assert(!globalOrder.isNull());
+  // We would need to request unique points here if we had an interpolated mesh
+  topology::Mesh::IndicesVisitor jacobianVisitor(*dispTSection,
+						 *globalOrder,
+			   (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
+				     sieveMesh->depth())*spaceDim);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  _logger->eventEnd(setupEvent);
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry information for current cell
+    _logger->eventBegin(geometryEvent);
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+    _logger->eventEnd(geometryEvent);
+
+    // Get state variables for cell.
+    _logger->eventBegin(stateVarsEvent);
+    _material->retrievePropsAndVars(*c_iter);
+    _logger->eventEnd(stateVarsEvent);
+
+    // Reset element matrix to zero
+    _resetCellMatrix();
+
+    // Restrict input fields to cell
+    _logger->eventBegin(restrictEvent);
+    dispTVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTVisitor);
+    dispTIncrVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
+    _logger->eventBegin(restrictEvent);
+
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& basisDeriv = _quadrature->basisDeriv();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Compute current estimate of displacement at time t+dt using
+    // solution increment.
+    dispTpdtCell = dispTCell + dispTIncrCell;
+      
+    _logger->eventBegin(computeEvent);
+    // Compute deformation tensor, strains, and stresses
+    _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispTpdtCell,
+		     numBasis, numQuadPts, spaceDim);
+    calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
+
+    // Get "elasticity" matrix at quadrature points for this cell
+    const double_array& elasticConsts = 
+      _material->calcDerivElastic(strainCell);
+
+    // Get Second Priola-Kirchoff stress tensor
+    const double_array& stressCell = _material->calcStress(strainCell, true);
+
+    CALL_MEMBER_FN(*this, elasticityJacobianFn)(elasticConsts, stressCell,
+						dispTpdtCell);
+    _logger->eventEnd(computeEvent);
+
+    if (_quadrature->checkConditioning()) {
+      int n = numBasis*spaceDim;
+      int lwork = 5*n;
+      int idummy = 0;
+      int lierr = 0;
+      double *elemMat = new double[n*n];
+      double *svalues = new double[n];
+      double *work    = new double[lwork];
+      double minSV = 0;
+      double maxSV = 0;
+      double sdummy = 0;
+
+      const int n2 = n*n;
+      for (int i = 0; i < n2; ++i)
+	elemMat[i] = _cellMatrix[i];
+      lapack_dgesvd("N", "N", &n, &n, elemMat, &n, svalues, 
+		    &sdummy, &idummy, &sdummy, &idummy, work,
+		    &lwork, &lierr);
+      if (lierr)
+	throw std::runtime_error("Lapack SVD failed");
+      minSV = svalues[n-7];
+      maxSV = svalues[0];
+      std::cout << "Element " << *c_iter << std::endl;
+      for(int i = 0; i < n; ++i)
+	std::cout << "    sV["<<i<<"] = " << svalues[i] << std::endl;
+      std::cout << "  kappa(elemMat) = " << maxSV/minSV << std::endl;
+      delete [] elemMat;
+      delete [] svalues;
+      delete [] work;
+    } // if
+
+    // Assemble cell contribution into PETSc matrix.
+    _logger->eventBegin(updateEvent);
+    jacobianVisitor.clear();
+    PetscErrorCode err = updateOperator(jacobianMat, *sieveMesh->getSieve(),
+					jacobianVisitor, *c_iter,
+					&_cellMatrix[0], ADD_VALUES);
+    CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
+    _logger->eventEnd(updateEvent);
+  } // for
+  _needNewJacobian = false;
+  _material->resetNeedNewJacobian();
+} // integrateJacobian
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/ElasticityImplicitLgDeform.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicitLgDeform.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,141 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file libsrc/feassemble/ElasticityImplicitLgDeform.hh
+ *
+ * @brief Implicit time integration of quasi-static elasticity equation
+ * with large rigid body motion and small strains using finite-elements.
+ *
+ * Note: This object operates on a single finite-element family, which
+ * is defined by the quadrature and a database of material property
+ * parameters.
+ *
+ * Computes contributions to terms A and r in
+ *
+ * A(t+dt) du(t) = b(t+dt, u(t), u(t-dt)) - A(t+dt) u(t)
+ *
+ * r = b(t+dt) - A(t+dt) (u(t) + du(t))
+ *
+ * where A(t) is a sparse matrix or vector, u(t+dt) is the field we
+ * want to compute at time t+dt, b(t+dt) is a vector that depends on the
+ * field at time t+dt and t, and du is zero at unknown DOF and set to
+ * the constrained values at known DOF.
+ *
+ * Contributions to the RHS (b) include body forces, which are either
+ * independent of u (small strain case) or are computed based on the
+ * displacements at time t. The RHS also includes the internal force
+ * vector, which is either constant for a time step (small strain,
+ * elastic rheology) or changes with each iteration (large strain or
+ * non-elastic rheology). The internal force vector is subtracted from the
+ * existing force vector to get the residual. This object also computes
+ * the entire stiffness matrix (A).
+ *
+ * See governing equations section of user manual for more
+ * information.
+ */
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeform_hh)
+#define pylith_feassemble_elasticityimplicitlgdeform_hh
+
+// Include directives ---------------------------------------------------
+#include "IntegratorElasticityLgDeform.hh" // ISA IntegratorElasticityLgDeform
+
+// ElasticityImplicitLgDeform -------------------------------------------
+class pylith::feassemble::ElasticityImplicitLgDeform : 
+  public IntegratorElasticityLgDeform
+{ // ElasticityImplicitLgDeform
+  friend class TestElasticityImplicitLgDeform; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  ElasticityImplicitLgDeform(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeform(void);
+
+  /// Deallocate PETSc and local data structures.
+  void deallocate(void);
+  
+  /** Set time step for advancing from time t to time t+dt.
+   *
+   * @param dt Time step
+   */
+  void timeStep(const double dt);
+
+  /** Get stable time step for advancing from time t to time t+dt.
+   *
+   * Default is current time step.
+   *
+   * @param mesh Finite-element mesh.
+   * @returns Time step
+   */
+  double stableTimeStep(const topology::Mesh& mesh) const;
+
+  /** Set flag for setting constraints for total field solution or
+   *  incremental field solution.
+   *
+   * @param flag True if using incremental solution, false otherwise.
+   */
+  void useSolnIncr(const bool flag);
+
+  /** Integrate residual part of RHS for 3-D finite elements.
+   * Includes gravity and element internal force contribution.
+   *
+   * We assume that the effects of boundary conditions are already
+   * included in the residual (tractions, concentrated nodal forces,
+   * and contributions to internal force vector due to
+   * displacement/velocity BC).  This routine computes the additional
+   * external loads due to body forces plus the
+   * element internal forces for the current stress state.
+   *
+   * @param residual Field containing values for residual
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateResidual(const topology::Field<topology::Mesh>& residual,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator.
+   *
+   * @param jacobian Sparse matrix for Jacobian of system.
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  void integrateJacobian(topology::Jacobian* jacobian,
+			 const double t,
+			 topology::SolutionFields* const fields);
+  
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  /// Not implemented.
+  ElasticityImplicitLgDeform(const ElasticityImplicitLgDeform&);
+
+  /// Not implemented
+  const ElasticityImplicitLgDeform& operator=(const ElasticityImplicitLgDeform&);
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private :
+
+  double _dtm1; ///< Time step for t-dt1 -> t
+
+}; // ElasticityImplicitLgDeform
+
+#endif // pylith_feassemble_elasticityimplicitlgdeform_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryHex3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,22 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryHex3D.hh
+ * @file libsrc/feassemble/GeometryHex3D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 3-D
  * hexahedral cell.
- *
- * Reference cell:
- *
- * Vertex   x     y    z
- *    0   -1.0  -1.0  -1.0
- *    1   +1.0  -1.0  -1.0
- *    2   +1.0  +1.0  -1.0
- *    3   -1.0  +1.0  -1.0
- *    4   -1.0  -1.0  +1.0
- *    5   +1.0  -1.0  +1.0
- *    6   +1.0  +1.0  +1.0
- *    7   -1.0  +1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometryhex3d_hh)
@@ -36,6 +24,23 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryHex3D --------------------------------------------------------
+/**
+ * @brief C++ implementation of cell geometry calculations for 3-D
+ * hexahedral cell.
+ *
+ * Reference cell:
+ at verbatim
+Vertex   x     y    z
+   0   -1.0  -1.0  -1.0
+   1   +1.0  -1.0  -1.0
+   2   +1.0  +1.0  -1.0
+   3   -1.0  +1.0  -1.0
+   4   -1.0  -1.0  +1.0
+   5   +1.0  -1.0  +1.0
+   6   +1.0  +1.0  +1.0
+   7   -1.0  +1.0  +1.0
+ at endverbatim
+ */
 class pylith::feassemble::GeometryHex3D : public CellGeometry
 { // GeometryHex3D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine1D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine1D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryLine1D.hh
+ * @file libsrc/feassemble/GeometryLine1D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 1-D
  * line cell.
@@ -24,6 +24,7 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryLine1D -------------------------------------------------------
+/// Cell geometry calculations for 1-D line cell.
 class pylith::feassemble::GeometryLine1D : public CellGeometry
 { // GeometryLine1D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine2D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine2D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryLine2D.hh
+ * @file libsrc/feassemble/GeometryLine2D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 1-D
  * line cell in 2-D space.
@@ -24,6 +24,7 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryLine2D -------------------------------------------------------
+/// Cell geometry calculations for 1-D line cell in 2-D space.
 class pylith::feassemble::GeometryLine2D : public CellGeometry
 { // GeometryLine2D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryLine3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryLine3D.hh
+ * @file libsrc/feassemble/GeometryLine3D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 1-D
  * line cell.
@@ -24,6 +24,7 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryLine3D -------------------------------------------------------
+/// Cell geometry calculations for 1-D line cell in 3-D space.
 class pylith::feassemble::GeometryLine3D : public CellGeometry
 { // GeometryLine3D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint1D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint1D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryPoint1D.hh
+ * @file libsrc/feassemble/GeometryPoint1D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 0-D
  * point cell.
@@ -24,6 +24,7 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryPoint1D ------------------------------------------------------
+/// Cell geometry calculations for 0-D point cell.
 class pylith::feassemble::GeometryPoint1D : public CellGeometry
 { // GeometryPoint1D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint2D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint2D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,10 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryPoint2D.hh
+ * @file libsrc/feassemble/GeometryPoint2D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 0-D
- * point cell.
+ * point cell in 2-D space.
  */
 
 #if !defined(pylith_feassemble_geometrypoint2d_hh)
@@ -24,6 +24,7 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryPoint2D ------------------------------------------------------
+/// Cell geometry calculations for 0-D line cell in 2-D space.
 class pylith::feassemble::GeometryPoint2D : public CellGeometry
 { // GeometryPoint2D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryPoint3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,10 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryPoint3D.hh
+ * @file libsrc/feassemble/GeometryPoint3D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 0-D
- * point cell.
+ * point cell in 3-D space.
  */
 
 #if !defined(pylith_feassemble_geometrypoint3d_hh)
@@ -24,6 +24,7 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryPoint3D ------------------------------------------------------
+/// Cell geometry calculations for 0-D line cell in 3-D space.
 class pylith::feassemble::GeometryPoint3D : public CellGeometry
 { // GeometryPoint3D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad2D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,23 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryQuad2D.hh
+ * @file libsrc/feassemble/GeometryQuad2D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * quadrilateral cell.
- *
- * Reference cell:
- *
- * 3 -- 2
- * |    |
- * |    |
- * 0 -- 1
- *
- * Vertex   x     y
- *    0   -1.0  -1.0
- *    1   +1.0  -1.0
- *    2   +1.0  +1.0
- *    3   -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometryquad2d_hh)
@@ -37,9 +24,28 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryQuad2D -------------------------------------------------------
-class pylith::feassemble::GeometryQuad2D : public CellGeometry
-{ // GeometryQuad2D
+/** @brief Cell geometry calculations for 2-D quadrilateral cell in
+ * 2-D space.
+ *
+ * @brief C++ implementation of cell geometry calculations for 2-D
+ * quadrilateral cell.
+ *
+ * Reference cell:
+ at verbatim
+3 -- 2
+|    |
+|    |
+0 -- 1
 
+Vertex   x     y
+   0   -1.0  -1.0
+   1   +1.0  -1.0
+   2   +1.0  +1.0
+   3   -1.0  +1.0
+ at endverbatim
+ */
+class pylith::feassemble::GeometryQuad2D : public CellGeometry {
+
 // PUBLIC METHODS ///////////////////////////////////////////////////////
 public :
   

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryQuad3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,23 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryQuad3D.hh
+ * @file libsrc/feassemble/GeometryQuad3D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * quadrilateral cell in 3-D.
- *
- * Reference cell:
- *
- * 3 -- 2
- * |    |
- * |    |
- * 0 -- 1
- *
- * Vertex   x     y
- *    0   -1.0  -1.0
- *    1   +1.0  -1.0
- *    2   +1.0  +1.0
- *    3   -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometryquad3d_hh)
@@ -37,6 +24,23 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryQuad3D -------------------------------------------------------
+/** @brief C++ implementation of cell geometry calculations for 2-D
+ * quadrilateral cell in 3-D.
+ *
+ * Reference cell:
+ at verbatim
+3 -- 2
+|    |
+|    |
+0 -- 1
+
+Vertex   x     y
+   0   -1.0  -1.0
+   1   +1.0  -1.0
+   2   +1.0  +1.0
+   3   -1.0  +1.0
+ at endverbatim
+ */
 class pylith::feassemble::GeometryQuad3D : public CellGeometry
 { // GeometryQuad3D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryTet3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,18 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryTet3D.hh
+ * @file libsrc/feassemble/GeometryTet3D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 3-D
  * tetrahedral cell.
- *
- * Reference cell:
- *
- * Vertex   x     y     z
- *    0   -1.0  -1.0  -1.0
- *    1   +1.0  -1.0  -1.0
- *    2   -1.0  +1.0  -1.0
- *    3   -1.0  -1.0  +1.0
  */
 
 #if !defined(pylith_feassemble_geometrytet3d_hh)
@@ -32,6 +24,18 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryTet3D --------------------------------------------------------
+/** @brief C++ implementation of cell geometry calculations for 3-D
+ * tetrahedral cell.
+ *
+ * Reference cell:
+ at verbatim
+Vertex   x     y     z
+   0   -1.0  -1.0  -1.0
+   1   +1.0  -1.0  -1.0
+   2   -1.0  +1.0  -1.0
+   3   -1.0  -1.0  +1.0
+ at endverbatim
+ */
 class pylith::feassemble::GeometryTet3D : public CellGeometry
 { // GeometryTet3D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri2D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryTri2D.hh
+ * @file libsrc/feassemble/GeometryTri2D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * triangular cell.
@@ -31,6 +31,17 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryTri2D --------------------------------------------------------
+/** @brief C++ implementation of cell geometry calculations for 2-D
+ * triangular cell.
+ *
+ * Reference cell:
+ at verbatim
+Vertex   x     y
+   0   -1.0  -1.0
+   1   +1.0  -1.0
+   2   -1.0  +1.0
+ at endverbatim
+ */
 class pylith::feassemble::GeometryTri2D : public CellGeometry
 { // GeometryTri2D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/GeometryTri3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/GeometryTri3D.hh
+ * @file libsrc/feassemble/GeometryTri3D.hh
  *
  * @brief C++ implementation of cell geometry calculations for 2-D
  * triangular cell.
@@ -31,6 +31,17 @@
 #include "CellGeometry.hh" // ISA CellGeometry
 
 // GeometryTri3D --------------------------------------------------------
+/**  @brief C++ implementation of cell geometry calculations for 2-D
+ * triangular cell.
+ *
+ * Reference cell:
+ at verbatim
+Vertex   x     y
+   0   -1.0  -1.0
+   1   +1.0  -1.0
+   2   -1.0  +1.0
+ at endverbatim
+ */
 class pylith::feassemble::GeometryTri3D : public CellGeometry
 { // GeometryTri3D
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Integrator.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Integrator.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Integrator.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -153,5 +153,34 @@
   _cellMatrix = 0.0;
 } // _resetCellMatrix
 
+// ----------------------------------------------------------------------
+// Lump cell matrix, putting the result in the cell vector using
+// equivalent forces for rigid body motion.
+template<typename quadrature_type>
+void
+pylith::feassemble::Integrator<quadrature_type>::_lumpCellMatrix(void)
+{ // _lumpCellMatrix
+  assert(0 != _quadrature);
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
 
+  _cellVector = 0.0;
+  double value = 0.0;
+  for (int iBasis=0; iBasis < numBasis; ++iBasis)
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      value = 0.0;
+      const int indexR = (iBasis*spaceDim+iDim) * numBasis * spaceDim;
+      for (int jBasis=0; jBasis < numBasis; ++jBasis)
+	value += _cellMatrix[indexR+jBasis*spaceDim+iDim];
+      if (value < 0.0) {
+	throw std::runtime_error("Negative diagonal entry computed when "
+				 "lumping Jacobian matrix.");
+      } // for
+      _cellVector[iBasis*spaceDim+iDim] = value;
+    } // for
+
+  PetscLogFlops(numBasis*numBasis*spaceDim);
+} // _lumpCellMatrix
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Integrator.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Integrator.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Integrator.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,14 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/Integrator.hh
+ * @file libsrc/feassemble/Integrator.hh
  *
  * @brief Abstract base class for integration of finite-element
  * actions.
- *
- * Note: Each object operates on a single finite-element family, which
- * is defined by the quadrature and a database of material property
- * parameters.
  */
 
 #if !defined(pylith_feassemble_integrator_hh)
@@ -36,6 +32,13 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // Integrator -----------------------------------------------------------
+/** @brief Abstract base class for integration of finite-element
+ * actions.
+ *
+ * Note: Each object operates on a single finite-element family, which
+ * is defined by the quadrature and a database of material property
+ * parameters.
+ */
 template<typename quadrature_type>
 class pylith::feassemble::Integrator
 { // Integrator
@@ -138,6 +141,18 @@
 			 const double t,
 			 topology::SolutionFields* const fields);
 
+  /** Integrate contributions to residual term (r) for operator that
+   * do not require assembly over cells, vertices, or processors.
+   *
+   * @param residual Field containing values for residual
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  virtual 
+  void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
+				  const double t,
+				  topology::SolutionFields* const fields);
+
   /** Integrate contributions to Jacobian matrix (A) associated with
    * operator.
    *
@@ -150,28 +165,41 @@
 			 const double t,
 			 topology::SolutionFields* const fields);
 
-  /** Integrate contributions to residual term (r) for operator that
-   * do not require assembly over cells, vertices, or processors.
+  /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator that do not require assembly over cells, vertices, or
+   * processors
    *
-   * @param residual Field containing values for residual
+   * @param jacobian Sparse matrix for Jacobian of system.
    * @param t Current time
    * @param fields Solution fields
    */
-  virtual 
-  void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
+  virtual
+  void integrateJacobianAssembled(topology::Jacobian* jacobian,
 				  const double t,
 				  topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
+   * operator.
+   *
+   * @param jacobian Diagonal matrix (as field) for Jacobian of system.
+   * @param t Current time
+   * @param fields Solution fields
+   */
+  virtual
+  void integrateJacobian(const topology::Field<topology::Mesh>& jacobian,
+			 const double t,
+			 topology::SolutionFields* const fields);
+
+  /** Integrate contributions to Jacobian matrix (A) associated with
    * operator that do not require assembly over cells, vertices, or
    * processors
    *
-   * @param jacobian Sparse matrix for Jacobian of system.
+   * @param jacobian Diagonal matrix (as field) for Jacobian of system.
    * @param t Current time
    * @param fields Solution fields
    */
   virtual
-  void integrateJacobianAssembled(topology::Jacobian* jacobian,
+  void integrateJacobianAssembled(const topology::Field<topology::Mesh>&  jacobian,
 				  const double t,
 				  topology::SolutionFields* const fields);
 
@@ -185,6 +213,27 @@
   void updateStateVars(const double t,
 		       topology::SolutionFields* const fields);
 
+  /** Constrain solution space.
+   *
+   * @param fields Solution fields.
+   * @param t Current time.
+   * @param jacobian Sparse matrix for system Jacobian.
+   */
+  virtual
+  void constrainSolnSpace(topology::SolutionFields* const fields,
+			  const double t,
+			  const topology::Jacobian& jacobian);
+
+  /** Adjust solution from solver with lumped Jacobian to match Lagrange
+   *  multiplier constraints.
+   *
+   * @param fields Solution fields.
+   * @param jacobian Jacobian of the system.
+   */
+  virtual
+  void adjustSolnLumped(topology::SolutionFields* fields,
+			const topology::Field<topology::Mesh>& jacobian);
+
   /** Verify configuration is acceptable.
    *
    * @param mesh Finite-element mesh
@@ -207,6 +256,10 @@
   /// Zero out matrix containing result of integration for cell.
   void _resetCellMatrix(void);
 
+  /// Lump cell matrix, putting the result in the cell vector using
+  /// equivalent forces for rigid body motion.
+  void _lumpCellMatrix(void);
+
 // PROTECTED MEMBERS ////////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Integrator.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Integrator.icc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Integrator.icc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -62,6 +62,18 @@
 			     topology::SolutionFields* const fields) {
 } // integrateResidual
 
+// Integrate contributions to residual term (r) for operator that
+// do not require assembly over cells, vertices, or processors.
+template<typename quadrature_type>
+inline
+void
+pylith::feassemble::Integrator<quadrature_type>::integrateResidualAssembled(
+			     const topology::Field<topology::Mesh>& residual,
+			     const double t,
+			     topology::SolutionFields* const fields) {
+  _needNewJacobian = false;
+} // integrateResidualAssembled
+
 // Integrate contributions to Jacobian matrix (A) associated with
 // operator.
 template<typename quadrature_type>
@@ -74,17 +86,29 @@
   _needNewJacobian = false;
 } // integrateJacobian
 
-// Integrate contributions to residual term (r) for operator that
-// do not require assembly over cells, vertices, or processors.
+// Integrate contributions to Jacobian matrix (A) associated with
+// operator that do not require assembly over cells, vertices, or
+// processors
 template<typename quadrature_type>
 inline
 void
-pylith::feassemble::Integrator<quadrature_type>::integrateResidualAssembled(
-			     const topology::Field<topology::Mesh>& residual,
-			     const double t,
-			     topology::SolutionFields* const fields) {
+pylith::feassemble::Integrator<quadrature_type>::integrateJacobianAssembled(
+				      topology::Jacobian* jacobian,
+				      const double t,
+				      topology::SolutionFields* const fields) {
+} // integrateJacobianAssembled
+
+// Integrate contributions to Jacobian matrix (A) associated with
+// operator.
+template<typename quadrature_type>
+inline
+void
+pylith::feassemble::Integrator<quadrature_type>::integrateJacobian(
+				     const topology::Field<topology::Mesh>& jacobian,
+				     const double t,
+				     topology::SolutionFields* const fields) {
   _needNewJacobian = false;
-} // integrateResidualAssembled
+} // integrateJacobian
 
 // Integrate contributions to Jacobian matrix (A) associated with
 // operator that do not require assembly over cells, vertices, or
@@ -93,9 +117,9 @@
 inline
 void
 pylith::feassemble::Integrator<quadrature_type>::integrateJacobianAssembled(
-				      topology::Jacobian* jacobian,
-				      const double t,
-				      topology::SolutionFields* const fields) {
+			      const topology::Field<topology::Mesh>& jacobian,
+			      const double t,
+			      topology::SolutionFields* const fields) {
 } // integrateJacobianAssembled
 
 // Update state variables as needed.
@@ -107,7 +131,28 @@
 				     topology::SolutionFields* const fields) {
 } // updateState
 
+// Constrain solution space.
+template<typename quadrature_type>
+inline
+void
+pylith::feassemble::Integrator<quadrature_type>::constrainSolnSpace(
+			       topology::SolutionFields* const fields,
+			       const double t,
+			       const topology::Jacobian& jacobian) {
+} // constrainSolnSpace
 
+// Adjust solution from solver with lumped Jacobian to match Lagrange
+//  multiplier constraints.
+template<typename quadrature_type>
+inline
+void
+pylith::feassemble::Integrator<quadrature_type>::adjustSolnLumped(
+			topology::SolutionFields* fields,
+			const topology::Field<topology::Mesh>& jacobian) {
+} // adjustSolnLumped
+
+
+
 #endif
 
 // End of file

Modified: short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -759,6 +759,38 @@
 } // _elasticityJacobian1D
 
 // ----------------------------------------------------------------------
+// Integrate laplacian term in Jacobian preconditioner for 1-D cells.
+void
+pylith::feassemble::IntegratorElasticity::_elasticityPrecon1D(
+			       const double_array& elasticConsts)
+{ // _elasticityPrecon1D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+  
+  assert(1 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+      const double valI = wt*basisDeriv[iQ+iBasis];
+      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+        const double valIJ = valI * basisDeriv[iQ+jBasis];
+        const int iBlock = iBasis*spaceDim * (numBasis*spaceDim);
+        const int jBlock = jBasis*spaceDim;
+        _cellMatrix[iBlock+jBlock] += valIJ;
+      } // for
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(1+numBasis*2)));
+} // _elasticityPrecon1D
+
+// ----------------------------------------------------------------------
 // Integrate elasticity term in Jacobian for 2-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityJacobian2D(
@@ -823,6 +855,49 @@
 } // _elasticityJacobian2D
 
 // ----------------------------------------------------------------------
+// Integrate laplacian term in Jacobian preconditioner for 2-D cells.
+void
+pylith::feassemble::IntegratorElasticity::_elasticityPrecon2D(
+			       const double_array& elasticConsts)
+{ // _elasticityPrecon2D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+
+  assert(2 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  const int numConsts = 6;
+
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    // Delta_ij = C_ijkl * e_kl
+    //        = C_ijlk * 0.5 (u_k,l + u_l,k)
+    //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
+    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
+	 iBasis < numBasis;
+	 ++iBasis) {
+      const double Nip  = wt*basisDeriv[iQ+iBasis*spaceDim  ];
+      const double Niq  = wt*basisDeriv[iQ+iBasis*spaceDim+1];
+      const int iBlock  = (iBasis*spaceDim  ) * (numBasis*spaceDim);
+      const int iBlock1 = (iBasis*spaceDim+1) * (numBasis*spaceDim);
+      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+        const double Njp  = basisDeriv[iQ+jBasis*spaceDim  ];
+        const double Njq  = basisDeriv[iQ+jBasis*spaceDim+1];
+        const int jBlock  = (jBasis*spaceDim  );
+        const int jBlock1 = (jBasis*spaceDim+1);
+        _cellMatrix[iBlock +jBlock ] += Nip*Njp;
+        _cellMatrix[iBlock1+jBlock1] += Niq*Njq;
+      } // for
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(2+numBasis*(4))));
+} // _elasticityPrecon2D
+
+// ----------------------------------------------------------------------
 // Integrate elasticity term in Jacobian for 3-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityJacobian3D(
@@ -936,7 +1011,53 @@
 } // _elasticityJacobian3D
 
 // ----------------------------------------------------------------------
+// Integrate laplacian term in Jacobian preconditioner for 3-D cells.
 void
+pylith::feassemble::IntegratorElasticity::_elasticityPrecon3D(
+			       const double_array& elasticConsts)
+{ // _elasticityPrecon3D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+  
+  assert(3 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  const int numConsts = 21;
+
+  // Compute Jacobian for consistent tangent matrix
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
+	 iBasis < numBasis;
+	 ++iBasis) {
+      const double Nip = wt*basisDeriv[iQ+iBasis*spaceDim+0];
+      const double Niq = wt*basisDeriv[iQ+iBasis*spaceDim+1];
+      const double Nir = wt*basisDeriv[iQ+iBasis*spaceDim+2];
+      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+        const double Njp = basisDeriv[iQ+jBasis*spaceDim+0];
+        const double Njq = basisDeriv[iQ+jBasis*spaceDim+1];
+        const double Njr = basisDeriv[iQ+jBasis*spaceDim+2];
+        const int iBlock = iBasis*spaceDim * (numBasis*spaceDim);
+        const int iBlock1 = (iBasis*spaceDim+1) * (numBasis*spaceDim);
+        const int iBlock2 = (iBasis*spaceDim+2) * (numBasis*spaceDim);
+        const int jBlock = jBasis*spaceDim;
+        const int jBlock1 = jBasis*spaceDim+1;
+        const int jBlock2 = jBasis*spaceDim+2;
+        _cellMatrix[iBlock +jBlock ] += Nip*Njp;
+        _cellMatrix[iBlock1+jBlock1] += Niq*Njq;
+        _cellMatrix[iBlock2+jBlock2] += Nir*Njr;
+      } // for
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(3+numBasis*(6))));
+} // _elasticityPrecon3D
+
+// ----------------------------------------------------------------------
+void
 pylith::feassemble::IntegratorElasticity::_calcTotalStrain1D(
 					    double_array* strain,
 					    const double_array& basisDeriv,

Modified: short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/IntegratorElasticity.hh
+ * @file libsrc/feassemble/IntegratorElasticity.hh
  *
  * @brief Object containing general elasticity operations for implicit
  * and explicit time integration of the elasticity equation.
@@ -32,6 +32,9 @@
 #include "pylith/utils/arrayfwd.hh" // USES std::vector, double_array
 
 // IntegratorElasticity -------------------------------------------------
+/** @brief General elasticity operations for implicit and explicit
+ * time integration of the elasticity equation.
+ */
 class pylith::feassemble::IntegratorElasticity :
   public Integrator<Quadrature<topology::Mesh> >
 { // IntegratorElasticity
@@ -135,6 +138,7 @@
    * @param name Name of field to compute ('total-strain' or 'stress')
    * @param fields Manager for solution fields.
    */
+  virtual
   void _calcStrainStressField(topology::Field<topology::Mesh>* field,
 			      const char* name,
 			      topology::SolutionFields* const fields);
@@ -144,6 +148,7 @@
    *
    * @param field Field in which to store stress.
    */
+  virtual
   void _calcStressFromStrain(topology::Field<topology::Mesh>* field);
 			      
 
@@ -183,6 +188,24 @@
    */
   void _elasticityJacobian3D(const double_array& elasticConsts);
 
+  /** Integrate laplacian term in Jacobian preconditioner for 1-D cells.
+   *
+   * @param elasticConsts Matrix of elasticity constants at quadrature points.
+   */
+  void _elasticityPrecon1D(const double_array& elasticConsts);
+
+  /** Integrate laplacian term in Jacobian preconditioner for 2-D cells.
+   *
+   * @param elasticConsts Matrix of elasticity constants at quadrature points.
+   */
+  void _elasticityPrecon2D(const double_array& elasticConsts);
+
+  /** Integrate laplacian term in Jacobian preconditioner for 3-D cells.
+   *
+   * @param elasticConsts Matrix of elasticity constants at quadrature points.
+   */
+  void _elasticityPrecon3D(const double_array& elasticConsts);
+
   /** Compute total strain in at quadrature points of a cell.
    *
    * @param strain Strain tensor at quadrature points.

Copied: short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/IntegratorElasticityLgDeform.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,1272 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "IntegratorElasticityLgDeform.hh" // implementation of class methods
+
+#include "Quadrature.hh" // USES Quadrature
+#include "CellGeometry.hh" // USES CellGeometry
+
+#include "pylith/materials/ElasticMaterial.hh" // USES ElasticMaterial
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/utils/EventLogger.hh" // USES EventLogger
+
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include "pylith/utils/array.hh" // USES double_array
+
+#include <cstring> // USES memcpy()
+#include <strings.h> // USES strcasecmp()
+#include <cassert> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+
+//#define PRECOMPUTE_GEOMETRY
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::IntegratorElasticityLgDeform::IntegratorElasticityLgDeform(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::IntegratorElasticityLgDeform::~IntegratorElasticityLgDeform(void)
+{ // destructor
+} // destructor
+  
+// ----------------------------------------------------------------------
+// Determine whether we need to recompute the Jacobian.
+bool
+pylith::feassemble::IntegratorElasticityLgDeform::needNewJacobian(void)
+{ // needNewJacobian
+  _needNewJacobian = IntegratorElasticity::needNewJacobian();
+  return _needNewJacobian;
+} // needNewJacobian
+
+// ----------------------------------------------------------------------
+// Update state variables as needed.
+void
+pylith::feassemble::IntegratorElasticityLgDeform::updateStateVars(
+				      const double t,
+				      topology::SolutionFields* const fields)
+{ // updateStateVars
+  assert(0 != _quadrature);
+  assert(0 != _material);
+  assert(0 != fields);
+
+  // No need to update state vars if material doesn't have any.
+  if (!_material->hasStateVars())
+    return;
+
+  // Get cell information that doesn't depend on particular cell
+  const int cellDim = _quadrature->cellDim();
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int tensorSize = _material->tensorSize();
+  totalStrain_fn_type calcTotalStrainFn;
+  if (1 == cellDim) {
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain1D;
+  } else if (2 == cellDim) {
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain2D;
+  } else if (3 == cellDim) {
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain3D;
+  } else {
+      std::cerr << "Bad cell dimension '" << cellDim << "'." << std::endl;
+      assert(0);
+      throw std::logic_error("Bad cell dimension in IntegratorElasticityLgDeform.");
+  } // else
+
+  // Allocate arrays for cell data.
+  double_array dispCell(numBasis*spaceDim);
+  double_array strainCell(numQuadPts*tensorSize);
+  double_array deformCell(numQuadPts*spaceDim*spaceDim);
+  deformCell = 0.0;
+  strainCell = 0.0;
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get fields
+  const topology::Field<topology::Mesh>& disp = fields->get("disp(t)");
+  const ALE::Obj<RealSection>& dispSection = disp.section();
+  assert(!dispSection.isNull());
+  topology::Mesh::RestrictVisitor dispVisitor(*dispSection, 
+					      dispCell.size(), &dispCell[0]);
+
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Retrieve geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+
+    // Restrict input fields to cell
+    dispVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispVisitor);
+
+    // Get cell geometry information that depends on cell
+    const double_array& basisDeriv = _quadrature->basisDeriv();
+  
+    // Compute deformation tensor.
+    _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispCell,
+		     numBasis, numQuadPts, spaceDim);
+
+    // Compute strains
+    calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
+
+    // Update material state
+    _material->updateStateVars(strainCell, *c_iter);
+  } // for
+} // updateStateVars
+
+// ----------------------------------------------------------------------
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_calcStrainStressField(
+				 topology::Field<topology::Mesh>* field,
+				 const char* name,
+				 topology::SolutionFields* const fields)
+{ // _calcStrainStressField
+  assert(0 != field);
+  assert(0 != _quadrature);
+  assert(0 != _material);
+
+  const bool calcStress = (0 == strcasecmp(name, "stress")) ? true : false;
+    
+  // Get cell information that doesn't depend on particular cell
+  const int cellDim = _quadrature->cellDim();
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int tensorSize = _material->tensorSize();
+  totalStrain_fn_type calcTotalStrainFn;
+  if (1 == cellDim) {
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain1D;
+  } else if (2 == cellDim) {
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain2D;
+  } else if (3 == cellDim) {
+    calcTotalStrainFn = 
+      &pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain3D;
+  } else {
+      std::cerr << "Bad cell dimension '" << cellDim << "'." << std::endl;
+      assert(0);
+      throw std::logic_error("Bad cell dimension in IntegratorElasticityLgDeform.");
+  } // else
+  
+  // Allocate arrays for cell data.
+  double_array dispCell(numBasis*spaceDim);
+  double_array deformCell(numQuadPts*spaceDim*spaceDim);
+  double_array strainCell(numQuadPts*tensorSize);
+  double_array stressCell(numQuadPts*tensorSize);
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = field->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get field
+  const topology::Field<topology::Mesh>& disp = fields->get("disp(t)");
+  const ALE::Obj<RealSection>& dispSection = disp.section();
+  assert(!dispSection.isNull());
+  topology::Mesh::RestrictVisitor dispVisitor(*dispSection, 
+					      dispCell.size(), &dispCell[0]);
+    
+  double_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    sieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  topology::Mesh::RestrictVisitor coordsVisitor(*coordinates, 
+						coordinatesCell.size(),
+						&coordinatesCell[0]);
+
+  const ALE::Obj<RealSection>& fieldSection = field->section();
+  assert(!fieldSection.isNull());
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Retrieve geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+    _quadrature->retrieveGeometry(*c_iter);
+#else
+    coordsVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+
+    // Restrict input fields to cell
+    dispVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispVisitor);
+
+    // Get cell geometry information that depends on cell
+    const double_array& basisDeriv = _quadrature->basisDeriv();
+    
+    // Compute deformation tensor.
+    _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispCell,
+		     numBasis, numQuadPts, spaceDim);
+
+    // Compute strains
+    calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
+
+    if (!calcStress) 
+      fieldSection->updatePoint(*c_iter, &strainCell[0]);
+    else {
+      _material->retrievePropsAndVars(*c_iter);
+      stressCell = _material->calcStress(strainCell);
+      fieldSection->updatePoint(*c_iter, &stressCell[0]);
+    } // else
+  } // for
+} // _calcStrainStressField
+
+// ----------------------------------------------------------------------
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_calcStressFromStrain(
+				   topology::Field<topology::Mesh>* field)
+{ // _calcStressFromStrain
+  assert(0 != field);
+  assert(0 != _quadrature);
+  assert(0 != _material);
+
+  const int cellDim = _quadrature->cellDim();
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int tensorSize = _material->tensorSize();
+  
+  // Allocate arrays for cell data.
+  double_array strainCell(numQuadPts*tensorSize);
+  strainCell = 0.0;
+  double_array stressCell(numQuadPts*tensorSize);
+  stressCell = 0.0;
+
+  // Get cell information
+  const ALE::Obj<SieveMesh>& sieveMesh = field->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const int materialId = _material->id();
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->getLabelStratum("material-id", materialId);
+  assert(!cells.isNull());
+  const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get field
+  const ALE::Obj<RealSection>& fieldSection = field->section();
+  assert(!fieldSection.isNull());
+
+  // Loop over cells
+  for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    fieldSection->restrictPoint(*c_iter, &strainCell[0], strainCell.size());
+    _material->retrievePropsAndVars(*c_iter);
+    stressCell = _material->calcStress(strainCell);
+    fieldSection->updatePoint(*c_iter, &stressCell[0]);
+  } // for
+} // _calcStressFromStrain
+
+// ----------------------------------------------------------------------
+// Integrate elasticity term in residual for 1-D cells.
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_elasticityResidual1D(
+				     const double_array& stress,
+				     const double_array& disp)
+{ // _elasticityResidual1D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+
+  assert(1 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const double s11 = stress[iQuad];
+    double l11 = 0.0;
+    for (int kBasis=0; kBasis < numBasis; ++kBasis)
+      l11 += basisDeriv[iQuad*numBasis+kBasis  ] * disp[kBasis  ]; 
+    for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+      const double N1 = wt * (1.0 + l11) * basisDeriv[iQuad*numBasis+iBasis  ];
+      _cellVector[iBasis*spaceDim  ] -= N1*s11;
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*5+numBasis*2));
+} // _elasticityResidual1D
+
+// ----------------------------------------------------------------------
+// Integrate elasticity term in residual for 2-D cells.
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_elasticityResidual2D(
+				     const double_array& stress,
+				     const double_array& disp)
+{ // _elasticityResidual2D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+  
+  assert(2 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  const int stressSize = 3;
+
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const int iQ = iQuad*numBasis*spaceDim;
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const double s11 = stress[iQuad*stressSize+0];
+    const double s22 = stress[iQuad*stressSize+1];
+    const double s12 = stress[iQuad*stressSize+2];
+
+    double l11 = 0.0;
+    double l12 = 0.0;
+    double l21 = 0.0;
+    double l22 = 0.0;
+    for (int kBasis=0; kBasis < numBasis; ++kBasis) {
+      const int kB = kBasis*spaceDim;
+      l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
+      l12 += basisDeriv[iQ+kB+1] * disp[kB  ];
+      l21 += basisDeriv[iQ+kB  ] * disp[kB+1];
+      l22 += basisDeriv[iQ+kB+1] * disp[kB+1];
+    } // for
+
+    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
+	 iBasis < numBasis;
+	 ++iBasis) {
+      const int iB = iBasis*spaceDim;
+      const double Nip = basisDeriv[iQ+iB  ];
+      const double Niq = basisDeriv[iQ+iB+1];
+
+      // Generated using Maxima (see jacobian2d_lgdeform.wxm)
+      _cellVector[iB  ] -= 
+	wt*(l12*Niq*s22 + 
+	    ((l11+1)*Niq+l12*Nip)*s12 + 
+	    (l11+1)*Nip*s11);
+
+      _cellVector[iB+1] -=
+	wt*((l22+1)*Niq*s22 + 
+	    (l21*Niq+(l22+1)*Nip)*s12 + 
+	    l21*Nip*s11);
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(numBasis*8+14)));
+} // _elasticityResidual2D
+
+// ----------------------------------------------------------------------
+// Integrate elasticity term in residual for 3-D cells.
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_elasticityResidual3D(
+				     const double_array& stress,
+				     const double_array& disp)
+{ // _elasticityResidual3D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+  
+  assert(3 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  const int stressSize = 6;
+  
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const int iQ = iQuad*numBasis*spaceDim;
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const double s11 = stress[iQuad*stressSize+0];
+    const double s22 = stress[iQuad*stressSize+1];
+    const double s33 = stress[iQuad*stressSize+2];
+    const double s12 = stress[iQuad*stressSize+3];
+    const double s23 = stress[iQuad*stressSize+4];
+    const double s13 = stress[iQuad*stressSize+5];
+    
+    double l11 = 0.0;
+    double l12 = 0.0;
+    double l13 = 0.0;
+    double l21 = 0.0;
+    double l22 = 0.0;
+    double l23 = 0.0;
+    double l31 = 0.0;
+    double l32 = 0.0;
+    double l33 = 0.0;
+    for (int kBasis=0; kBasis < numBasis; ++kBasis) {
+      const int kB = kBasis*spaceDim;
+      l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
+      l12 += basisDeriv[iQ+kB+1] * disp[kB  ];
+      l13 += basisDeriv[iQ+kB+2] * disp[kB  ];
+      l21 += basisDeriv[iQ+kB  ] * disp[kB+1];
+      l22 += basisDeriv[iQ+kB+1] * disp[kB+1];
+      l23 += basisDeriv[iQ+kB+2] * disp[kB+1];
+      l31 += basisDeriv[iQ+kB  ] * disp[kB+2];
+      l32 += basisDeriv[iQ+kB+1] * disp[kB+2];
+      l33 += basisDeriv[iQ+kB+2] * disp[kB+2];
+    } // for
+    
+    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
+	 iBasis < numBasis;
+	 ++iBasis) {
+      const int iB = iBasis*spaceDim;
+      const double Nip = basisDeriv[iQ+iB  ];
+      const double Niq = basisDeriv[iQ+iB+1];
+      const double Nir = basisDeriv[iQ+iB+2];
+
+      // Generated using Maxima (see jacobian3d_lgdeform.wxm)
+      _cellVector[iB  ] -= 
+	wt*(l13*Nir*s33 + 
+	    (l12*Nir+l13*Niq)*s23 + 
+	    l12*Niq*s22 + 
+	    ((l11+1)*Nir + l13*Nip)*s13 + 
+	    ((l11+1)*Niq+l12*Nip)*s12 + 
+	    (l11+1)*Nip*s11);
+
+      _cellVector[iB+1] -=
+	wt*(l23*Nir*s33 + 
+	    ((l22+1)*Nir+l23*Niq)*s23 + 
+	    (l22+1)*Niq*s22 + 
+	    (l21*Nir+l23*Nip)*s13 + 
+	    (l21*Niq+(l22+1)*Nip)*s12 + 
+	    l21*Nip*s11);
+
+      _cellVector[iB+2] -=
+	wt*((l33+1)*Nir*s33 + 
+	    (l32*Nir+(l33+1)*Niq)*s23 + 
+	    l32*Niq*s22 + 
+	    (l31*Nir+(l33+1)*Nip)*s13 + 
+	    (l31*Niq+l32*Nip)*s12 + 
+	    l31*Nip*s11);
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(numBasis*18+3*27)));
+} // _elasticityResidual3D
+
+// ----------------------------------------------------------------------
+// Integrate elasticity term in Jacobian for 1-D cells.
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_elasticityJacobian1D(
+				       const double_array& elasticConsts,
+				       const double_array& stress,
+				       const double_array& disp)
+{ // _elasticityJacobian1D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+  
+  assert(1 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const double C1111 = elasticConsts[iQuad];
+    const double s11 = stress[iQuad];
+
+    double l11 = 0.0;
+    for (int kBasis=0; kBasis < numBasis; ++kBasis)
+      l11 += basisDeriv[iQuad*numBasis+kBasis  ] * disp[kBasis  ]; 
+
+    // KLij = valI * valJ * C1111 + valInl * valJnl * s11
+    // valI = (1+l11) * Ni,1
+    // valJ = (1+l11) * Nj,1
+    // valInl = Ni,1
+    // valJnl = Nj,1
+    for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+      const double valI = wt*basisDeriv[iQ+iBasis]*(1.0+l11)*(1.0+l11)*C1111;
+      const double valInl = wt*s11*basisDeriv[iQ+iBasis];
+      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+	const double valIJ = valI * basisDeriv[iQ+jBasis];
+	const double valIJnl = valInl * basisDeriv[iQ+jBasis];
+	const int iBlock = iBasis*spaceDim * (numBasis*spaceDim);
+	const int jBlock = jBasis*spaceDim;
+	_cellMatrix[iBlock+jBlock] += valIJ + valIJnl;
+      } // for
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(6+numBasis*4)));
+} // _elasticityJacobian1D
+
+// ----------------------------------------------------------------------
+// Integrate elasticity term in Jacobian for 2-D cells.
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_elasticityJacobian2D(
+				       const double_array& elasticConsts,
+				       const double_array& stress,
+				       const double_array& disp)
+{ // _elasticityJacobian2D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const int tensorSize = _material->tensorSize();
+  
+  assert(2 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  const int numConsts = 6;
+
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const int iQ = iQuad*numBasis*spaceDim;
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    // tau_ij = C_ijkl * e_kl
+    //        = C_ijlk * 0.5 (u_k,l + u_l,k)
+    //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
+    // divide C_ijkl by 2 if k != l
+    const int iC = iQuad*numConsts;
+    const double C1111 = elasticConsts[iC+0];
+    const double C1122 = elasticConsts[iC+1];
+    const double C1112 = elasticConsts[iC+2] / 2.0; // 2*mu -> mu
+    const double C2222 = elasticConsts[iC+3];
+    const double C2212 = elasticConsts[iC+4] / 2.0;
+    const double C1212 = elasticConsts[iC+5] / 2.0;
+
+    const int iS = iQuad*tensorSize;
+    const double s11 = stress[iS+0];
+    const double s22 = stress[iS+1];
+    const double s12 = stress[iS+2];
+
+    double l11 = 0.0;
+    double l12 = 0.0;
+    double l21 = 0.0;
+    double l22 = 0.0;
+    for (int kBasis=0; kBasis < numBasis; ++kBasis) {
+      const int kB = kBasis*spaceDim;
+      l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
+      l12 += basisDeriv[iQ+kB+1] * disp[kB  ];
+      l21 += basisDeriv[iQ+kB  ] * disp[kB+1];
+      l22 += basisDeriv[iQ+kB+1] * disp[kB+1];
+    } // for
+
+    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
+	 iBasis < numBasis;
+	 ++iBasis) {
+      const int iB = iBasis*spaceDim;
+      const double Nip = wt*basisDeriv[iQ+iB  ];
+      const double Niq = wt*basisDeriv[iQ+iB+1];
+      const int iBlock = (iB) * (numBasis*spaceDim);
+      const int iBlock1 = (iB+1) * (numBasis*spaceDim);
+
+      const double valInl0 = Nip*s11 + Niq*s12;
+      const double valInl1 = Nip*s12 + Niq*s22;
+      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+	const int jB = jBasis*spaceDim;
+	const double Njp = basisDeriv[iQ+jB  ];
+	const double Njq = basisDeriv[iQ+jB+1];
+
+	// Generated using Maxima (see jacobian2d_lgdeform.wxm)
+	const double Ki0j0 = 
+	  l12*Niq*(l12*Njq*C2222 + 
+		   ((l11+1)*Njq+l12*Njp)*C2212 + 
+		   (l11+1)*Njp*C1122) + 
+	  ((l11+1)*Niq+l12*Nip)*(l12*Njq*C2212 + 
+				 ((l11+1)*Njq+l12*Njp)*C1212 + 
+				 (l11+1)*Njp*C1112) + 
+	  (l11+1)*Nip*(l12*Njq*C1122 + 
+		       ((l11+1)*Njq+l12*Njp)*C1112 + 
+		       (l11+1)*Njp*C1111);
+	const double Ki0j1 =
+	  l12*Niq*((l22+1.0)*Njq*C2222 + 
+		   (l21*Njq+(l22+1.0)*Njp)*C2212 + 
+		   l21*Njp*C1122) + 
+	  ((l11+1.0)*Niq+l12*Nip)*((l22+1.0)*Njq*C2212 + 
+				 (l21*Njq+(l22+1.0)*Njp)*C1212 + 
+				 l21*Njp*C1112) + 
+	  (l11+1.0)*Nip*((l22+1.0)*Njq*C1122 + 
+		       (l21*Njq+(l22+1.0)*Njp)*C1112 + 
+		       l21*Njp*C1111);
+	const double Ki1j0 =
+	  (l22+1.0)*Niq*(l12*Njq*C2222 + 
+		       ((l11+1.0)*Njq+l12*Njp)*C2212 + 
+		       (l11+1.0)*Njp*C1122) + 
+	  (l21*Niq+(l22+1.0)*Nip)*(l12*Njq*C2212 + 
+				 ((l11+1.0)*Njq+l12*Njp)*C1212 + 
+				 (l11+1.0)*Njp*C1112) + 
+	  l21*Nip*(l12*Njq*C1122 + 
+		   ((l11+1.0)*Njq+l12*Njp)*C1112 + 
+		   (l11+1.0)*Njp*C1111);
+	const double Ki1j1 =
+	  (l22+1.0)*Niq*((l22+1.0)*Njq*C2222 + 
+		       (l21*Njq+(l22+1.0)*Njp)*C2212 + 
+		       l21*Njp*C1122) + 
+	  (l21*Niq+(l22+1.0)*Nip)*((l22+1.0)*Njq*C2212 + 
+				 (l21*Njq+(l22+1.0)*Njp)*C1212 + 
+				 l21*Njp*C1112) + 
+	  l21*Nip*((l22+1.0)*Njq*C1122 + 
+		   (l21*Njq+(l22+1.0)*Njp)*C1112 + 
+		   l21*Njp*C1111);
+	const double Knl = 
+	  (Nip*s11 + Niq*s12)*Njp + (Nip*s12 + Niq*s22)*Njq;
+
+	const int jBlock = (jB);
+	const int jBlock1 = (jB+1);
+	_cellMatrix[iBlock +jBlock ] += Ki0j0 + Knl;
+	_cellMatrix[iBlock +jBlock1] += Ki0j1;
+	_cellMatrix[iBlock1+jBlock ] += Ki1j0;
+	_cellMatrix[iBlock1+jBlock1] += Ki1j1 + Knl;
+      } // for
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(2+numBasis*(3*11+4))));
+} // _elasticityJacobian2D
+
+// ----------------------------------------------------------------------
+// Integrate elasticity term in Jacobian for 3-D cells.
+void
+pylith::feassemble::IntegratorElasticityLgDeform::_elasticityJacobian3D(
+				       const double_array& elasticConsts,
+				       const double_array& stress,
+				       const double_array& disp)
+{ // _elasticityJacobian3D
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int numBasis = _quadrature->numBasis();
+  const int spaceDim = _quadrature->spaceDim();
+  const int cellDim = _quadrature->cellDim();
+  const double_array& quadWts = _quadrature->quadWts();
+  const double_array& jacobianDet = _quadrature->jacobianDet();
+  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const int tensorSize = _material->tensorSize();
+
+  assert(3 == cellDim);
+  assert(quadWts.size() == numQuadPts);
+  assert(6 == tensorSize);
+  const int numConsts = 21;
+
+  // Compute Jacobian for consistent tangent matrix
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+    const int iQ = iQuad*numBasis*spaceDim;
+    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    // tau_ij = C_ijkl * e_kl
+    //        = C_ijlk * 0.5 (u_k,l + u_l,k)
+    //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
+    // divide C_ijkl by 2 if k != l
+    const int iC = iQuad*numConsts;
+    const double C1111 = elasticConsts[iC+ 0];
+    const double C1122 = elasticConsts[iC+ 1];
+    const double C1133 = elasticConsts[iC+ 2];
+    const double C1112 = elasticConsts[iC+ 3] / 2.0;
+    const double C1123 = elasticConsts[iC+ 4] / 2.0;
+    const double C1113 = elasticConsts[iC+ 5] / 2.0;
+    const double C2222 = elasticConsts[iC+ 6];
+    const double C2233 = elasticConsts[iC+ 7];
+    const double C2212 = elasticConsts[iC+ 8] / 2.0;
+    const double C2223 = elasticConsts[iC+ 9] / 2.0;
+    const double C2213 = elasticConsts[iC+10] / 2.0;
+    const double C3333 = elasticConsts[iC+11];
+    const double C3312 = elasticConsts[iC+12] / 2.0;
+    const double C3323 = elasticConsts[iC+13] / 2.0;
+    const double C3313 = elasticConsts[iC+14] / 2.0;
+    const double C1212 = elasticConsts[iC+15] / 2.0;
+    const double C1223 = elasticConsts[iC+16] / 2.0;
+    const double C1213 = elasticConsts[iC+17] / 2.0;
+    const double C2323 = elasticConsts[iC+18] / 2.0;
+    const double C2313 = elasticConsts[iC+19] / 2.0;
+    const double C1313 = elasticConsts[iC+20] / 2.0;
+
+    const int iS = iQuad*tensorSize;
+    const double s11 = stress[iS+0];
+    const double s22 = stress[iS+1];
+    const double s33 = stress[iS+2];
+    const double s12 = stress[iS+3];
+    const double s23 = stress[iS+4];
+    const double s13 = stress[iS+5];
+
+    double l11 = 0.0;
+    double l12 = 0.0;
+    double l13 = 0.0;
+    double l21 = 0.0;
+    double l22 = 0.0;
+    double l23 = 0.0;
+    double l31 = 0.0;
+    double l32 = 0.0;
+    double l33 = 0.0;
+    for (int kBasis=0; kBasis < numBasis; ++kBasis) {
+      const int kB = kBasis*spaceDim;
+      l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
+      l12 += basisDeriv[iQ+kB+1] * disp[kB  ];
+      l13 += basisDeriv[iQ+kB+2] * disp[kB  ];
+      l21 += basisDeriv[iQ+kB  ] * disp[kB+1];
+      l22 += basisDeriv[iQ+kB+1] * disp[kB+1];
+      l23 += basisDeriv[iQ+kB+2] * disp[kB+1];
+      l31 += basisDeriv[iQ+kB  ] * disp[kB+2];
+      l32 += basisDeriv[iQ+kB+1] * disp[kB+2];
+      l33 += basisDeriv[iQ+kB+2] * disp[kB+2];
+    } // for
+    
+    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
+	 iBasis < numBasis;
+	 ++iBasis) {
+      const int iB = iBasis*spaceDim;
+      const double Nip = wt*basisDeriv[iQ+iB+0];
+      const double Niq = wt*basisDeriv[iQ+iB+1];
+      const double Nir = wt*basisDeriv[iQ+iB+2];
+      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+	const int jB = jBasis*spaceDim;
+	const double Njp = basisDeriv[iQ+jB+0];
+	const double Njq = basisDeriv[iQ+jB+1];
+	const double Njr = basisDeriv[iQ+jB+2];
+
+	// Generated using Maxima (see jacobian3d_lgdeform.wxm)
+	const double Ki0j0 = 
+	  l13*Nir*(l13*Njr*C3333 + 
+		   (l12*Njr+l13*Njq)*C3323 + 
+		   ((l11+1)*Njr+l13*Njp)*C3313 + 
+		   ((l11+1)*Njq+l12*Njp)*C3312 + 
+		   l12*Njq*C2233 + 
+		   (l11+1)*Njp*C1133) + 
+	  (l12*Nir+l13*Niq)*(l13*Njr*C3323 + 
+			     (l12*Njr+l13*Njq)*C2323 + 
+			     ((l11+1)*Njr+l13*Njp)*C2313 + 
+			     l12*Njq*C2223 + 
+			     ((l11+1)*Njq+l12*Njp)*C1223 + 
+			     (l11+1)*Njp*C1123) + 
+	  ((l11+1)*Nir+l13*Nip)*(l13*Njr*C3313 + 
+				 (l12*Njr+l13*Njq)*C2313 + 
+				 l12*Njq*C2213 + 
+				 ((l11+1)*Njr+l13*Njp)*C1313 + 
+				 ((l11+1)*Njq+l12*Njp)*C1213 + 
+				 (l11+1)*Njp*C1113) + 
+	  ((l11+1)*Niq+l12*Nip)*(l13*Njr*C3312 + 
+				 l12*Njq*C2212 + 
+				 (l12*Njr+l13*Njq)*C1223 + 
+				 ((l11+1)*Njr+l13*Njp)*C1213 + 
+				 ((l11+1)*Njq+l12*Njp)*C1212 + 
+				 (l11+1)*Njp*C1112) + 
+	  l12*Niq*(l13*Njr*C2233 + 
+		   (l12*Njr+l13*Njq)*C2223 + 
+		   l12*Njq*C2222 + 
+		   ((l11+1)*Njr+l13*Njp)*C2213 + 
+		   ((l11+1)*Njq+l12*Njp)*C2212 + 
+		   (l11+1)*Njp*C1122) + 
+	  (l11+1)*Nip*(l13*Njr*C1133 + 
+		       (l12*Njr+l13*Njq)*C1123 + 
+		       l12*Njq*C1122 + 
+		       ((l11+1)*Njr+l13*Njp)*C1113 + 
+		       ((l11+1)*Njq+l12*Njp)*C1112 + 
+		       (l11+1)*Njp*C1111);
+
+	const double Ki0j1 =
+	  l13*Nir*(l23*Njr*C3333 + 
+		   ((l22+1)*Njr+l23*Njq)*C3323 + 
+		   (l21*Njr+l23*Njp)*C3313 + 
+		   (l21*Njq+(l22+1)*Njp)*C3312 + 
+		   (l22+1)*Njq*C2233 + 
+		   l21*Njp*C1133) + 
+	  (l12*Nir+l13*Niq)*(l23*Njr*C3323 + 
+			     ((l22+1)*Njr+l23*Njq)*C2323 + 
+			     (l21*Njr+l23*Njp)*C2313 + 
+			     (l22+1)*Njq*C2223 + 
+			     (l21*Njq+(l22+1)*Njp)*C1223 + 
+			     l21*Njp*C1123) + 
+	  ((l11+1)*Nir+l13*Nip)*(l23*Njr*C3313 + 
+				 ((l22+1)*Njr+l23*Njq)*C2313 + 
+				 (l22+1)*Njq*C2213 + 
+				 (l21*Njr+l23*Njp)*C1313 + 
+				 (l21*Njq+(l22+1)*Njp)*C1213 + 
+				 l21*Njp*C1113) + 
+	  ((l11+1)*Niq+l12*Nip)*(l23*Njr*C3312 + 
+				 (l22+1)*Njq*C2212 + 
+				 ((l22+1)*Njr+l23*Njq)*C1223 + 
+				 (l21*Njr+l23*Njp)*C1213 + 
+				 (l21*Njq+(l22+1)*Njp)*C1212 + 
+				 l21*Njp*C1112) + 
+	  l12*Niq*(l23*Njr*C2233 + 
+		   ((l22+1)*Njr+l23*Njq)*C2223 + 
+		   (l22+1)*Njq*C2222 + 
+		   (l21*Njr+l23*Njp)*C2213 + 
+		   (l21*Njq+(l22+1)*Njp)*C2212 + 
+		   l21*Njp*C1122) + 
+	  (l11+1)*Nip*(l23*Njr*C1133 + 
+		       ((l22+1)*Njr+l23*Njq)*C1123 + 
+		       (l22+1)*Njq*C1122 + 
+		       (l21*Njr+l23*Njp)*C1113 + 
+		       (l21*Njq+(l22+1)*Njp)*C1112 + 
+		       l21*Njp*C1111);
+
+	const double Ki0j2 =
+	  l13*Nir*((l33+1)*Njr*C3333 + 
+		   (l32*Njr+(l33+1)*Njq)*C3323 + 
+		   (l31*Njr+(l33+1)*Njp)*C3313 + 
+		   (l31*Njq+l32*Njp)*C3312 + 
+		   l32*Njq*C2233 + 
+		   l31*Njp*C1133) + 
+	  (l12*Nir+l13*Niq)*((l33+1)*Njr*C3323 + 
+			     (l32*Njr+(l33+1)*Njq)*C2323 + 
+			     (l31*Njr+(l33+1)*Njp)*C2313 + 
+			     l32*Njq*C2223 + 
+			     (l31*Njq+l32*Njp)*C1223 + 
+			     l31*Njp*C1123) + 
+	  ((l11+1)*Nir+l13*Nip)*((l33+1)*Njr*C3313 + 
+				 (l32*Njr+(l33+1)*Njq)*C2313 + 
+				 l32*Njq*C2213 + 
+				 (l31*Njr+(l33+1)*Njp)*C1313 + 
+				 (l31*Njq+l32*Njp)*C1213 + 
+				 l31*Njp*C1113) + 
+	  ((l11+1)*Niq+l12*Nip)*((l33+1)*Njr*C3312 + 
+				 l32*Njq*C2212 + 
+				 (l32*Njr+(l33+1)*Njq)*C1223 + 
+				 (l31*Njr+(l33+1)*Njp)*C1213 + 
+				 (l31*Njq+l32*Njp)*C1212 + 
+				 l31*Njp*C1112) + 
+	  l12*Niq*((l33+1)*Njr*C2233 + 
+		   (l32*Njr+(l33+1)*Njq)*C2223 + 
+		   l32*Njq*C2222 + 
+		   (l31*Njr+(l33+1)*Njp)*C2213 + 
+		   (l31*Njq+l32*Njp)*C2212 + 
+		   l31*Njp*C1122) + 
+	  (l11+1)*Nip*((l33+1)*Njr*C1133 + 
+		       (l32*Njr+(l33+1)*Njq)*C1123 + 
+		       l32*Njq*C1122 + 
+		       (l31*Njr+(l33+1)*Njp)*C1113 + 
+		       (l31*Njq+l32*Njp)*C1112 + 
+		       l31*Njp*C1111);
+
+	const double Ki1j0 =
+	  l23*Nir*(l13*Njr*C3333 + 
+		   (l12*Njr+l13*Njq)*C3323 + 
+		   ((l11+1)*Njr+l13*Njp)*C3313 + 
+		   ((l11+1)*Njq+l12*Njp)*C3312 + 
+		   l12*Njq*C2233+(l11+1)*Njp*C1133) + 
+	  ((l22+1)*Nir+l23*Niq)*(l13*Njr*C3323 + 
+				 (l12*Njr+l13*Njq)*C2323 + 
+				 ((l11+1)*Njr+l13*Njp)*C2313 + 
+				 l12*Njq*C2223 + 
+				 ((l11+1)*Njq+l12*Njp)*C1223 + 
+				 (l11+1)*Njp*C1123) + 
+	  (l21*Nir+l23*Nip)*(l13*Njr*C3313 + 
+			     (l12*Njr+l13*Njq)*C2313 + 
+			     l12*Njq*C2213 + 
+			     ((l11+1)*Njr + 
+			      l13*Njp)*C1313 + 
+			     ((l11+1)*Njq+l12*Njp)*C1213 + 
+			     (l11+1)*Njp*C1113) + 
+	  (l21*Niq+(l22+1)*Nip)*(l13*Njr*C3312 + 
+				 l12*Njq*C2212 + 
+				 (l12*Njr+l13*Njq)*C1223 + 
+				 ((l11+1)*Njr+l13*Njp)*C1213 + 
+				 ((l11+1)*Njq+l12*Njp)*C1212 + 
+				 (l11+1)*Njp*C1112) + 
+	  (l22+1)*Niq*(l13*Njr*C2233 + 
+		       (l12*Njr+l13*Njq)*C2223 + 
+		       l12*Njq*C2222 + 
+		       ((l11+1)*Njr+l13*Njp)*C2213 + 
+		       ((l11+1)*Njq+l12*Njp)*C2212 + 
+		       (l11+1)*Njp*C1122) + 
+	  l21*Nip*(l13*Njr*C1133 + 
+		   (l12*Njr+l13*Njq)*C1123 + 
+		   l12*Njq*C1122 + 
+		   ((l11+1)*Njr+l13*Njp)*C1113 + 
+		   ((l11+1)*Njq+l12*Njp)*C1112 + 
+		   (l11+1)*Njp*C1111);
+
+	const double Ki1j1 =
+	  l23*Nir*(l23*Njr*C3333 + 
+		   ((l22+1)*Njr+l23*Njq)*C3323 + 
+		   (l21*Njr+l23*Njp)*C3313 + 
+		   (l21*Njq+(l22+1)*Njp)*C3312 + 
+		   (l22+1)*Njq*C2233 + 
+		   l21*Njp*C1133) + 
+	  ((l22+1)*Nir+l23*Niq)*(l23*Njr*C3323 + 
+				 ((l22+1)*Njr+l23*Njq)*C2323 + 
+				 (l21*Njr+l23*Njp)*C2313 + 
+				 (l22+1)*Njq*C2223 + 
+				 (l21*Njq+(l22+1)*Njp)*C1223 + 
+				 l21*Njp*C1123) + 
+	  (l21*Nir+l23*Nip)*(l23*Njr*C3313 + 
+			     ((l22+1)*Njr+l23*Njq)*C2313 + 
+			     (l22+1)*Njq*C2213 + 
+			     (l21*Njr+l23*Njp)*C1313 + 
+			     (l21*Njq+(l22+1)*Njp)*C1213 + 
+			     l21*Njp*C1113) + 
+	  (l21*Niq+(l22+1)*Nip)*(l23*Njr*C3312 + 
+				 (l22+1)*Njq*C2212 + 
+				 ((l22+1)*Njr+l23*Njq)*C1223 + 
+				 (l21*Njr+l23*Njp)*C1213 + 
+				 (l21*Njq+(l22+1)*Njp)*C1212 + 
+				 l21*Njp*C1112) + 
+	  (l22+1)*Niq*(l23*Njr*C2233 + 
+		       ((l22+1)*Njr+l23*Njq)*C2223 + 
+		       (l22+1)*Njq*C2222 + 
+		       (l21*Njr+l23*Njp)*C2213 + 
+		       (l21*Njq+(l22+1)*Njp)*C2212 + 
+		       l21*Njp*C1122) + 
+	  l21*Nip*(l23*Njr*C1133 + 
+		   ((l22+1)*Njr+l23*Njq)*C1123 + 
+		   (l22+1)*Njq*C1122 + 
+		   (l21*Njr+l23*Njp)*C1113 + 
+		   (l21*Njq+(l22+1)*Njp)*C1112 + 
+		   l21*Njp*C1111);
+
+	const double Ki1j2 =
+	  l23*Nir*((l33+1)*Njr*C3333 + 
+		   (l32*Njr+(l33+1)*Njq)*C3323 + 
+		   (l31*Njr+(l33+1)*Njp)*C3313 + 
+		   (l31*Njq+l32*Njp)*C3312 + 
+		   l32*Njq*C2233 + 
+		   l31*Njp*C1133) + 
+	  ((l22+1)*Nir+l23*Niq)*((l33+1)*Njr*C3323 + 
+				 (l32*Njr+(l33+1)*Njq)*C2323 + 
+				 (l31*Njr+(l33+1)*Njp)*C2313 + 
+				 l32*Njq*C2223 + 
+				 (l31*Njq+l32*Njp)*C1223 + 
+				 l31*Njp*C1123) + 
+	  (l21*Nir+l23*Nip)*((l33+1)*Njr*C3313 +
+			     (l32*Njr+(l33+1)*Njq)*C2313 +
+			     l32*Njq*C2213 +
+			     (l31*Njr+(l33+1)*Njp)*C1313 +
+			     (l31*Njq+l32*Njp)*C1213 + 
+			     l31*Njp*C1113) + 
+	  (l21*Niq+(l22+1)*Nip)*((l33+1)*Njr*C3312 + 
+				 l32*Njq*C2212 + 
+				 (l32*Njr+(l33+1)*Njq)*C1223 + 
+				 (l31*Njr+(l33+1)*Njp)*C1213 + 
+				 (l31*Njq+l32*Njp)*C1212 + 
+				 l31*Njp*C1112) +
+	  (l22+1)*Niq*((l33+1)*Njr*C2233 + 
+		       (l32*Njr+(l33+1)*Njq)*C2223 + 
+		       l32*Njq*C2222 + 
+		       (l31*Njr+(l33+1)*Njp)*C2213 + 
+		       (l31*Njq+l32*Njp)*C2212 + 
+		       l31*Njp*C1122) + 
+	  l21*Nip*((l33+1)*Njr*C1133 + 
+		   (l32*Njr+(l33+1)*Njq)*C1123 + 
+		   l32*Njq*C1122 + 
+		   (l31*Njr+(l33+1)*Njp)*C1113 + 
+		   (l31*Njq+l32*Njp)*C1112+l31*Njp*C1111);
+
+	const double Ki2j0 =
+	  (l33+1)*Nir*(l13*Njr*C3333 + 
+		       (l12*Njr+l13*Njq)*C3323 + 
+		       ((l11+1)*Njr+l13*Njp)*C3313 + 
+		       ((l11+1)*Njq+l12*Njp)*C3312 + 
+		       l12*Njq*C2233 + 
+		       (l11+1)*Njp*C1133) + 
+	  (l32*Nir+(l33+1)*Niq)*(l13*Njr*C3323 + 
+				 (l12*Njr+l13*Njq)*C2323 + 
+				 ((l11+1)*Njr+l13*Njp)*C2313 + 
+				 l12*Njq*C2223 + 
+				 ((l11+1)*Njq+l12*Njp)*C1223 + 
+				 (l11+1)*Njp*C1123) + 
+	  (l31*Nir+(l33+1)*Nip)*(l13*Njr*C3313 + 
+				 (l12*Njr+l13*Njq)*C2313 + 
+				 l12*Njq*C2213 + 
+				 ((l11+1)*Njr+l13*Njp)*C1313 + 
+				 ((l11+1)*Njq+l12*Njp)*C1213 + 
+				 (l11+1)*Njp*C1113) +
+	  (l31*Niq+l32*Nip)*(l13*Njr*C3312 + 
+			     l12*Njq*C2212 + 
+			     (l12*Njr+l13*Njq)*C1223 + 
+			     ((l11+1)*Njr+l13*Njp)*C1213 + 
+			     ((l11+1)*Njq+l12*Njp)*C1212 + 
+			     (l11+1)*Njp*C1112) + 
+	  l32*Niq*(l13*Njr*C2233 +
+		   (l12*Njr+l13*Njq)*C2223 + 
+		   l12*Njq*C2222 + 
+		   ((l11+1)*Njr+l13*Njp)*C2213 + 
+		   ((l11+1)*Njq+l12*Njp)*C2212 + 
+		   (l11+1)*Njp*C1122) + 
+	  l31*Nip*(l13*Njr*C1133 + 
+		   (l12*Njr+l13*Njq)*C1123 + 
+		   l12*Njq*C1122 + 
+		   ((l11+1)*Njr+l13*Njp)*C1113 + 
+		   ((l11+1)*Njq+l12*Njp)*C1112 + 
+		   (l11+1)*Njp*C1111);
+
+	const double Ki2j1 =
+	  (l33+1)*Nir*(l23*Njr*C3333 + 
+		       ((l22+1)*Njr+l23*Njq)*C3323 + 
+		       (l21*Njr+l23*Njp)*C3313 + 
+		       (l21*Njq+(l22+1)*Njp)*C3312 + 
+		       (l22+1)*Njq*C2233 + 
+		       l21*Njp*C1133) + 
+	  (l32*Nir+(l33+1)*Niq)*(l23*Njr*C3323 + 
+				 ((l22+1)*Njr+l23*Njq)*C2323 + 
+				 (l21*Njr+l23*Njp)*C2313 + 
+				 (l22+1)*Njq*C2223 + 
+				 (l21*Njq+(l22+1)*Njp)*C1223 + 
+				 l21*Njp*C1123) + 
+	  (l31*Nir+(l33+1)*Nip)*(l23*Njr*C3313 + 
+				 ((l22+1)*Njr+l23*Njq)*C2313 + 
+				 (l22+1)*Njq*C2213 + 
+				 (l21*Njr+l23*Njp)*C1313 + 
+				 (l21*Njq+(l22+1)*Njp)*C1213 + 
+				 l21*Njp*C1113) + 
+	  (l31*Niq+l32*Nip)*(l23*Njr*C3312 + 
+			     (l22+1)*Njq*C2212 + 
+			     ((l22+1)*Njr+l23*Njq)*C1223 + 
+			     (l21*Njr+l23*Njp)*C1213 + 
+			     (l21*Njq+(l22+1)*Njp)*C1212 + 
+			     l21*Njp*C1112) + 
+	  l32*Niq*(l23*Njr*C2233 + 
+		   ((l22+1)*Njr+l23*Njq)*C2223 + 
+		   (l22+1)*Njq*C2222 + 
+		   (l21*Njr+l23*Njp)*C2213 + 
+		   (l21*Njq+(l22+1)*Njp)*C2212 + 
+		   l21*Njp*C1122) + 
+	  l31*Nip*(l23*Njr*C1133 + 
+		   ((l22+1)*Njr+l23*Njq)*C1123 + 
+		   (l22+1)*Njq*C1122 + 
+		   (l21*Njr+l23*Njp)*C1113 + 
+		   (l21*Njq+(l22+1)*Njp)*C1112 + 
+		   l21*Njp*C1111);
+
+	const double Ki2j2 =
+	  (l33+1)*Nir*((l33+1)*Njr*C3333 + 
+		       (l32*Njr+(l33+1)*Njq)*C3323 + 
+		       (l31*Njr+(l33+1)*Njp)*C3313 + 
+		       (l31*Njq+l32*Njp)*C3312 + 
+		       l32*Njq*C2233 + 
+		       l31*Njp*C1133) + 
+	  (l32*Nir+(l33+1)*Niq)*((l33+1)*Njr*C3323 + 
+				 (l32*Njr+(l33+1)*Njq)*C2323 + 
+				 (l31*Njr+(l33+1)*Njp)*C2313 + 
+				 l32*Njq*C2223 + 
+				 (l31*Njq+l32*Njp)*C1223 + 
+				 l31*Njp*C1123) + 
+	  (l31*Nir+(l33+1)*Nip)*((l33+1)*Njr*C3313 + 
+				 (l32*Njr+(l33+1)*Njq)*C2313 + 
+				 l32*Njq*C2213 + 
+				 (l31*Njr+(l33+1)*Njp)*C1313 + 
+				 (l31*Njq+l32*Njp)*C1213 + 
+				 l31*Njp*C1113) + 
+	  (l31*Niq+l32*Nip)*((l33+1)*Njr*C3312 + 
+			     l32*Njq*C2212 + 
+			     (l32*Njr+(l33+1)*Njq)*C1223 + 
+			     (l31*Njr+(l33+1)*Njp)*C1213 + 
+			     (l31*Njq+l32*Njp)*C1212 + 
+			     l31*Njp*C1112) + 
+	  l32*Niq*((l33+1)*Njr*C2233 + 
+		   (l32*Njr+(l33+1)*Njq)*C2223 + 
+		   l32*Njq*C2222 + 
+		   (l31*Njr+(l33+1)*Njp)*C2213 + 
+		   (l31*Njq+l32*Njp)*C2212 + 
+		   l31*Njp*C1122) + 
+	  l31*Nip*((l33+1)*Njr*C1133 + 
+		   (l32*Njr+(l33+1)*Njq)*C1123 + 
+		   l32*Njq*C1122 + 
+		   (l31*Njr+(l33+1)*Njp)*C1113 + 
+		   (l31*Njq+l32*Njp)*C1112 + 
+		   l31*Njp*C1111);
+
+	const double Knl = 
+	  Nir*(Njr*s33+Njq*s23+Njp*s13) + 
+	  Niq*(Njr*s23+Njq*s22+Njp*s12) + 
+	  Nip*(Njr*s13+Njq*s12+Njp*s11);
+
+	const int iBlock = iB * (numBasis*spaceDim);
+	const int iBlock1 = (iB+1) * (numBasis*spaceDim);
+	const int iBlock2 = (iB+2) * (numBasis*spaceDim);
+	const int jBlock = jB;
+	const int jBlock1 = jB+1;
+	const int jBlock2 = jB+2;
+	_cellMatrix[iBlock +jBlock ] += Ki0j0 + Knl;
+	_cellMatrix[iBlock +jBlock1] += Ki0j1;
+	_cellMatrix[iBlock +jBlock2] += Ki0j2;
+	_cellMatrix[iBlock1+jBlock ] += Ki1j0;
+	_cellMatrix[iBlock1+jBlock1] += Ki1j1 + Knl;
+	_cellMatrix[iBlock1+jBlock2] += Ki1j2;
+	_cellMatrix[iBlock2+jBlock ] += Ki2j0;
+	_cellMatrix[iBlock2+jBlock1] += Ki2j1;
+	_cellMatrix[iBlock2+jBlock2] += Ki2j2 + Knl;
+      } // for
+    } // for
+  } // for
+  PetscLogFlops(numQuadPts*(1+numBasis*(3+numBasis*(6*26+9))));
+} // _elasticityJacobian3D
+
+// ----------------------------------------------------------------------
+// Calculate Green-Lagrange strain tensor at quadrature points of a 1-D cell.
+void 
+pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain1D(
+					      double_array* strain,
+					      const double_array& deform,
+					      const int numQuadPts)
+{ // _calcTotalStrain1D
+  // Green-Lagrange strain tensor = 1/2 ( X^T X - I )
+  // X: deformation tensor
+  // I: identity matrix
+
+  assert(0 != strain);
+
+  const int dim = 1;
+  const int strainSize = 1;
+  assert(deform.size() == numQuadPts*dim*dim);
+  assert(strain->size() == numQuadPts*strainSize);
+
+
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad)
+      (*strain)[iQuad] = 0.5*(deform[iQuad]*deform[iQuad] - 1.0);
+} // _calcTotalStrain1D
+  
+// ----------------------------------------------------------------------
+// Calculate Green-Lagrange strain tensor at quadrature points of a 2-D cell.
+void 
+pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain2D(
+					      double_array* strain,
+					      const double_array& deform,
+					      const int numQuadPts)
+{ // _calcTotalStrain2D
+  // Green-Lagrange strain tensor = 1/2 ( X^T X - I )
+  // X: deformation tensor
+  // I: identity matrix
+
+  assert(0 != strain);
+
+  const int dim = 2;
+  const int deformSize = dim*dim;
+  const int strainSize = 3;
+  assert(deform.size() == numQuadPts*deformSize);
+  assert(strain->size() == numQuadPts*strainSize);
+
+  for (int iQuad=0, iDeform=0, iStrain=0;
+       iQuad < numQuadPts;
+       ++iQuad, iDeform+=deformSize, iStrain+=strainSize) {
+    (*strain)[iStrain  ] =
+      0.5 * (deform[iDeform  ]*deform[iDeform  ] + 
+	     deform[iDeform+2]*deform[iDeform+2] - 1.0);
+    (*strain)[iStrain+1] =
+      0.5 * (deform[iDeform+1]*deform[iDeform+1] + 
+	     deform[iDeform+3]*deform[iDeform+3] - 1.0);
+    (*strain)[iStrain+2] =
+      0.5 * (deform[iDeform  ]*deform[iDeform+1] + 
+	     deform[iDeform+2]*deform[iDeform+3]);
+  } // for
+} // _calcTotalStrain2D
+  
+// ----------------------------------------------------------------------
+// Calculate Green-Lagrange strain tensor at quadrature points of a 3-D cell.
+void 
+pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain3D(
+					      double_array* strain,
+					      const double_array& deform,
+					      const int numQuadPts)
+{ // _calcTotalStrain3D
+  // Green-Lagrange strain tensor = 1/2 ( X^T X - I )
+  // X: deformation tensor
+  // I: identity matrix
+
+  assert(0 != strain);
+
+  const int dim = 3;
+  const int deformSize = dim*dim;
+  const int strainSize = 6;
+  assert(deform.size() == numQuadPts*dim*dim);
+  assert(strain->size() == numQuadPts*strainSize);
+
+  for (int iQuad=0, iDeform=0, iStrain=0;
+       iQuad < numQuadPts;
+       ++iQuad, iDeform+=deformSize, iStrain+=strainSize) {
+    (*strain)[iStrain  ] =
+      0.5 * (deform[iDeform  ]*deform[iDeform  ] +
+	     deform[iDeform+3]*deform[iDeform+3] +
+	     deform[iDeform+6]*deform[iDeform+6] - 1.0);
+    (*strain)[iStrain+1] =
+      0.5 * (deform[iDeform+1]*deform[iDeform+1] +
+	     deform[iDeform+4]*deform[iDeform+4] +
+	     deform[iDeform+7]*deform[iDeform+7] - 1.0);
+    (*strain)[iStrain+2] =
+      0.5 * (deform[iDeform+2]*deform[iDeform+2] +
+	     deform[iDeform+5]*deform[iDeform+5] +
+	     deform[iDeform+8]*deform[iDeform+8] - 1.0);
+    (*strain)[iStrain+3] =
+      0.5 * (deform[iDeform  ]*deform[iDeform+1] +
+	     deform[iDeform+3]*deform[iDeform+4] +
+	     deform[iDeform+6]*deform[iDeform+7]);
+    (*strain)[iStrain+4] =
+      0.5 * (deform[iDeform+1]*deform[iDeform+2] +
+	     deform[iDeform+4]*deform[iDeform+5] +
+	     deform[iDeform+7]*deform[iDeform+8]);
+    (*strain)[iStrain+5] =
+      0.5 * (deform[iDeform+0]*deform[iDeform+2] +
+	     deform[iDeform+3]*deform[iDeform+5] +
+	     deform[iDeform+6]*deform[iDeform+8]);
+  } // for
+} // _calcTotalStrain3D
+  
+// ----------------------------------------------------------------------
+// Calculate deformation tensor.
+void 
+pylith::feassemble::IntegratorElasticityLgDeform::_calcDeformation(
+					      double_array* deform,
+					      const double_array& basisDeriv,
+					      const double_array& vertices,
+					      const double_array& disp,
+					      const int numBasis,
+					      const int numQuadPts,
+					      const int dim)
+{ // _calcDeformation
+  assert(0 != deform);
+
+  assert(basisDeriv.size() == numQuadPts*numBasis*dim);
+  assert(disp.size() == numBasis*dim);
+
+  const int deformSize = dim*dim;
+
+  (*deform) = 0.0;
+  for (int iQuad=0; iQuad < numQuadPts; ++iQuad)
+    for (int iBasis=0, iQ=iQuad*numBasis*dim; iBasis < numBasis; ++iBasis)
+      for (int iDim=0, indexD=0; iDim < dim; ++iDim)
+	for (int jDim=0; jDim < dim; ++jDim, ++indexD)
+	  (*deform)[iQuad*deformSize+indexD] += 
+	    basisDeriv[iQ+iBasis*dim+jDim] *
+	    (vertices[iBasis*dim+iDim] + disp[iBasis*dim+iDim]);
+
+} // _calcDeformation
+  
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/IntegratorElasticityLgDeform.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticityLgDeform.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,214 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file libsrc/feassemble/IntegratorElasticityLgDeform.hh
+ *
+ * @brief Object containing general elasticity operations for implicit
+ * and explicit time integration of the elasticity equation for large
+ * rigid body rotations and small strains.
+ */
+
+#if !defined(pylith_feassemble_integratorelasticitylgdeform_hh)
+#define pylith_feassemble_integratorelasticitylgdeform_hh
+
+// Include directives ---------------------------------------------------
+#include "IntegratorElasticity.hh" // ISA IntegratorElasticity
+
+// IntegratorElasticity -------------------------------------------------
+/** @brief General elasticity operations for implicit and explicit
+ * time integration of the elasticity equation for large rigid body
+ * rotations and small strains.
+ */
+class pylith::feassemble::IntegratorElasticityLgDeform : 
+  public IntegratorElasticity
+{ // IntegratorElasticityLgDeform
+  friend class TestIntegratorElasticityLgDeform; // unit testing
+
+// PUBLIC TYPEDEFS //////////////////////////////////////////////////////
+public :
+
+  typedef void (*totalStrain_fn_type)(double_array*,
+				      const double_array&,
+				      const int);
+  
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  IntegratorElasticityLgDeform(void);
+
+  /// Destructor
+  virtual
+  ~IntegratorElasticityLgDeform(void);
+
+  /** Determine whether we need to recompute the Jacobian.
+   *
+   * @returns True if Jacobian needs to be recomputed, false otherwise.
+   */
+  bool needNewJacobian(void);
+
+  /** Update state variables as needed.
+   *
+   * @param t Current time
+   * @param fields Solution fields
+   * @param mesh Finite-element mesh
+   */
+  void updateStateVars(const double t,
+		       topology::SolutionFields* const fields);
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+  /** Calculate stress or strain field from solution field.
+   *
+   * @param field Field in which to store stress or strain.
+   * @param name Name of field to compute ('total-strain' or 'stress')
+   * @param fields Manager for solution fields.
+   */
+  void _calcStrainStressField(topology::Field<topology::Mesh>* field,
+			      const char* name,
+			      topology::SolutionFields* const fields);
+
+  /** Calculate stress field from total strain field. Stress field
+   * replaces strain field in section.
+   *
+   * @param field Field in which to store stress.
+   */
+  void _calcStressFromStrain(topology::Field<topology::Mesh>* field);
+			      
+
+  /** Integrate elasticity term in residual for 1-D cells.
+   *
+   * @param stress Stress tensor for cell at quadrature points.
+   * @param disp Displacement field at cell's DOF.
+   */
+  void _elasticityResidual1D(const double_array& stress,
+			     const double_array& disp);
+
+  /** Integrate elasticity term in residual for 2-D cells.
+   *
+   * @param stress Stress tensor for cell at quadrature points.
+   * @param disp Displacement field at cell's DOF.
+   */
+  void _elasticityResidual2D(const double_array& stress,
+			     const double_array& disp);
+
+  /** Integrate elasticity term in residual for 3-D cells.
+   *
+   * @param stress Stress tensor for cell at quadrature points.
+   * @param disp Displacement field at cell's DOF.
+   */
+  void _elasticityResidual3D(const double_array& stress,
+			     const double_array& disp);
+
+  /** Integrate elasticity term in Jacobian for 1-D cells.
+   *
+   * @param elasticConsts Matrix of elasticity constants at quadrature points.
+   * @param stress Stress tensor for cell at quadrature points.
+   * @param disp Displacement field at cell's DOF.
+   */
+  void _elasticityJacobian1D(const double_array& elasticConsts,
+			     const double_array& stress,
+			     const double_array& disp);
+
+  /** Integrate elasticity term in Jacobian for 2-D cells.
+   *
+   * @param elasticConsts Matrix of elasticity constants at quadrature points.
+   * @param stress Stress tensor for cell at quadrature points.
+   * @param disp Displacement field at cell's DOF.
+   */
+  void _elasticityJacobian2D(const double_array& elasticConsts,
+			     const double_array& stress,
+			     const double_array& disp);
+
+  /** Integrate elasticity term in Jacobian for 3-D cells.
+   *
+   * @param elasticConsts Matrix of elasticity constants at quadrature points.
+   * @param stress Stress tensor for cell at quadrature points.
+   * @param disp Displacement field at cell's DOF.
+   */
+  void _elasticityJacobian3D(const double_array& elasticConsts,
+			     const double_array& stress,
+			     const double_array& disp);
+
+  /** Calculate Green-Lagrange strain tensor at quadrature points of a
+   *  1-D cell.
+   *
+   * @param strain Green-Lagrange strain tensor at quadrature points (output).
+   * @param deform Deformation tensor at quadrature points.
+   * @param numQuadPts Number of quadrature points.
+   */
+  static
+  void _calcTotalStrain1D(double_array* strain,
+			  const double_array& deform,
+			  const int numQuadPts);
+
+  /** Calculate Green-Lagrange strain tensor at quadrature points of a
+   *  2-D cell.
+   *
+   * @param strain Green-Lagrange strain tensor at quadrature points (output).
+   * @param deform Deformation tensor at quadrature points.
+   * @param numQuadPts Number of quadrature points.
+   */
+  static
+  void _calcTotalStrain2D(double_array* strain,
+			  const double_array& deform,
+			  const int numQuadPts);
+
+  /** Calculate Green-Lagrange strain tensor at quadrature points of a
+   *  3-D cell.
+   *
+   * @param strain Green-Lagrange strain tensor at quadrature points (output).
+   * @param deform Deformation tensor at quadrature points.
+   * @param numQuadPts Number of quadrature points.
+   */
+  static
+  void _calcTotalStrain3D(double_array* strain,
+			  const double_array& deform,
+			  const int numQuadPts);
+
+  /** Calculate deformation tensor.
+   *
+   * @param deform Deformation tensor for cell at quadrature points.
+   * @param basisDeriv Derivatives of basis functions at quadrature points.
+   * @param vertices Coordinates of vertices in reference cell.
+   * @param disp Displacements of DOF of cell.
+   * @param numBasis Number of basis functions for cell.
+   * @param numQuadPts Number of quadrature points.
+   * @param dim Dimension of cell.
+   */
+  static
+  void _calcDeformation(double_array* deform,
+			const double_array& basisDeriv,
+			const double_array& vertices,
+			const double_array& disp,
+			const int numBasis,
+			const int numQuadPts,
+			const int dim);
+  
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  /// Not implemented.
+  IntegratorElasticityLgDeform(const IntegratorElasticityLgDeform&);
+
+  /// Not implemented
+  const IntegratorElasticityLgDeform& operator=(const IntegratorElasticityLgDeform&);
+
+}; // IntegratorElasticityLgDeform
+
+#endif // pylith_feassemble_integratorelasticitylgdeform_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -19,11 +19,14 @@
 	Constraint.hh \
 	Constraint.icc \
 	ElasticityExplicit.hh \
+	ElasticityExplicitLgDeform.hh \
 	ElasticityImplicit.hh \
+	ElasticityImplicitLgDeform.hh \
 	Integrator.hh \
 	Integrator.icc \
 	Integrator.cc \
 	IntegratorElasticity.hh \
+	IntegratorElasticityLgDeform.hh \
 	GeometryPoint1D.hh \
 	GeometryPoint2D.hh \
 	GeometryPoint3D.hh \

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,19 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature.hh
+ * @file libsrc/feassemble/Quadrature.hh
  *
  * @brief Abstract base class for integrating over finite-elements
  * using quadrature.
- *
- * This object contains the informatio needed to perform numerical
- * quadrature over a finite-element cell. It inherits quadrature
- * information over the reference cell from the QuadratureRefCell object.
-
- * Given a cell this object will compute the cell's Jacobian, the
- * determinant of the Jacobian, the inverse of the Jacobian, and the
- * coordinates in the domain of the cell's quadrature points. The
- * Jacobian and its inverse are computed at the quadrature points.
  */
 
 #if !defined(pylith_feassemble_quadrature_hh)
@@ -37,6 +28,19 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // Quadrature -----------------------------------------------------------
+/** @brief Abstract base class for integrating over finite-elements
+ * using quadrature.
+ *
+ * This object contains the informatio needed to perform numerical
+ * quadrature over a finite-element cell. It inherits quadrature
+ * information over the reference cell from the QuadratureRefCell
+ * object.
+ *
+ * Given a cell this object will compute the cell's Jacobian, the
+ * determinant of the Jacobian, the inverse of the Jacobian, and the
+ * coordinates in the domain of the cell's quadrature points. The
+ * Jacobian and its inverse are computed at the quadrature points.
+ */
 template<typename mesh_type>
 class pylith::feassemble::Quadrature : public QuadratureRefCell
 { // Quadrature

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature0D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,25 +11,23 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature0D.hh
+ * @file libsrc/feassemble/Quadrature0D.hh
  *
  * @brief Quadrature for 0-D finite-elements.
- *
- * Need Quadrature in 0-D for integration of boundary condition for
- * 1-D meshes.
  */
 
 #if !defined(pylith_feassemble_quadrature0d_hh)
 #define pylith_feassemble_quadrature0d_hh
 
+// Include directives ---------------------------------------------------
 #include "QuadratureEngine.hh"
 
-namespace pylith {
-  namespace feassemble {
-    class TestQuadrature0D;
-  } // feassemble
-} // pylith
-
+// Quadrature0D ---------------------------------------------------------
+/** @brief Quadrature for 0-D finite-elements.
+ *
+ * Need Quadrature in 0-D for integration of boundary condition for
+ * 1-D meshes.
+ */
 class pylith::feassemble::Quadrature0D : public QuadratureEngine
 { // Quadrature0D
   friend class TestQuadrature0D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature1D.hh
+ * @file libsrc/feassemble/Quadrature1D.hh
  *
  * @brief Quadrature for 1-D finite-elements.
  */
@@ -19,8 +19,11 @@
 #if !defined(pylith_feassemble_quadrature1d_hh)
 #define pylith_feassemble_quadrature1d_hh
 
+// Include directives ---------------------------------------------------
 #include "QuadratureEngine.hh" // ISA Quadrature
 
+// Quadrature1D ---------------------------------------------------------
+/// Quadrature for 1-D finite-elements.
 class pylith::feassemble::Quadrature1D : public QuadratureEngine
 { // Quadrature1D
   friend class TestQuadrature1D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din2D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature1Din2D.hh
+ * @file libsrc/feassemble/Quadrature1Din2D.hh
  *
  * @brief Quadrature for 1-D finite-elements in 2-D space.
  */
@@ -19,14 +19,11 @@
 #if !defined(pylith_feassemble_quadrature1din2d_hh)
 #define pylith_feassemble_quadrature1din2d_hh
 
+// Include directives ---------------------------------------------------
 #include "QuadratureEngine.hh"
 
-namespace pylith {
-  namespace feassemble {
-    class Quadrature1Din2D;
-  } // feassemble
-} // pylith
-
+// Quadrature0D ---------------------------------------------------------
+/// Quadrature for 1-D finite-elements in 2-D space.
 class pylith::feassemble::Quadrature1Din2D : public QuadratureEngine
 { // Quadrature1Din2D
   friend class TestQuadrature1Din2D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature1Din3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature1Din3D.hh
+ * @file libsrc/feassemble/Quadrature1Din3D.hh
  *
  * @brief Quadrature for 1-D finite-elements in 3-D space.
  */
@@ -19,14 +19,12 @@
 #if !defined(pylith_feassemble_quadrature1din3d_hh)
 #define pylith_feassemble_quadrature1din3d_hh
 
+// Include directives ---------------------------------------------------
 #include "QuadratureEngine.hh"
 
-namespace pylith {
-  namespace feassemble {
-    class Quadrature1Din3D;
-  } // feassemble
-} // pylith
-
+// Quadrature0D ---------------------------------------------------------
+/** @brief Quadrature for 1-D finite-elements in 3-D space.
+ */
 class pylith::feassemble::Quadrature1Din3D : public QuadratureEngine
 { // Quadrature1Din3D
   friend class TestQuadrature1Din3D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature2D.hh
+ * @file libsrc/feassemble/Quadrature2D.hh
  *
  * @brief Quadrature for 2-D finite-elements in 2-D space.
  */
@@ -19,15 +19,11 @@
 #if !defined(pylith_feassemble_quadrature2d_hh)
 #define pylith_feassemble_quadrature2d_hh
 
+// Include directives ---------------------------------------------------
 #include "QuadratureEngine.hh"
 
-namespace pylith {
-  namespace feassemble {
-    class Quadrature2D;
-    class TestQuadrature2D;
-  } // feassemble
-} // pylith
-
+// Quadrature0D ---------------------------------------------------------
+/// Quadrature for 2-D finite-elements in 2-D space.
 class pylith::feassemble::Quadrature2D : public QuadratureEngine
 { // Quadrature2D
   friend class TestQuadrature2D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature2Din3D.hh
+ * @file libsrc/feassemble/Quadrature2Din3D.hh
  *
  * @brief Quadrature for 2-D finite-elements in 3-D space.
  */
@@ -19,15 +19,11 @@
 #if !defined(pylith_feassemble_quadrature2din3d_hh)
 #define pylith_feassemble_quadrature2din3d_hh
 
+// Include directives ---------------------------------------------------
 #include "QuadratureEngine.hh"
 
-namespace pylith {
-  namespace feassemble {
-    class Quadrature2Din3D;
-    class TestQuadrature2Din3D;
-  } // feassemble
-} // pylith
-
+// Quadrature0D ---------------------------------------------------------
+/// Quadrature for 2-D finite-elements in 3-D space.
 class pylith::feassemble::Quadrature2Din3D : public QuadratureEngine
 { // Quadrature2Din3D
   friend class TestQuadrature2Din3D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/Quadrature3D.hh
+ * @file libsrc/feassemble/Quadrature3D.hh
  *
  * @brief Quadrature for 3-D finite-elements.
  */
@@ -19,8 +19,11 @@
 #if !defined(pylith_feassemble_quadrature3d_hh)
 #define pylith_feassemble_quadrature3d_hh
 
-#include "QuadratureEngine.hh" // ISA QuadratureEngine
+// Include directives ---------------------------------------------------
+#include "QuadratureEngine.hh"
 
+// Quadrature0D ---------------------------------------------------------
+/// Quadrature for 3-D finite-elements in 3-D space.
 class pylith::feassemble::Quadrature3D : public QuadratureEngine
 { // Quadrature3D
   friend class TestQuadrature3D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/QuadratureEngine.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/QuadratureEngine.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/QuadratureEngine.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/feassemble/QuadratureEngine.hh
+ * @file libsrc/feassemble/QuadratureEngine.hh
  *
  * @brief Abstract base class for quadrature computation engine.
  */
@@ -19,9 +19,12 @@
 #if !defined(pylith_feassemble_quadratureengine_hh)
 #define pylith_feassemble_quadratureengine_hh
 
+// Include directives ---------------------------------------------------
 #include "feassemblefwd.hh" // forward declaration
 #include "pylith/utils/array.hh" // USES double_array
 
+// Quadrature0D ---------------------------------------------------------
+/// Abstract base class for quadrature computation engine.
 class pylith::feassemble::QuadratureEngine
 { // QuadratureEngine
   friend class TestQuadratureEngine;

Modified: short/3D/PyLith/trunk/libsrc/feassemble/QuadratureRefCell.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/QuadratureRefCell.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/QuadratureRefCell.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,16 +11,10 @@
 //
 
 /**
- * @file pylith/feassemble/QuadratureRefCell.hh
+ * @file libsrc/feassemble/QuadratureRefCell.hh
  *
- * @brief Object with basic quadrature information for the reference cell.
- *
- * This object contains the basis functions and their derivatives
- * evaluated at the quadrature points of the reference element, and
- * the coordinates and weights of the quadrature points. 
- *
- * The Quadrature object manages the general functionality of the
- * numerical quadrature.
+ * @brief Object with basic quadrature information for the reference
+ * cell.
  */
 
 #if !defined(pylith_feassemble_quadraturerefcell_hh)
@@ -32,6 +26,16 @@
 #include "pylith/utils/array.hh" // HASA double_array
 
 // Quadrature -----------------------------------------------------------
+/** @brief Object with basic quadrature information for the reference
+ * cell.
+ *
+ * This object contains the basis functions and their derivatives
+ * evaluated at the quadrature points of the reference element, and
+ * the coordinates and weights of the quadrature points.
+ *
+ * The Quadrature object manages the general functionality of the
+ * numerical quadrature.
+ */
 class pylith::feassemble::QuadratureRefCell
 { // Quadrature
   friend class TestQuadratureRefCell; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/feassemble/feassemblefwd.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/feassemblefwd.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/feassemble/feassemblefwd.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -56,6 +56,10 @@
     class ElasticityImplicit;
     class ElasticityExplicit;
 
+    class IntegratorElasticityLgDeform;
+    class ElasticityImplicitLgDeform;
+    class ElasticityExplicitLgDeform;
+
   } // feassemble
 } // pylith
 

Copied: short/3D/PyLith/trunk/libsrc/feassemble/jacobian2d_lgdeform.wxm (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/jacobian2d_lgdeform.wxm)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/jacobian2d_lgdeform.wxm	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/jacobian2d_lgdeform.wxm	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,53 @@
+/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
+/* [ Created with wxMaxima version 0.8.2 ] */
+
+/* [wxMaxima: input   start ] */
+Bnl: matrix([N11,0,N21,0,N31,0],
+[N12,0,N22,0,N32,0],
+[0,N11,0,N21,0,N31],
+[0,N12,0,N22,0,N32]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+S: matrix([S11,S12,0,0],
+[S12,S22,0,0],
+[0,0,S11,S12],
+[0,0,S12,S22]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+x: transpose(Bnl) . S . Bnl;
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+Bi: matrix([Nip*(1+l11), l21*Nip],
+[l12*Niq,(1+l22)*Niq],
+[(1+l11)*Niq+l12*Nip,(1+l22)*Nip+l21*Niq]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+Bj: matrix([Njp*(1+l11), l21*Njp],
+[l12*Njq,(1+l22)*Njq],
+[(1+l11)*Njq+l12*Njp,(1+l22)*Njp+l21*Njq]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+C: matrix([C1111, C1122, C1112],
+[C1122, C2222, C2212],
+[C1112, C2212, C1212]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+y: transpose(Bi) . C . Bj;
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+Svec: matrix([s11, s22, s12]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+r: transpose(Bi) . transpose(Svec);
+/* [wxMaxima: input   end   ] */
+
+/* Maxima can't load/batch files which end with a comment! */
+"Created with wxMaxima"$

Copied: short/3D/PyLith/trunk/libsrc/feassemble/jacobian3d_lgdeform.wxm (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/feassemble/jacobian3d_lgdeform.wxm)
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/jacobian3d_lgdeform.wxm	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/feassemble/jacobian3d_lgdeform.wxm	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,84 @@
+/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
+/* [ Created with wxMaxima version 0.8.2 ] */
+
+/* [wxMaxima: input   start ] */
+Bnli: matrix([Nip,0,0],
+[Niq,0,0],
+[Nir,0,0],
+[0,Nip,0],
+[0,Niq,0],
+[0,Nir,0],
+[0,0,Nip],
+[0,0,Niq],
+[0,0,Nir]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+Bnlj: matrix([Njp,0,0],
+[Njq,0,0],
+[Njr,0,0],
+[0,Njp,0],
+[0,Njq,0],
+[0,Njr,0],
+[0,0,Njp],
+[0,0,Njq],
+[0,0,Njr]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+S: matrix([s11,s12,s13,0,0,0,0,0,0],
+[s12,s22,s23,0,0,0,0,0,0],
+[s13,s23,s33,0,0,0,0,0,0],
+[0,0,0,s11,s12,s13,0,0,0],
+[0,0,0,s12,s22,s23,0,0,0],
+[0,0,0,s13,s23,s33,0,0,0],
+[0,0,0,0,0,0,s11,s12,s13],
+[0,0,0,0,0,0,s12,s22,s23],
+[0,0,0,0,0,0,s13,s23,s33]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+x: transpose(Bnli) . S . Bnlj;
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+Bi: matrix([Nip*(1+l11), l21*Nip, l31*Nip],
+[l12*Niq,(1+l22)*Niq, l32*Niq],
+[l13*Nir, l23*Nir, (1+l33)*Nir],
+[(1+l11)*Niq+l12*Nip,(1+l22)*Nip+l21*Niq,l31*Niq+l32*Nip],
+[l12*Nir+l13*Niq, (1+l22)*Nir+l23*Niq, (1+l33)*Niq+l32*Nir],
+[(1+l11)*Nir+l13*Nip, l21*Nir+l23*Nip, (1+l33)*Nip+l31*Nir]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+Bj: matrix([Njp*(1+l11), l21*Njp, l31*Njp],
+[l12*Njq,(1+l22)*Njq, l32*Njq],
+[l13*Njr, l23*Njr, (1+l33)*Njr],
+[(1+l11)*Njq+l12*Njp,(1+l22)*Njp+l21*Njq,l31*Njq+l32*Njp],
+[l12*Njr+l13*Njq, (1+l22)*Njr+l23*Njq, (1+l33)*Njq+l32*Njr],
+[(1+l11)*Njr+l13*Njp, l21*Njr+l23*Njp, (1+l33)*Njp+l31*Njr]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+C: matrix([C1111, C1122, C1133, C1112, C1123, C1113],
+[C1122, C2222, C2233, C2212, C2223, C2213],
+[C1133, C2233, C3333, C3312, C3323, C3313],
+[C1112, C2212, C3312, C1212, C1223, C1213],
+[C1123, C2223, C3323, C1223, C2323, C2313],
+[C1113, C2213, C3313, C1213, C2313, C1313]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+y: transpose(Bi) . C . Bj;
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+Svec: matrix([s11,s22,s33,s12,s23,s13]);
+/* [wxMaxima: input   end   ] */
+
+/* [wxMaxima: input   start ] */
+r: transpose(Bi) . transpose(Svec);
+/* [wxMaxima: input   end   ] */
+
+/* Maxima can't load/batch files which end with a comment! */
+"Created with wxMaxima"$


Property changes on: short/3D/PyLith/trunk/libsrc/materials
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/materials/EffectiveStress.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/EffectiveStress.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/EffectiveStress.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,23 +13,20 @@
 /** @file libsrc/materials/EffectiveStress.hh
  *
  * @brief C++ EffectiveStress object.
- *
- * This class contains bracketing and root-finding functions for
- * materials that use an effective stress formulation.
  */
 
 #if !defined(pylith_materials_effectivestress_hh)
 #define pylith_materials_effectivestress_hh
 
-/// Namespace for pylith package
-namespace pylith {
-  namespace materials {
-    class EffectiveStress;
-  } // materials
+// Include directives ---------------------------------------------------
+#include "materialsfwd.hh"
 
-} // pylith
-
-/// C++ abstract base class for Material object.
+// EffectiveStress ------------------------------------------------------
+/** @brief C++ EffectiveStress object.
+ *
+ * This class contains bracketing and root-finding functions for
+ * materials that use an effective stress formulation.
+ */
 class pylith::materials::EffectiveStress
 { // class EffectiveStress
 

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,14 +10,23 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/ElasticIsotropic3D.h
+/** @file libsrc/materials/ElasticIsotropic3D.hh
  *
- * @brief C++ ElasticIsotropic3D object
+ * @brief C++ 3-D, isotropic, linear elastic material.
+ */
+
+#if !defined(pylith_materials_elasticisotropic3d_hh)
+#define pylith_materials_elasticisotropic3d_hh
+
+// Include directives ---------------------------------------------------
+#include "ElasticMaterial.hh" // ISA ElasticMaterial
+
+// ElasticIsotropic3D ---------------------------------------------------
+/** @brief 3-D, isotropic, linear elastic material. 
  *
- * 3-D, isotropic, linear elastic material. The physical properties
- * are specified using density, shear-wave speed, and
- * compressional-wave speed. The physical properties are stored
- * internally using density, lambda, and mu, which are directly
+ * The physical properties are specified using density, shear-wave
+ * speed, and compressional-wave speed. The physical properties are
+ * stored internally using density, lambda, and mu, which are directly
  * related to the elasticity constants used in the finite-element
  * integration.
  *
@@ -26,14 +35,6 @@
  * This implies that when $\epsilon = \epsilon_0$, $\sigma =
  * \sigma_0$.
  */
-
-#if !defined(pylith_materials_elasticisotropic3d_hh)
-#define pylith_materials_elasticisotropic3d_hh
-
-// Include directives ---------------------------------------------------
-#include "ElasticMaterial.hh" // ISA ElasticMaterial
-
-// ElasticIsotropic3D ---------------------------------------------------
 class pylith::materials::ElasticIsotropic3D : public ElasticMaterial
 { // class ElasticIsotropic3D
   friend class TestElasticIsotropic3D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -12,9 +12,8 @@
 
 /** @file libsrc/materials/ElasticMaterial.hh
  *
- * @brief C++ ElasticMaterial object
- *
- * Interface definition for linear and nonlinear elastic materials.
+ * @brief Interface definition for linear and nonlinear elastic
+ * materials.
  */
 
 #if !defined(pylith_materials_elasticmaterial_hh)
@@ -24,6 +23,9 @@
 #include "Material.hh" // ISA Material
 
 // ElasticMaterial ------------------------------------------------------
+/** @brief Interface definition for linear and nonlinear elastic
+ *  materials.
+ */
 class pylith::materials::ElasticMaterial : public Material
 { // class ElasticMaterial
   friend class TestElasticMaterial; ///< unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,14 +10,23 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/ElasticPlaneStrain.h
+/** @file libsrc/materials/ElasticPlaneStrain.hh
  *
- * @brief C++ ElasticPlaneStrain object
+ * @brief 2-D, isotropic, linear elastic material for plane strain.
+ */
+
+#if !defined(pylith_materials_elasticplanestrain_hh)
+#define pylith_materials_elasticplanestrain_hh
+
+// Include directives ---------------------------------------------------
+#include "ElasticMaterial.hh" // ISA ElasticMaterial
+
+// ElasticPlaneStrain ---------------------------------------------------
+/** @brief 2-D, isotropic, linear elastic material for plane strain.
  *
- * 2-D, isotropic, linear elastic material for plane strain. The
- * physical properties are specified using density, shear-wave speed,
- * and compressional-wave speed. The physical properties are stored
- * internally using density, lambda, and mu, which are directly
+ * The physical properties are specified using density, shear-wave
+ * speed, and compressional-wave speed. The physical properties are
+ * stored internally using density, lambda, and mu, which are directly
  * related to the elasticity constants used in the finite-element
  * integration.
  *
@@ -26,14 +35,6 @@
  * This implies that when $\epsilon = \epsilon_0$, $\sigma =
  * \sigma_0$.
  */
-
-#if !defined(pylith_materials_elasticplanestrain_hh)
-#define pylith_materials_elasticplanestrain_hh
-
-// Include directives ---------------------------------------------------
-#include "ElasticMaterial.hh" // ISA ElasticMaterial
-
-// ElasticPlaneStrain ---------------------------------------------------
 class pylith::materials::ElasticPlaneStrain : public ElasticMaterial
 { // class ElasticPlaneStrain
   friend class TestElasticPlaneStrain; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,21 +10,9 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/ElasticPlaneStress.h
+/** @file libsrc/materials/ElasticPlaneStress.hh
  *
- * @brief C++ ElasticPlaneStress object
- *
- * 2-D, isotropic, linear elastic material for plane stress. The
- * physical properties are specified using density, shear-wave speed,
- * and compressional-wave speed. The physical properties are stored
- * internally using density, lambda, and mu, which are directly
- * related to the elasticity constants used in the finite-element
- * integration.
- *
- * $\sigma - \sigma_0 = C (\epsilon - \epsilon_0)
- *
- * This implies that when $\epsilon = \epsilon_0$, $\sigma =
- * \sigma_0$.
+ * @brief 2-D, isotropic, linear elastic material for plane stress.
  */
 
 #if !defined(pylith_materials_elasticplanestress_hh)
@@ -34,6 +22,21 @@
 #include "ElasticMaterial.hh" // ISA ElasticMaterial
 
 // ElasticPlaneStrain ---------------------------------------------------
+/** @brief 2-D, isotropic, linear elastic material for plane stress.
+ * 
+ * The physical properties are specified using density, shear-wave
+ * speed, and compressional-wave speed. The physical properties are
+ * stored internally using density, lambda, and mu, which are directly
+ * related to the elasticity constants used in the finite-element
+ * integration.
+ *
+ * \f[
+ *   \sigma - \sigma_0 = C (\epsilon - \epsilon_0)
+ * \f]
+ *
+ * This implies that when \f$\epsilon = \epsilon_0\f$, \f$\sigma =
+ * \sigma_0\f$.
+ */
 class pylith::materials::ElasticPlaneStress : public ElasticMaterial
 { // class ElasticPlaneStress
   friend class TestElasticPlaneStress; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,20 +10,9 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/ElasticStrain1D.h
+/** @file libsrc/materials/ElasticStrain1D.hh
  *
- * @brief C++ ElasticStrain1D object
- *
- * 1-D, linear elastic material with axial strain. The physical
- * properties are specified using density and compressional-wave
- * speed. The physical properties are stored internally using density
- * and lambda + 2 mu, which are directly related to the elasticity
- * constants used in the finite-element integration.
- *
- * $\sigma - \sigma_0 = (\lambda + 2 \mu) (\epislon - \epsilon_0)$
- *
- * This implies that when $\epsilon = \epsilon_0$, $\sigma =
- * \sigma_0$.
+ * @brief 1-D, linear elastic material with axial strain.
  */
 
 #if !defined(pylith_materials_elasticstrain1d_hh)
@@ -33,6 +22,20 @@
 #include "ElasticMaterial.hh" // ISA ElasticMaterial
 
 // ElasticStrain1D ------------------------------------------------------
+/** @brief 1-D, linear elastic material with axial strain.
+ *
+ *  The physical properties are specified using density and
+ * compressional-wave speed. The physical properties are stored
+ * internally using density and lambda + 2 mu, which are directly
+ * related to the elasticity constants used in the finite-element
+ * integration.
+ *
+ * $\sigma - \sigma_0 = (\lambda + 2 \mu) (\epislon - \epsilon_0)$
+ *
+ * This implies that when $\epsilon = \epsilon_0$, $\sigma =
+ * \sigma_0$.
+ */
+
 class pylith::materials::ElasticStrain1D : public ElasticMaterial
 { // class ElasticStrain1D
   friend class TestElasticStrain1D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,14 +10,23 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/ElasticStress1D.h
+/** @file libsrc/materials/ElasticStress1D.hh
  *
- * @brief C++ ElasticStress1D object
+ * @brief 1-D, linear elastic material with axial stress.
+ */
+
+#if !defined(pylith_materials_elasticstress1d_hh)
+#define pylith_materials_elasticstress1d_hh
+
+// Include directives ---------------------------------------------------
+#include "ElasticMaterial.hh" // ISA ElasticMaterial
+
+// ElasticStress1D ------------------------------------------------------
+/** @brief 1-D, linear elastic material with axial stress.
  *
- * 1-D, linear elastic material with axial stress. The physical
- * properties are specified using density, shear-wave speed, and
- * compressional-wave speed. The physical properties are stored
- * internally using density, mu, and lambda, which are directly
+ * The physical properties are specified using density, shear-wave
+ * speed, and compressional-wave speed. The physical properties are
+ * stored internally using density, mu, and lambda, which are directly
  * related to the elasticity constants used in the finite-element
  * integration.
  *
@@ -28,13 +37,6 @@
  * \sigma_0$.
  */
 
-#if !defined(pylith_materials_elasticstress1d_hh)
-#define pylith_materials_elasticstress1d_hh
-
-// Include directives ---------------------------------------------------
-#include "ElasticMaterial.hh" // ISA ElasticMaterial
-
-// ElasticStress1D ------------------------------------------------------
 class pylith::materials::ElasticStress1D : public ElasticMaterial
 { // class ElasticStress1D
   friend class TestElasticStress1D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/GenMaxwellIsotropic3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,11 +10,24 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/GenMaxwellIsotropic3D.h
+/** @file libsrc/materials/GenMaxwellIsotropic3D.hh
  *
  * @brief C++ GenMaxwellIsotropic3D object
+ */
+
+// :TODO: Rewrite as template over the number of Maxwell models?
+// We could instatiate for 2 and 3 models and provide example for how to
+// instantiate over other numbers of Maxwell models.
+
+#if !defined(pylith_materials_genmaxwellisotropic3d_hh)
+#define pylith_materials_genmaxwellisotropic3d_hh
+
+// Include directives ---------------------------------------------------
+#include "ElasticMaterial.hh" // ISA ElasticMaterial
+
+// GenMaxwellIsotropic3D ------------------------------------------------
+/** @brief 3-D, isotropic, generalized linear Maxwell viscoelastic material.
  *
- * 3-D, isotropic, generalized linear Maxwell viscoelastic material.
  * This consists of several Maxwell models in parallel. At present,
  * the number of models is fixed at 3, but this will be changed in the
  * future. The physical properties are specified using density,
@@ -31,18 +44,6 @@
  * (viscosity/mu), and the shear ratio is also stored for each Maxwell
  * model.
  */
-
-// :TODO: Rewrite as template over the number of Maxwell models?
-// We could instatiate for 2 and 3 models and provide example for how to
-// instantiate over other numbers of Maxwell models.
-
-#if !defined(pylith_materials_genmaxwellisotropic3d_hh)
-#define pylith_materials_genmaxwellisotropic3d_hh
-
-// Include directives ---------------------------------------------------
-#include "ElasticMaterial.hh" // ISA ElasticMaterial
-
-// GenMaxwellIsotropic3D ------------------------------------------------
 class pylith::materials::GenMaxwellIsotropic3D : public ElasticMaterial
 { // class GenMaxwellIsotropic3D
   friend class TestGenMaxwellIsotropic3D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/Material.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,10 +13,6 @@
 /** @file libsrc/materials/Material.hh
  *
  * @brief C++ abstract base class for Material object.
- *
- * Interface definition for a material. The physical properties for
- * the material are associated with the constants in the constitutive
- * model.
  */
 
 #if !defined(pylith_materials_material_hh)
@@ -35,6 +31,13 @@
 #include <string> // HASA std::string
 
 // Material -------------------------------------------------------------
+/** @brief C++ abstract base class for Material object.
+ *
+ * Interface definition for a material. The physical properties for
+ * the material are associated with the constants in the constitutive
+ * model.
+ */
+
 class pylith::materials::Material
 { // class Material
   friend class TestMaterial; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/MaxwellIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/MaxwellIsotropic3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/MaxwellIsotropic3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,16 +10,9 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/MaxwellIsotropic3D.h
+/** @file libsrc/materials/MaxwellIsotropic3D.hh
  *
- * @brief C++ MaxwellIsotropic3D object
- *
- * 3-D, isotropic, linear Maxwell viscoelastic material. The
- * physical properties are specified using density, shear-wave speed,
- * viscosity, and compressional-wave speed. The physical properties are
- * stored internally using density, lambda, mu, which are directly
- * related to the elasticity constants used in the finite-element
- * integration. The viscosity is stored using Maxwell Time (viscosity/mu).
+ * @brief 3-D, isotropic, linear Maxwell viscoelastic material.
  */
 
 #if !defined(pylith_materials_maxwellisotropic3d_hh)
@@ -29,6 +22,15 @@
 #include "ElasticMaterial.hh" // ISA ElasticMaterial
 
 // MaxwellIsotropic3D ---------------------------------------------------
+/** @brief 3-D, isotropic, linear Maxwell viscoelastic material.
+ *
+ * The physical properties are specified using density, shear-wave
+ * speed, viscosity, and compressional-wave speed. The physical
+ * properties are stored internally using density, lambda, mu, which
+ * are directly related to the elasticity constants used in the
+ * finite-element integration. The viscosity is stored using Maxwell
+ * Time (viscosity/mu).
+ */
 class pylith::materials::MaxwellIsotropic3D : public ElasticMaterial
 { // class MaxwellIsotropic3D
   friend class TestMaxwellIsotropic3D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/MaxwellPlaneStrain.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/MaxwellPlaneStrain.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/MaxwellPlaneStrain.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,16 +10,10 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/MaxwellPlaneStrain.h
+/** @file libsrc/materials/MaxwellPlaneStrain.hh
  *
- * @brief C++ MaxwellPlaneStrain object
- *
- * 2-D, isotropic, linear Maxwell viscoelastic material for plane strain. The
- * physical properties are specified using density, shear-wave speed,
- * viscosity, and compressional-wave speed. The physical properties are
- * stored internally using density, lambda, mu, which are directly
- * related to the elasticity constants used in the finite-element
- * integration. The viscosity is stored using Maxwell Time (viscosity/mu).
+ * @brief 2-D, isotropic, linear Maxwell viscoelastic material for
+ * plane strain.  
  */
 
 #if !defined(pylith_materials_maxwellplanestrain_hh)
@@ -29,6 +23,16 @@
 #include "ElasticMaterial.hh" // ISA ElasticMaterial
 
 // MaxwellPlaneStrain ---------------------------------------------------
+/** @brief 2-D, isotropic, linear Maxwell viscoelastic material for
+ * plane strain.
+ *
+ * The physical properties are specified using density, shear-wave
+ * speed, viscosity, and compressional-wave speed. The physical
+ * properties are stored internally using density, lambda, mu, which
+ * are directly related to the elasticity constants used in the
+ * finite-element integration. The viscosity is stored using Maxwell
+ * Time (viscosity/mu).
+ */
 class pylith::materials::MaxwellPlaneStrain : public ElasticMaterial
 { // class MaxwellPlaneStrain
   friend class TestMaxwellPlaneStrain; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/Metadata.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Metadata.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/Metadata.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,12 +11,9 @@
 //
 
 /**
- * @file libsrc/topology/Metadata.hh
+ * @file libsrc/materials/Metadata.hh
  *
  * @brief C++ object for material metadata.
- *
- * Extends Sieve mesh to include coordinate system associated with
- * domain.
  */
 
 #if !defined(pylith_materials_metadata_hh)
@@ -31,6 +28,12 @@
 #include <map> // HASA std::map
 
 // MaterialMetadata -----------------------------------------------------
+/** @brief C++ object for material metadata.
+ *
+ * Extends Sieve mesh to include coordinate system associated with
+ * domain.
+ */
+
 class pylith::materials::Metadata
 { // Mesh
   friend class TestMetadata; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,17 +10,9 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file libsrc/materials/PowerLaw3D.h
+/** @file libsrc/materials/PowerLaw3D.hh
  *
- * @brief C++ PowerLaw3D object
- *
- * 3-D, isotropic, power-law Maxwell viscoelastic material. The
- * physical properties are specified using density, shear-wave speed,
- * power-law coefficient, power-law exponent, and compressional-wave speed.
- * The physical properties are stored internally using density, lambda, mu,
- * which are directly related to the elasticity constants used in the
- * finite-element integration. The viscosity information is retained as
- * a viscosity coefficient and the power-law exponent.
+ * @brief 3-D, isotropic, power-law viscoelastic material. 
  */
 
 #if !defined(pylith_materials_powerlaw3d_hh)
@@ -30,6 +22,16 @@
 #include "ElasticMaterial.hh" // ISA ElasticMaterial
 
 // Powerlaw3D -----------------------------------------------------------
+/** @brief 3-D, isotropic, power-law viscoelastic material. 
+ *
+ * The physical properties are specified using density, shear-wave
+ * speed, viscosity coefficient, power-law exponent, and
+ * compressional-wave speed.  The physical properties are stored
+ * internally using density, lambda, mu, which are directly related to
+ * the elasticity constants used in the finite-element
+ * integration. The viscosity information is retained as specified.
+ */
+
 class pylith::materials::PowerLaw3D : public ElasticMaterial
 { // class PowerLaw3D
   friend class TestPowerLaw3D; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/materials/ViscoelasticMaxwell.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ViscoelasticMaxwell.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/ViscoelasticMaxwell.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -12,24 +12,21 @@
 
 /** @file libsrc/materials/ViscoelasticMaxwell.hh
  *
- * @brief C++ ViscoelasticMaxwell object.
- *
- * This class contains a single function that can be used by any
- * linear Maxwell viscoelastic class.
+ * @brief Class for basic Maxwell viscoelastic functions.
  */
 
 #if !defined(pylith_materials_viscoelasticmaxwell_hh)
 #define pylith_materials_viscoelasticmaxwell_hh
 
-/// Namespace for pylith package
-namespace pylith {
-  namespace materials {
-    class ViscoelasticMaxwell;
-  } // materials
+// Include directives ---------------------------------------------------
+#include "materialsfwd.hh" // forward declarations
 
-} // pylith
-
-/// C++ abstract base class for Material object.
+// ViscoelasticMaxwell --------------------------------------------------
+/** @brief Class for basic Maxwell viscoelastic functions.
+ *
+ * This class contains functions that can be used by any linear
+ * Maxwell viscoelastic class.
+ */
 class pylith::materials::ViscoelasticMaxwell
 { // class ViscoelasticMaxwell
 

Modified: short/3D/PyLith/trunk/libsrc/materials/materialsfwd.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/materialsfwd.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/materials/materialsfwd.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,9 @@
     class GenMaxwellIsotropic3D;
     class PowerLaw3D;
 
+    class EffectiveStress;
+    class ViscoelasticMaxwell;
+
   } // materials
 } // pylith
 


Property changes on: short/3D/PyLith/trunk/libsrc/meshio
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/meshio/BinaryIO.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/BinaryIO.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/BinaryIO.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/meshio/MeshIOCubit.hh
+ * @file libsrc/meshio/BinaryIO.hh
  *
  * @brief C++ object for general binary input/output operations.
  */
@@ -25,6 +25,7 @@
 #include <iosfwd>
 
 // BinaryIO -------------------------------------------------------------
+/// General binary input/output operations.
 class pylith::meshio::BinaryIO
 { // BinaryIO
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/CellFilter.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/CellFilter.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/CellFilter.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/meshio/CellFilter.hh
+ * @file libsrc/meshio/CellFilter.hh
  *
  * @brief C++ object for filtering cell fields when outputing
  * finite-element data.
@@ -27,6 +27,9 @@
 #include "pylith/feassemble/feassemblefwd.hh" // HOLDSA Quadrature<Mesh>
 
 // CellFilter -----------------------------------------------------------
+/** @brief C++ object for filtering cell fields when outputing
+ * finite-element data.
+ */
 template<typename mesh_type, typename field_type>
 class pylith::meshio::CellFilter
 { // CellFilter

Modified: short/3D/PyLith/trunk/libsrc/meshio/CellFilterAvg.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/CellFilterAvg.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/CellFilterAvg.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/meshio/CellFilterAvg.hh
+ * @file libsrc/meshio/CellFilterAvg.hh
  *
  * @brief C++ object for averaging cell fields over quadrature points
  * when outputing finite-element data.
@@ -24,6 +24,9 @@
 #include "CellFilter.hh" // ISA CellFilter
 
 // CellFilter -----------------------------------------------------------
+/** @brief C++ object for averaging cell fields over quadrature points
+ * when outputing finite-element data.
+ */
 template<typename mesh_type, typename field_type>
 class pylith::meshio::CellFilterAvg : public CellFilter<mesh_type, field_type>
 { // CellFilterAvg

Modified: short/3D/PyLith/trunk/libsrc/meshio/DataWriter.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/DataWriter.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/DataWriter.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/meshio/DataWriter.hh
+ * @file libsrc/meshio/DataWriter.hh
  *
  * @brief Abstract base class for writing finite-element data to file.
  */
@@ -25,6 +25,7 @@
 #include "pylith/topology/topologyfwd.hh" // USES Field
 
 // DataWriter -----------------------------------------------------------
+/// Abstract base class for writing finite-element data to file.
 template<typename mesh_type, typename field_type>
 class pylith::meshio::DataWriter
 { // DataWriter

Modified: short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -27,7 +27,8 @@
   _timeFormat("%f"),
   _viewer(0),
   _wroteVertexHeader(false),
-  _wroteCellHeader(false)
+  _wroteCellHeader(false),
+  _precision(6)
 { // constructor
 } // constructor
 
@@ -40,6 +41,21 @@
 } // destructor  
 
 // ----------------------------------------------------------------------
+// Set precision of floating point values in output.
+template<typename mesh_type, typename field_type>
+void
+pylith::meshio::DataWriterVTK<mesh_type,field_type>::precision(const int value)
+{ // precision
+  if (value <= 0) {
+    std::ostringstream msg;
+    msg << "Floating point precision (" << value << ") must be positive.";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  _precision = value;
+} // precision
+
+// ----------------------------------------------------------------------
 // Deallocate PETSc and local data structures.
 template<typename mesh_type, typename field_type>
 void
@@ -201,7 +217,7 @@
     } // if
 
     err = VTKViewer::writeField(section, field.label(), fiberDim, numbering,
-				_viewer, enforceDim);
+				_viewer, enforceDim, _precision);
     CHECK_PETSC_ERROR(err);
   } catch (const std::exception& err) {
     std::ostringstream msg;
@@ -269,7 +285,7 @@
     } // if
 
     VTKViewer::writeField(section, field.label(), fiberDim, numbering,
-			  _viewer, enforceDim);
+			  _viewer, enforceDim, _precision);
   } catch (const std::exception& err) {
     std::ostringstream msg;
     msg << "Error while writing field '" << field.label() << "' at time " 

Modified: short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/DataWriterVTK.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,9 +11,9 @@
 //
 
 /**
- * @file pylith/meshio/DataWriterVTK.hh
+ * @file libsrc/meshio/DataWriterVTK.hh
  *
- * @brief Abstract base class for writing finite-element data to file.
+ * @brief Object for writing finite-element data to VTK file.
  */
 
 #if !defined(pylith_meshio_datawritervtk_hh)
@@ -23,6 +23,7 @@
 #include "DataWriter.hh" // ISA DataWriter
 
 // DataWriterVTK --------------------------------------------------------
+/// Object for writing finite-element data to VTK file.
 template<typename mesh_type, typename field_type>
 class pylith::meshio::DataWriterVTK : public DataWriter<mesh_type,field_type>
 { // DataWriterVTK
@@ -70,6 +71,12 @@
    */
   void timeConstant(const double value);
 
+  /** Set precision of floating point values in output.
+   *
+   * @param value Precision for floating point values.
+   */
+  void precision(const int value);
+
   /** Prepare file for data at a new time step.
    *
    * @param t Time stamp for new data
@@ -140,6 +147,8 @@
 
   PetscViewer _viewer; ///< Output file
 
+  int _precision; ///< Precision of floating point values in output.
+
   bool _wroteVertexHeader; ///< True if wrote header for vertex data.
   bool _wroteCellHeader; ///< True if wrote header for cell data
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/GMVFile.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/GMVFile.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/GMVFile.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file libsrc/topology/GMVFile.hh
+ * @file libsrc/meshio/GMVFile.hh
  *
  * @brief C++ base class for input/output of LaGriT GMV files.
  */
@@ -20,6 +20,7 @@
 #define pylith_meshio_gmvfile_hh
 
 // Include directives ---------------------------------------------------
+/// C++ base class for input/output of LaGriT GMV files.
 #include "meshiofwd.hh" // forward declarations
 
 #include <string> // HASA std::string

Modified: short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/GMVFileAscii.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file libsrc/topology/GMVFileAscii.hh
+ * @file libsrc/meshio/GMVFileAscii.hh
  *
  * @brief C++ object for input/output of LaGriT ASCII GMV files.
  */
@@ -26,6 +26,7 @@
 #include <iosfwd>
 
 // GMVFileAscii ---------------------------------------------------------
+/// C++ object for input/output of LaGriT ASCII GMV files.
 class pylith::meshio::GMVFileAscii : public GMVFile
 { // GMVFileAscii
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/GMVFileBinary.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,9 +11,9 @@
 //
 
 /**
- * @file libsrc/topology/GMVFileAscii.hh
+ * @file libsrc/meshio/GMVFileBinary.hh
  *
- * @brief C++ object for input/output of LaGriT ASCII GMV files.
+ * @brief C++ object for input/output of LaGriT binary GMV files.
  */
 
 #if !defined(pylith_meshio_gmvfilebinary_hh)
@@ -26,6 +26,7 @@
 #include <iosfwd>
 
 // GMVFileBinary --------------------------------------------------------
+/// C++ object for input/output of LaGriT binary GMV files.
 class pylith::meshio::GMVFileBinary : public GMVFile
 { // GMVFileBinary
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshBuilder.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshBuilder.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshBuilder.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,6 +10,12 @@
 // ======================================================================
 //
 
+/**
+ * @file libsrc/meshio/MeshBuilder.hh
+ *
+ * @brief Helper class for constructing Sieve mesh data structures.
+ */
+
 #if !defined(pylith_meshio_meshbuilder_hh)
 #define pylith_meshio_meshbuilder_hh
 
@@ -24,6 +30,7 @@
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
 // MeshBuilder ----------------------------------------------------------
+/// Helper class for constructing Sieve mesh data structures.
 class pylith::meshio::MeshBuilder
 { // MeshBuilder
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIO.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIO.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIO.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -290,6 +290,13 @@
   const ALE::Obj<SieveMesh>& sieveMesh = _mesh->sieveMesh();
   assert(!sieveMesh.isNull());
 
+  if (sieveMesh->hasIntSection(name)) {
+    std::ostringstream msg;
+    msg << "Could not setup group '" << name
+	<< "'. Group already exists in mesh.";
+    throw std::runtime_error(msg.str());
+  } // if
+
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("VertexGroups");
   const ALE::Obj<IntSection>& groupField = sieveMesh->getIntSection(name);
@@ -396,6 +403,13 @@
   const ALE::Obj<SieveMesh>& sieveMesh = _mesh->sieveMesh();
   assert(!sieveMesh.isNull());
 
+  if (!sieveMesh->hasIntSection(name)) {
+    std::ostringstream msg;
+    msg << "Could not get group '" << name
+	<< "'. Group missing from mesh.";
+    throw std::runtime_error(msg.str());
+  } // if
+
   const ALE::Obj<IntSection>& groupField = sieveMesh->getIntSection(name);
   assert(!groupField.isNull());
   const IntSection::chart_type& chart = groupField->getChart();

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIO.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIO.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIO.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,9 +11,9 @@
 //
 
 /**
- * @file libsrc/topology/MeshIO.hh
+ * @file libsrc/meshio/MeshIO.hh
  *
- * @brief C++ object for managing mesh input/output.
+ * @brief C++ base class for managing mesh input/output.
  */
 
 #if !defined(pylith_meshio_meshio_hh)
@@ -29,6 +29,7 @@
                                     // string_vector
 
 // MeshIO ---------------------------------------------------------------
+/// C++ abstract base class for managing mesh input/output.
 class pylith::meshio::MeshIO
 { // MeshIO
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOAscii.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOAscii.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOAscii.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -28,6 +28,7 @@
 #include <string> // HASA std::string
 
 // MeshIOAscii ----------------------------------------------------------
+/// C++ input/output manager for PyLith ASCII mesh files.
 class pylith::meshio::MeshIOAscii : public MeshIO
 { // MeshIOAscii
   friend class TestMeshIOAscii; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOCubit.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/meshio/MeshIOCubit.hh
+ * @file libsrc/meshio/MeshIOCubit.hh
  *
  * @brief C++ input/output manager for CUBIT Exodus II files.
  */
@@ -25,6 +25,7 @@
 #include <string> // HASA std::string
 
 // Forward declarations -------------------------------------------------
+/// C++ input/output manager for CUBIT Exodus II files.
 class NcFile; // netcdf file
 
 // MeshIOCubit ----------------------------------------------------------

Modified: short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/MeshIOLagrit.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -25,6 +25,7 @@
 #include <string> // HASA std::string
 
 // MeshIOLagrit ---------------------------------------------------------
+/// Input/output manager for LaGriT GMV and Pset files.
 class pylith::meshio::MeshIOLagrit : public MeshIO
 { // MeshIOLagrit
   friend class TestMeshIOLagrit; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/meshio/OutputManager.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/OutputManager.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/OutputManager.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,9 +11,9 @@
 //
 
 /**
- * @file pylith/meshio/OutputManager.hh
+ * @file libsrc/meshio/OutputManager.hh
  *
- * @brief C++ object for manager output of finite-element data.
+ * @brief Manager for output of finite-element data.
  */
 
 #if !defined(pylith_meshio_outputmanager_hh)
@@ -26,6 +26,7 @@
 #include "spatialdata/geocoords/geocoordsfwd.hh" // USES CoordSys
 
 // OutputManager --------------------------------------------------------
+/// Manager for output of finite-element data.
 template<typename mesh_type, typename field_type>
 class pylith::meshio::OutputManager
 { // OutputManager

Modified: short/3D/PyLith/trunk/libsrc/meshio/OutputSolnSubset.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/OutputSolnSubset.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/OutputSolnSubset.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,9 +11,9 @@
 //
 
 /**
- * @file pylith/meshio/OutputSolnSubset.hh
+ * @file libsrc/meshio/OutputSolnSubset.hh
  *
- * @brief C++ object for manager output of finite-element data over a
+ * @brief C++ object for managing output of finite-element data over a
  * subdomain.
  */
 
@@ -31,6 +31,9 @@
 #include <string> // HASA std::string
 
 // OutputSolnSubset -----------------------------------------------------
+/** @brief C++ object for managing output of finite-element data over
+ * a subdomain.
+ */
 class pylith::meshio::OutputSolnSubset : 
   public OutputManager<topology::SubMesh, topology::Field<topology::Mesh> >
 { // OutputSolnSubset

Modified: short/3D/PyLith/trunk/libsrc/meshio/PsetFile.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/PsetFile.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/PsetFile.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file libsrc/topology/PsetFile.hh
+ * @file libsrc/meshio/PsetFile.hh
  *
  * @brief C++ base class for input/output of LaGriT Pset files.
  */
@@ -26,6 +26,7 @@
 #include <string> // HASA std::string
 
 // PsetFile -------------------------------------------------------------
+/// C++ base class for input/output of LaGriT Pset files.
 class pylith::meshio::PsetFile
 { // PsetFile
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/PsetFileAscii.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/PsetFileAscii.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/PsetFileAscii.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file libsrc/topology/PsetFile.hh
+ * @file libsrc/meshio/PsetFileAscii.hh
  *
  * @brief C++ object for input/output of LaGriT binary Pset files.
  */
@@ -25,6 +25,7 @@
 #include <iosfwd>
 
 // PsetFileAscii --------------------------------------------------------
+/// C++ object for input/output of LaGriT ascii Pset files.
 class pylith::meshio::PsetFileAscii : public PsetFile
 { // PsetFileAscii
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file libsrc/topology/PsetFile.hh
+ * @file libsrc/meshio/PsetFileBinary.hh
  *
  * @brief C++ object for input/output of LaGriT binary Pset files.
  */
@@ -25,6 +25,7 @@
 #include <iosfwd>
 
 // PsetFileBinary -------------------------------------------------------
+/// C++ object for input/output of LaGriT binary Pset files.
 class pylith::meshio::PsetFileBinary : public PsetFile
 { // PsetFileBinary
 

Modified: short/3D/PyLith/trunk/libsrc/meshio/UCDFaultFile.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/UCDFaultFile.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/UCDFaultFile.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,12 +14,6 @@
  * @file libsrc/meshio/UCDFaultFile.hh
  *
  * @brief C++ object for reading a fault mesh from a UCD file.
- *
- * Temporary fix for getting a fault mesh information into
- * PyLith. Using a fault mesh permits cells to have more than one face
- * on the fault surface. Supporting information also provides the
- * orientation of the fault surface, eliminating the need to determine
- * it from the faces/vertices alone.
  */
 
 #if !defined(pylith_meshio_ucdfaultfile_hh)
@@ -33,6 +27,14 @@
 #include "pylith/utils/sievetypes.hh" // USES ALE::Obj, ALE::Mesh
 
 // UCDFaultFile ---------------------------------------------------------
+/** @brief C++ object for reading a fault mesh from a UCD file.
+ *
+ * TEMPORARY fix for getting a fault mesh information into
+ * PyLith. Using a fault mesh permits cells to have more than one face
+ * on the fault surface. Supporting information also provides the
+ * orientation of the fault surface, eliminating the need to determine
+ * it from the faces/vertices alone.
+ */
 class pylith::meshio::UCDFaultFile
 { // UCDFaultFile
   friend class TestUCDFaultFile; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/meshio/VertexFilter.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/VertexFilter.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/VertexFilter.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/meshio/VertexFilter.hh
+ * @file libsrc/meshio/VertexFilter.hh
  *
  * @brief C++ object for filtering vertex fields when outputing
  * finite-element data.
@@ -26,6 +26,9 @@
 #include "pylith/topology/topologyfwd.hh" // USES Field
 
 // VertexFilter ---------------------------------------------------------
+/** @brief C++ object for filtering vertex fields when outputing
+ * finite-element data.
+ */
 template<typename field_type>
 class pylith::meshio::VertexFilter
 { // VertexFilter

Modified: short/3D/PyLith/trunk/libsrc/meshio/VertexFilterVecNorm.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/VertexFilterVecNorm.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/meshio/VertexFilterVecNorm.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/meshio/VertexFilterVecNorm.hh
+ * @file libsrc/meshio/VertexFilterVecNorm.hh
  *
  * @brief C++ object for computing vector norms for fields over
  * vertices when outputing finite-element data.
@@ -24,6 +24,9 @@
 #include "VertexFilter.hh" // ISA VertexFilter
 
 // VertexFilterVecNorm --------------------------------------------------
+/** @brief C++ object for computing vector norms for fields over
+ * vertices when outputing finite-element data.
+ */
 template<typename field_type>
 class pylith::meshio::VertexFilterVecNorm : public VertexFilter<field_type>
 { // VertexFilterVecNorm


Property changes on: short/3D/PyLith/trunk/libsrc/problems
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/problems/Formulation.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/Formulation.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/Formulation.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -30,6 +30,7 @@
   _t(0.0),
   _dt(0.0),
   _jacobian(0),
+  _jacobianLumped(0),
   _fields(0)
 { // constructor
 } // constructor
@@ -47,6 +48,7 @@
 pylith::problems::Formulation::deallocate(void)
 { // deallocate
   _jacobian = 0; // :TODO: Use shared pointer.
+  _jacobianLumped = 0; // :TODO: Use shared pointer.
   _fields = 0; // :TODO: Use shared pointer.
 } // deallocate
   
@@ -104,6 +106,25 @@
 } // updateSettings
 
 // ----------------------------------------------------------------------
+// Update handles and parameters for reforming the Jacobian and
+// residual.
+void
+pylith::problems::Formulation::updateSettings(topology::Field<topology::Mesh>* jacobian,
+					      topology::SolutionFields* fields,
+					      const double t,
+					      const double dt)
+{ // updateSettings
+  assert(0 != jacobian);
+  assert(0 != fields);
+  assert(dt > 0.0);
+
+  _jacobianLumped = jacobian;
+  _fields = fields;
+  _t = t;
+  _dt = dt;
+} // updateSettings
+
+// ----------------------------------------------------------------------
 // Reform system residual.
 void
 pylith::problems::Formulation::reformResidual(const PetscVec* tmpResidualVec,
@@ -194,7 +215,106 @@
   
   // Assemble jacobian.
   _jacobian->assemble("final_assembly");
+
+  // Extract diagonal :KLUDGE: We extract the diagonal even if we
+  // don't need to.
+  if (!_fields->hasField("Jacobian diagonal")) {
+    _fields->add("Jacobian diagonal", "jacobian_diagonal");
+    topology::Field<topology::Mesh>& jacobianDiag = 
+      _fields->get("Jacobian diagonal");
+    const topology::Field<topology::Mesh>& disp = 
+      _fields->get("disp(t)");
+    jacobianDiag.cloneSection(disp);
+    jacobianDiag.createVector();
+    jacobianDiag.createScatter();
+  } // if
+  topology::Field<topology::Mesh>& jacobianDiag = 
+    _fields->get("Jacobian diagonal");
+  MatGetDiagonal(_jacobian->matrix(), jacobianDiag.vector());
+  jacobianDiag.scatterVectorToSection();  
 } // reformJacobian
 
+// ----------------------------------------------------------------------
+// Reform system Jacobian.
+void
+pylith::problems::Formulation::reformJacobianLumped(void)
+{ // reformJacobian
+  assert(0 != _jacobianLumped);
+  assert(0 != _fields);
 
+  // Set jacobian to zero.
+  _jacobianLumped->zero();
+
+  // Add in contributions that require assembly.
+  int numIntegrators = _meshIntegrators.size();
+  for (int i=0; i < numIntegrators; ++i)
+    _meshIntegrators[i]->integrateJacobian(*_jacobianLumped, _t, _fields);
+  numIntegrators = _submeshIntegrators.size();
+  for (int i=0; i < numIntegrators; ++i)
+    _submeshIntegrators[i]->integrateJacobian(*_jacobianLumped, _t, _fields);
+  
+  // Assemble jacbian.
+  _jacobianLumped->complete();
+
+  // Add in contributions that do not require assembly.
+  numIntegrators = _meshIntegrators.size();
+  for (int i=0; i < numIntegrators; ++i)
+    _meshIntegrators[i]->integrateJacobianAssembled(*_jacobianLumped, 
+						    _t, _fields);
+  numIntegrators = _submeshIntegrators.size();
+  for (int i=0; i < numIntegrators; ++i)
+    _submeshIntegrators[i]->integrateJacobianAssembled(*_jacobianLumped,
+						       _t, _fields);
+
+} // reformJacobian
+
+// ----------------------------------------------------------------------
+// Constrain solution space.
+void
+pylith::problems::Formulation::constrainSolnSpace(const PetscVec* tmpSolutionVec)
+{ // constrainSolnSpace
+  assert(0 != tmpSolutionVec);
+  assert(0 != _fields);
+
+  // Update section view of field.
+  if (0 != tmpSolutionVec) {
+    topology::Field<topology::Mesh>& solution = _fields->solution();
+    solution.scatterVectorToSection(*tmpSolutionVec);
+  } // if
+
+  int numIntegrators = _meshIntegrators.size();
+  assert(numIntegrators > 0); // must have at least 1 bulk integrator
+  for (int i=0; i < numIntegrators; ++i) {
+    _meshIntegrators[i]->timeStep(_dt);
+    _meshIntegrators[i]->constrainSolnSpace(_fields, _t, *_jacobian);
+  } // for
+  numIntegrators = _submeshIntegrators.size();
+  for (int i=0; i < numIntegrators; ++i) {
+    _submeshIntegrators[i]->timeStep(_dt);
+    _submeshIntegrators[i]->constrainSolnSpace(_fields, _t, *_jacobian);
+  } // for
+
+  // Update PETScVec of solution for changes to Lagrange multipliers.
+  if (0 != tmpSolutionVec) {
+    topology::Field<topology::Mesh>& solution = _fields->solution();
+    solution.scatterSectionToVector(*tmpSolutionVec);
+  } // if
+} // constrainSolnSpace
+
+// ----------------------------------------------------------------------
+// Adjust solution from solver with lumped Jacobian to match Lagrange
+//  multiplier constraints.
+void
+pylith::problems::Formulation::adjustSolnLumped(void)
+{ // adjustSolnLumped
+  int numIntegrators = _meshIntegrators.size();
+  for (int i=0; i < numIntegrators; ++i)
+    _meshIntegrators[i]->adjustSolnLumped(_fields, *_jacobianLumped);
+
+  numIntegrators = _submeshIntegrators.size();
+  for (int i=0; i < numIntegrators; ++i)
+    _submeshIntegrators[i]->adjustSolnLumped(_fields, *_jacobianLumped);
+} // adjustSolnLumped
+
+
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/problems/Formulation.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/Formulation.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/Formulation.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
 
 
 // Formulation ----------------------------------------------------------
+/// Reform the Jacobian and residual for the problem.
 class pylith::problems::Formulation
 { // Formulation
   friend class TestFormulation; // unit testing
@@ -54,6 +55,12 @@
   /// Deallocate PETSc and local data structures.
   void deallocate(void);
   
+  /** Get solution fields.
+   *
+   * @returns solution fields.
+   */
+  const topology::SolutionFields& fields(void) const;
+
   /** Set handles to integrators over the mesh.
    *
    * @param integrators Integrators over the mesh.
@@ -83,13 +90,26 @@
 		      const double t,
 		      const double dt);
 
+  /** Update handles and parameters for reforming the Jacobian and
+   *  residual.
+   *
+   * @param jacobian Handle to diagonal matrix (as Field) for system Jacobian.
+   * @param fields Handle to solution fields.
+   * @param t Current time (nondimensional).
+   * @param dt Time step (nondimension).
+   */
+  void updateSettings(topology::Field<topology::Mesh>* jacobian,
+		      topology::SolutionFields* fields,
+		      const double t,
+		      const double dt);
+
   /** Reform system residual.
    *
    * @param tmpResidualVec Temporary PETSc vector for residual.
-   * @param tmpSolveSolnVec Temporary PETSc vector for solution.
+   * @param tmpSolutionVec Temporary PETSc vector for solution.
    */
   void reformResidual(const PetscVec* tmpResidualVec =0,
-		      const PetscVec* tmpSolveSolnVec =0);
+		      const PetscVec* tmpSolutionVec =0);
   
   /* Reform system Jacobian.
    *
@@ -97,14 +117,28 @@
    */
   void reformJacobian(const PetscVec* tmpSolveSolnVec =0);
 
-  const topology::SolutionFields& fields() const;
+  /* Reform system Jacobian.
+   */
+  void reformJacobianLumped(void);
 
+  /** Constrain solution space.
+   *
+   * @param tmpSolutionVec Temporary PETSc vector for solution.
+   */
+  void constrainSolnSpace(const PetscVec* tmpSolutionVec);
+
+  /** Adjust solution from solver with lumped Jacobian to match Lagrange
+   *  multiplier constraints.
+   */
+  void adjustSolnLumped(void);
+
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
   double _t; ///< Current time (nondimensional).
   double _dt; ///< Current time step (nondimensional).
   topology::Jacobian* _jacobian; ///< Handle to Jacobian of system.
+  topology::Field<topology::Mesh>* _jacobianLumped; ///< Handle to lumped Jacobian of system.
   topology::SolutionFields* _fields; ///< Handle to solution fields for system.
 
   /// Integrators over subdomains of the mesh.

Modified: short/3D/PyLith/trunk/libsrc/problems/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -18,6 +18,7 @@
 	Solver.hh \
 	SolverLinear.hh \
 	SolverNonlinear.hh \
+	SolverLumped.hh \
 	problemsfwd.hh
 
 noinst_HEADERS =

Modified: short/3D/PyLith/trunk/libsrc/problems/Solver.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/Solver.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/Solver.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -27,6 +27,9 @@
 
 
 // Solver ---------------------------------------------------------
+/** @brief Abstract C++ base class for using PETSc linear and
+ * nonlinear solvers.
+ */
 class pylith::problems::Solver
 { // Solver
   friend class TestSolver; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,9 +14,6 @@
  * @file libsrc/problems/SolverLinear.hh
  *
  * @brief Object for using PETSc scalable linear equation solvers (KSP).
- *
- * The PETSc linear KSP solvers provide an interface to Krylov subspace
- * (KS) iterative methods and preconditioners (P).
  */
 
 #if !defined(pylith_problems_solverlinear_hh)
@@ -28,6 +25,13 @@
 #include "pylith/utils/petscfwd.h" // HASA PetscKSP
 
 // SolverLinear ---------------------------------------------------------
+/** @brief Object for using PETSc scalable linear equation solvers
+ * (KSP).
+ *
+ * The PETSc linear KSP solvers provide an interface to Krylov subspace
+ * (KS) iterative methods and preconditioners (P).
+ */
+
 class pylith::problems::SolverLinear : Solver
 { // SolverLinear
   friend class TestSolverLinear; // unit testing

Copied: short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/problems/SolverLumped.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,119 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "SolverLumped.hh" // implementation of class methods
+
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+#include "pylith/problems/Formulation.hh" // USES Formulation
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::problems::SolverLumped::SolverLumped(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::problems::SolverLumped::~SolverLumped(void)
+{ // destructor
+  deallocate();
+} // destructor
+
+// ----------------------------------------------------------------------
+// Deallocate data structures.
+void
+pylith::problems::SolverLumped::deallocate(void)
+{ // deallocate
+  Solver::deallocate();
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Initialize solver.
+void
+pylith::problems::SolverLumped::initialize(
+				   const topology::SolutionFields& fields,
+				   const topology::Field<topology::Mesh>& jacobian,
+				   Formulation* formulation)
+{ // initialize
+  assert(0 != formulation);
+
+  _formulation = formulation;
+} // initialize
+
+// ----------------------------------------------------------------------
+// Solve the system.
+void
+pylith::problems::SolverLumped::solve(
+			      topology::Field<topology::Mesh>* solution,
+			      const topology::Field<topology::Mesh>& jacobian,
+			      const topology::Field<topology::Mesh>& residual)
+{ // solve
+  assert(0 != solution);
+  assert(0 != _formulation);
+  
+  // solution = residual / jacobian
+  
+  const spatialdata::geocoords::CoordSys* cs = solution->mesh().coordsys();
+  assert(0 != cs);
+  const int spaceDim = cs->spaceDim();
+  
+  // Get mesh vertices.
+  const ALE::Obj<SieveMesh>& sieveMesh = solution->mesh().sieveMesh();
+  assert(!sieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const SieveMesh::label_sequence::iterator verticesBegin = 
+    vertices->begin();
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+  
+  // Get sections.
+  double_array solutionVertex(spaceDim);
+  const ALE::Obj<RealSection>& solutionSection = solution->section();
+  assert(!solutionSection.isNull());
+	 
+  double_array jacobianVertex(spaceDim);
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  assert(!jacobianSection.isNull());
+
+  double_array residualVertex(spaceDim);
+  const ALE::Obj<RealSection>& residualSection = residual.section();
+  assert(!residualSection.isNull());
+  
+  for (SieveMesh::label_sequence::iterator v_iter=verticesBegin; 
+       v_iter != verticesEnd;
+       ++v_iter) {
+    jacobianSection->restrictPoint(*v_iter, &jacobianVertex[0],
+				   jacobianVertex.size());
+    residualSection->restrictPoint(*v_iter, &residualVertex[0],
+				   residualVertex.size());
+    solutionVertex = residualVertex / jacobianVertex;
+    
+    assert(solutionSection->getFiberDimension(*v_iter) == spaceDim);
+    solutionSection->updatePoint(*v_iter, &solutionVertex[0]);
+  } // for
+
+  // Adjust solution to match constraints
+  _formulation->adjustSolnLumped();
+
+  PetscLogFlops(vertices->size());
+} // solve
+
+
+// End of file

Copied: short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/libsrc/problems/SolverLumped.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,79 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file libsrc/problems/SolverLumped.hh
+ *
+ * @brief Object for using PETSc scalable linear equation solvers (KSP).
+ */
+
+#if !defined(pylith_problems_solverlumped_hh)
+#define pylith_problems_solverlumped_hh
+
+// Include directives ---------------------------------------------------
+#include "Solver.hh" // ISA Solver
+
+#include "pylith/utils/petscfwd.h" // HASA PetscKSP
+
+// SolverLumped ---------------------------------------------------------
+/** @brief Object for using simple solver to solver system with lumped Jacobian.
+ */
+
+class pylith::problems::SolverLumped : Solver
+{ // SolverLumped
+  friend class TestSolverLumped; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  SolverLumped(void);
+
+  /// Destructor
+  ~SolverLumped(void);
+
+  /// Deallocate PETSc and local data structures.
+  void deallocate(void);
+  
+  /** Initialize solver.
+   *
+   * @param fields Solution fields.
+   * @param jacobian Jacobian of system.
+   * @param formulation Formulation of system of equations.
+   */
+  void
+  initialize(const topology::SolutionFields& fields,
+	     const topology::Field<topology::Mesh>& jacobian,
+	     Formulation* const formulation);
+
+  /** Solve the system.
+   *
+   * @param solution Solution field.
+   * @param jacobian Jacobian of the system.
+   * @param residual Residual field.
+   */
+  void solve(topology::Field<topology::Mesh>* solution,
+	     const topology::Field<topology::Mesh>& jacobian,
+	     const topology::Field<topology::Mesh>& residual);
+
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  SolverLumped(const SolverLumped&); ///< Not implemented
+  const SolverLumped& operator=(const SolverLumped&); ///< Not implemented
+
+}; // SolverLumped
+
+#endif // pylith_problems_solverlumped_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -22,6 +22,11 @@
 
 #include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
 
+#include <cmath>
+#define isnan std::isnan // TEMPORARY
+#define isinf std::isinf // TEMPORARY
+#include "../src/snes/impls/ls/ls.h"
+
 // ----------------------------------------------------------------------
 // Constructor
 pylith::problems::SolverNonlinear::SolverNonlinear(void) :
@@ -80,6 +85,8 @@
   CHECK_PETSC_ERROR(err);
 
   err = SNESSetFromOptions(_snes); CHECK_PETSC_ERROR(err);
+  err = SNESLineSearchSet(_snes, lineSearch, 
+			  (void*) formulation); CHECK_PETSC_ERROR(err);
 } // initialize
 
 // ----------------------------------------------------------------------
@@ -140,5 +147,249 @@
   return 0;
 } // reformJacobian
 
+// ----------------------------------------------------------------------
+// Generic C interface for customized PETSc line search.
+PetscErrorCode
+pylith::problems::SolverNonlinear::lineSearch(PetscSNES snes,
+					      void *lsctx,
+					      PetscVec x,
+					      PetscVec f,
+					      PetscVec g,
+					      PetscVec y,
+					      PetscVec w,
+					      PetscReal fnorm,
+					      PetscReal xnorm,
+					      PetscReal *ynorm,
+					      PetscReal *gnorm,
+					      PetscTruth *flag)
+{ // lineSearch
+  // Note that for line search purposes we work with with the related
+  // minimization problem:
+  // min  z(x):  R^n -> R,
+  // where z(x) = .5 * fnorm*fnorm, and fnorm = || f ||_2.
+        
+  PetscReal      initslope,lambdaprev,gnormprev,a,b,d,t1,t2,rellength;
+  PetscReal      minlambda,lambda,lambdatemp;
+#if defined(PETSC_USE_COMPLEX)
+  PetscScalar    cinitslope;
+#endif
+  PetscErrorCode ierr;
+  PetscInt       count;
+  SNES_LS        *neP = (SNES_LS*)snes->data;
+  PetscTruth     changed_w = PETSC_FALSE,changed_y = PETSC_FALSE;
 
+  PetscFunctionBegin;
+  ierr = PetscLogEventBegin(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
+  *flag   = PETSC_TRUE;
+
+  ierr = VecNorm(y,NORM_2,ynorm);CHKERRQ(ierr);
+  if (!*ynorm) {
+    ierr = PetscInfo(snes,"Search direction and size is 0\n");CHKERRQ(ierr);
+    *gnorm = fnorm;
+    ierr   = VecCopy(x,w);CHKERRQ(ierr);
+    ierr   = VecCopy(f,g);CHKERRQ(ierr);
+    *flag  = PETSC_FALSE;
+    goto theend1;
+  }
+  if (*ynorm > neP->maxstep) {	/* Step too big, so scale back */
+    ierr = PetscInfo2(snes,"Scaling step by %G old ynorm %G\n",
+		      neP->maxstep/(*ynorm),*ynorm);CHKERRQ(ierr);
+    ierr = VecScale(y,neP->maxstep/(*ynorm));CHKERRQ(ierr);
+    *ynorm = neP->maxstep;
+  }
+  ierr      = VecMaxPointwiseDivide(y,x,&rellength);CHKERRQ(ierr);
+  minlambda = neP->minlambda/rellength;
+  ierr      = MatMult(snes->jacobian,y,w);CHKERRQ(ierr);
+#if defined(PETSC_USE_COMPLEX)
+  ierr      = VecDot(f,w,&cinitslope);CHKERRQ(ierr);
+  initslope = PetscRealPart(cinitslope);
+#else
+  ierr      = VecDot(f,w,&initslope);CHKERRQ(ierr);
+#endif
+  if (initslope > 0.0)  initslope = -initslope;
+  if (initslope == 0.0) initslope = -1.0;
+
+  ierr = VecWAXPY(w,-1.0,y,x);CHKERRQ(ierr);
+  if (snes->nfuncs >= snes->max_funcs) {
+    ierr  = PetscInfo(snes,"Exceeded maximum function evaluations, "
+		      "while checking full step length!\n");CHKERRQ(ierr);
+    *flag = PETSC_FALSE;
+    snes->reason = SNES_DIVERGED_FUNCTION_COUNT;
+    goto theend1;
+  } // if
+  // TEMPORARY: update w?
+
+  ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
+  if (snes->domainerror) {
+    ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
+    PetscFunctionReturn(0);
+  }
+  ierr = VecNorm(g,NORM_2,gnorm);CHKERRQ(ierr);
+  if (PetscIsInfOrNanReal(*gnorm))
+    SETERRQ(PETSC_ERR_FP, "User provided compute function generated a "
+	    "Not-a-Number");
+  ierr = PetscInfo2(snes,"Initial fnorm %G gnorm %G\n",fnorm,*gnorm);CHKERRQ(ierr);
+  if (.5*(*gnorm)*(*gnorm) <= .5*fnorm*fnorm + neP->alpha*initslope) {
+    // Sufficient reduction
+    ierr = PetscInfo2(snes,"Using full step: fnorm %G gnorm %G\n",
+		      fnorm,*gnorm);CHKERRQ(ierr);
+    goto theend1;
+  } // if
+
+  // Fit points with quadratic
+  lambda     = 1.0;
+  lambdatemp = -initslope/((*gnorm)*(*gnorm) - fnorm*fnorm - 2.0*initslope);
+  lambdaprev = lambda;
+  gnormprev  = *gnorm;
+  if (lambdatemp > .5*lambda)
+    lambdatemp = .5*lambda;
+  if (lambdatemp <= .1*lambda)
+    lambda = .1*lambda; 
+  else
+    lambda = lambdatemp;
+
+  ierr  = VecWAXPY(w,-lambda,y,x);CHKERRQ(ierr);
+  if (snes->nfuncs >= snes->max_funcs) {
+    ierr  = PetscInfo1(snes,"Exceeded maximum function evaluations, while attempting quadratic backtracking! %D \n",snes->nfuncs);CHKERRQ(ierr);
+    *flag = PETSC_FALSE;
+    snes->reason = SNES_DIVERGED_FUNCTION_COUNT;
+    goto theend1;
+  } // if
+  // TEMPORARY: update w?
+
+  ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
+  if (snes->domainerror) {
+    ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
+    PetscFunctionReturn(0);
+  } // if
+  ierr = VecNorm(g,NORM_2,gnorm);CHKERRQ(ierr);
+  if PetscIsInfOrNanReal(*gnorm) SETERRQ(PETSC_ERR_FP,"User provided compute function generated a Not-a-Number");
+  ierr = PetscInfo1(snes,"gnorm after quadratic fit %G\n",*gnorm);CHKERRQ(ierr);
+  if (.5*(*gnorm)*(*gnorm) < .5*fnorm*fnorm + lambda*neP->alpha*initslope) { /* sufficient reduction */
+    ierr = PetscInfo1(snes,"Quadratically determined step, lambda=%18.16e\n",lambda);CHKERRQ(ierr);
+    goto theend1;
+  } // if
+
+  // Fit points with cubic
+  count = 1;
+  while (PETSC_TRUE) {
+    if (lambda <= minlambda) { 
+      ierr = PetscInfo1(snes,"Unable to find good step length! After %D "
+			"tries \n",count);CHKERRQ(ierr);
+      ierr = PetscInfo6(snes,"fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, "
+			"minlambda=%18.16e, lambda=%18.16e, "
+			"initial slope=%18.16e\n",
+			fnorm,*gnorm,*ynorm,minlambda,lambda,initslope);
+      CHKERRQ(ierr);
+      *flag = PETSC_FALSE; 
+      break;
+    }
+    t1 = .5*((*gnorm)*(*gnorm) - fnorm*fnorm) - lambda*initslope;
+    t2 = .5*(gnormprev*gnormprev  - fnorm*fnorm) - lambdaprev*initslope;
+    a  = (t1/(lambda*lambda) - t2/(lambdaprev*lambdaprev))/(lambda-lambdaprev);
+    b  = (-lambdaprev*t1/(lambda*lambda) + 
+	  lambda*t2/(lambdaprev*lambdaprev))/(lambda-lambdaprev);
+    d  = b*b - 3*a*initslope;
+    if (d < 0.0) d = 0.0;
+    if (a == 0.0) {
+      lambdatemp = -initslope/(2.0*b);
+    } else {
+      lambdatemp = (-b + sqrt(d))/(3.0*a);
+    } // if/else
+    lambdaprev = lambda;
+    gnormprev  = *gnorm;
+    if (lambdatemp > .5*lambda)
+      lambdatemp = .5*lambda;
+    if (lambdatemp <= .1*lambda)
+      lambda = .1*lambda;
+    else
+      lambda = lambdatemp;
+    ierr  = VecWAXPY(w,-lambda,y,x);CHKERRQ(ierr);
+    if (snes->nfuncs >= snes->max_funcs) {
+      ierr = PetscInfo1(snes,"Exceeded maximum function evaluations, "
+			"while looking for good step length! %D \n",count);
+      CHKERRQ(ierr);
+      ierr = PetscInfo5(snes,"fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, "
+			"lambda=%18.16e, initial slope=%18.16e\n",
+			fnorm,*gnorm,*ynorm,lambda,initslope);CHKERRQ(ierr);
+      *flag = PETSC_FALSE;
+      snes->reason = SNES_DIVERGED_FUNCTION_COUNT;
+      break;
+    } // if
+    // TEMPORARY: update w?
+
+    ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
+    if (snes->domainerror) {
+      ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
+      PetscFunctionReturn(0);
+    } // if
+    ierr = VecNorm(g,NORM_2,gnorm);CHKERRQ(ierr);
+    if (PetscIsInfOrNanReal(*gnorm))
+      SETERRQ(PETSC_ERR_FP,"User provided compute function generated a "
+	      "Not-a-Number");
+    if (.5*(*gnorm)*(*gnorm) < .5*fnorm*fnorm + lambda*neP->alpha*initslope) {
+      // is reduction enough?
+      ierr = PetscInfo2(snes,"Cubically determined step, current gnorm %G "
+			"lambda=%18.16e\n",*gnorm,lambda);CHKERRQ(ierr);
+      break;
+    } else {
+      ierr = PetscInfo2(snes,"Cubic step no good, shrinking lambda, "
+			"current gnorem %G lambda=%18.16e\n",
+			*gnorm,lambda);CHKERRQ(ierr);
+    } // if/else
+    count++;
+  } // while
+
+  theend1:
+  /* Optional user-defined check for line search step validity */
+  if (neP->postcheckstep && *flag) {
+    ierr = (*neP->postcheckstep)(snes,x,y,w,neP->postcheck,&changed_y,
+				 &changed_w);CHKERRQ(ierr);
+    if (changed_y)
+      ierr = VecWAXPY(w,-1.0,y,x);CHKERRQ(ierr);
+    // TEMPORARY: update w?
+
+    if (changed_y || changed_w) {
+      // recompute the function if the step has changed 
+      ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
+      if (snes->domainerror) {
+        ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
+        PetscFunctionReturn(0);
+      }
+      ierr = VecNormBegin(g,NORM_2,gnorm);CHKERRQ(ierr);
+      if (PetscIsInfOrNanReal(*gnorm))
+	SETERRQ(PETSC_ERR_FP, "User provided compute function generated a "
+		"Not-a-Number");
+      ierr = VecNormBegin(y,NORM_2,ynorm);CHKERRQ(ierr);
+      ierr = VecNormEnd(g,NORM_2,gnorm);CHKERRQ(ierr);
+      ierr = VecNormEnd(y,NORM_2,ynorm);CHKERRQ(ierr);
+    } // if
+  } // if
+  ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
+
+  // ======================================================================
+  // Code to constrain solution space.
+  assert(0 != lsctx);
+  Formulation* formulation = (Formulation*) lsctx;
+  assert(0 != formulation);
+  formulation->constrainSolnSpace(&w);
+
+  ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
+  if (snes->domainerror) {
+    ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
+    PetscFunctionReturn(0);
+  }
+  ierr = VecNormBegin(g,NORM_2,gnorm);CHKERRQ(ierr);
+  if (PetscIsInfOrNanReal(*gnorm))
+    SETERRQ(PETSC_ERR_FP, "User provided compute function generated a "
+	    "Not-a-Number");
+  ierr = VecNormBegin(y,NORM_2,ynorm);CHKERRQ(ierr);
+  ierr = VecNormEnd(g,NORM_2,gnorm);CHKERRQ(ierr);
+  ierr = VecNormEnd(y,NORM_2,ynorm);CHKERRQ(ierr);
+  // ======================================================================
+
+  PetscFunctionReturn(0);
+} // lineSearch
+
+
 // End of file

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -15,9 +15,6 @@
  *
  * @brief Object for using PETSc scalable nonlinear equation solvers
  * (SNES).
- *
- * The PETSc nonlinear solvers provide an interface to Newton-based
- * methods for solving nonlinear equations.
  */
 
 #if !defined(pylith_problems_solvernonlinear_hh)
@@ -30,6 +27,12 @@
 #include <petscmat.h> // USES MatStructure
 
 // SolverNonlinear ---------------------------------------------------------
+/** @brief Object for using PETSc scalable nonlinear equation solvers
+ * (SNES).
+ *
+ * The PETSc nonlinear solvers provide an interface to Newton-based
+ * methods for solving nonlinear equations.
+ */
 class pylith::problems::SolverNonlinear : public Solver
 { // SolverNonlinear
   friend class TestSolverNonlinear; // unit testing
@@ -101,6 +104,37 @@
 				MatStructure* preconditionerLayout,
 				void* context);
 
+  /** Generic C interface for customized PETSc line search.
+   *
+   * @param snes PETSc SNES solver.
+   * @param lsctx Optional context for line search (not used here).
+   * @param x Current iterate.
+   * @param f Residual evaluated at x.
+   * @param y Search direction.
+   * @param w Work vector
+   * @param f 2-norm of f.
+   * @param xnorm Norm of x if known, otherwise 0.
+   * @param g Residual evaluated at new iterate y.
+   * @param w New iterate.
+   * @param gnorm 2-norm of g.
+   * @param ynorm 2-norm of search length.
+   * @param PETSC_TRUE if line search succeeds; PETSC_FALSE on failure.
+   * @returns PETSc error code.
+   */
+  static
+  PetscErrorCode lineSearch(PetscSNES snes,
+			    void *lsctx,
+			    PetscVec x,
+			    PetscVec f,
+			    PetscVec g,
+			    PetscVec y,
+			    PetscVec w,
+			    PetscReal fnorm,
+			    PetscReal xnorm,
+			    PetscReal *ynorm,
+			    PetscReal *gnorm,
+			    PetscTruth *flag);
+
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/libsrc/problems/problemsfwd.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/problemsfwd.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/problems/problemsfwd.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -29,6 +29,7 @@
     class Solver;
     class SolverLinear;
     class SolverNonlinear;
+    class SolverLumped;
 
   } // problems
 } // pylith


Property changes on: short/3D/PyLith/trunk/libsrc/topology
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/topology/Distributor.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Distributor.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/Distributor.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/topology/Distributor.hh
+ * @file libsrc/topology/Distributor.hh
  *
  * @brief Object for managing distribution of mesh among processors.
  */
@@ -25,6 +25,7 @@
 #include "pylith/meshio/meshiofwd.hh" // USES DataWriter<Mesh>
 
 // Distributor ----------------------------------------------------------
+/// Distribute mesh among processors.
 class pylith::topology::Distributor
 { // Distributor
   friend class TestDistributor; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/topology/Field.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Field.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/Field.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -15,8 +15,6 @@
  *
  * @brief Vector field over the vertices or cells of a finite-element
  * mesh.
- *
- * Extends Sieve real general section by adding metadata.
  */
 
 #if !defined(pylith_topology_field_hh)
@@ -31,6 +29,11 @@
 #include <petscmesh.hh>
 
 // Field ----------------------------------------------------------------
+/** @brief Vector field over the vertices or cells of a finite-element
+ * mesh.
+ *
+ * Extends Sieve real general section by adding metadata.
+ */
 template<typename mesh_type>
 class pylith::topology::Field : public FieldBase
 { // Field

Modified: short/3D/PyLith/trunk/libsrc/topology/FieldBase.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/FieldBase.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/FieldBase.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -24,6 +24,9 @@
 #include "topologyfwd.hh" // forward declarations
 
 // FieldBase ------------------------------------------------------------
+/** @brief Basic information related to a vector field over the
+ * vertices or cells of a finite-element mesh.
+ */
 class pylith::topology::FieldBase
 { // Field
 

Modified: short/3D/PyLith/trunk/libsrc/topology/Fields.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Fields.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/Fields.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -13,7 +13,8 @@
 /**
  * @file libsrc/topology/Fields.hh
  *
- * @brief Object for managing fields over a finite-element mesh.
+ * @brief Container for managing multiple fields over a finite-element
+ * mesh.
  */
 
 #if !defined(pylith_topology_fields_hh)
@@ -27,6 +28,7 @@
 #include <string> // USES std::string
 
 // Fields ---------------------------------------------------------------
+/// Container for managing multiple fields over a finite-element mesh.
 template<typename field_type>
 class pylith::topology::Fields
 { // Fields
@@ -60,7 +62,7 @@
   /** Add field.
    *
    * @param name Name of field.
-   * @param label Label for field.
+   * @param label Label for field (used in output).
    */
   void add(const char* name,
 	   const char* label);

Modified: short/3D/PyLith/trunk/libsrc/topology/Jacobian.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Jacobian.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/Jacobian.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -25,6 +25,7 @@
 #include "pylith/utils/petscfwd.h" // HOLDSA PetscMat
 
 // Jacobian -------------------------------------------------------------
+/// Jacobian of the system as a PETSc sparse matrix.
 class pylith::topology::Jacobian
 { // Jacobian
   friend class TestJacobian; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/topology/Mesh.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Mesh.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/Mesh.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -153,16 +153,25 @@
 int
 pylith::topology::Mesh::groupSize(const char *name)
 { // groupSize
+  if (!_mesh->hasIntSection(name)) {
+    std::ostringstream msg;
+    msg << "Cannot get size of group '" << name
+	<< "'. Group missing from mesh.";
+    throw std::runtime_error(msg.str());
+  } // if
+
   const ALE::Obj<IntSection>&            group    = _mesh->getIntSection(name);
   const IntSection::chart_type&          chart    = group->getChart();
   IntSection::chart_type::const_iterator chartEnd = chart.end();
   int                                    size     = 0;
 
-  for(IntSection::chart_type::const_iterator c_iter = chart.begin(); c_iter != chartEnd; ++c_iter) {
-    if (group->getFiberDimension(*c_iter)) {
+  for(IntSection::chart_type::const_iterator c_iter = chart.begin();
+      c_iter != chartEnd;
+      ++c_iter) {
+    if (group->getFiberDimension(*c_iter))
       size++;
-    }
-  }
+  } // for
+
   return size;
 } // groupSize
 

Modified: short/3D/PyLith/trunk/libsrc/topology/Mesh.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Mesh.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/Mesh.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,9 +14,6 @@
  * @file libsrc/topology/Mesh.hh
  *
  * @brief C++ PyLith finite-element mesh.
- *
- * Extends Sieve mesh to include coordinate system associated with
- * domain.
  */
 
 #if !defined(pylith_topology_mesh_hh)
@@ -30,6 +27,11 @@
 #include <petscmesh.hh> // HASA ALE::IMesh
 
 // Mesh -----------------------------------------------------------------
+/** @brief PyLith finite-element mesh.
+ *
+ * Extends Sieve mesh to include coordinate system associated with
+ * domain.
+ */
 class pylith::topology::Mesh
 { // Mesh
   friend class TestMesh; // unit testing
@@ -37,22 +39,26 @@
 // PUBLIC TYPEDEFS //////////////////////////////////////////////////////
 public :
 
-  // Typedefs for basic types associated with Sieve mesh.
-  // All other PyLith mesh and submesh objects should define:
-  //   (1) SieveMesh - Sieve mesh
-  //   (2) RealSection - Section of doubles
-  //   (3) IntSection - Section of ints
-  // because these are used in templated code.
-  // 
-  // All other mesh objects for the domain should also define
-  //   (1) SieveSubMesh - SubMesh object
+  /** Typedefs for basic types associated with Sieve mesh.
+   * All other PyLith mesh and submesh objects should define:
+   *   (1) SieveMesh - Sieve mesh
+   *   (2) RealSection - Section of doubles
+   *   (3) IntSection - Section of ints
+   * because these are used in templated code.
+   * 
+   * All other mesh objects for the domain should also define
+   *   (1) SieveSubMesh - SubMesh object
+   */
+  //@{
   typedef ALE::IMesh<> SieveMesh;
   typedef SieveMesh::real_section_type RealSection;
   typedef SieveMesh::int_section_type IntSection;
   typedef ALE::IMesh<ALE::LabelSifter<int, SieveMesh::point_type> > SieveSubMesh;
   typedef ALE::ISieveVisitor::RestrictVisitor<RealSection> RestrictVisitor;
   typedef ALE::ISieveVisitor::UpdateAddVisitor<RealSection> UpdateAddVisitor;
+  typedef ALE::ISieveVisitor::UpdateAllVisitor<RealSection> UpdateAllVisitor;
   typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PetscInt> IndicesVisitor;
+  //@}
 
 
 // PUBLIC METHODS ///////////////////////////////////////////////////////

Modified: short/3D/PyLith/trunk/libsrc/topology/MeshOps.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/MeshOps.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/MeshOps.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/topology/MeshOps.hh
+ * @file libsrc/topology/MeshOps.hh
  *
  * @brief Simple operations on a Mesh object.
  */
@@ -23,6 +23,7 @@
 #include "topologyfwd.hh" // forward declarations
 
 // MeshOps --------------------------------------------------------------
+/// Simple operations on a Mesh object.
 class pylith::topology::MeshOps
 { // MeshOps
   friend class TestMeshOps; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/topology/RefineUniform.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/RefineUniform.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/RefineUniform.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/topology/RefineUniform.hh
+ * @file libsrc/topology/RefineUniform.hh
  *
  * @brief Object for managing uniform global mesh refinement.
  */
@@ -23,6 +23,7 @@
 #include "topologyfwd.hh" // forward declarations
 
 // RefineUniform --------------------------------------------------------
+/// Object for managing uniform global mesh refinement.
 class pylith::topology::RefineUniform
 { // RefineUniform
   friend class TestRefineUniform; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/topology/SolutionFields.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/SolutionFields.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/SolutionFields.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -30,6 +30,9 @@
 #include "Fields.hh" // ISA Fields< Field<Mesh> >
 
 // SolutionFields -------------------------------------------------------
+/** @brief Object for managing solution fields over a finite-element
+ * mesh.
+ */
 class pylith::topology::SolutionFields : public Fields<Field<Mesh> >
 { // SolutionFields
   friend class TestSolutionFields; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/topology/SubMesh.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/SubMesh.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/SubMesh.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -62,12 +62,14 @@
   const ALE::Obj<DomainSieveMesh>& meshSieveMesh = mesh.sieveMesh();
   assert(!meshSieveMesh.isNull());
 
-  const ALE::Obj<IntSection>& groupField = meshSieveMesh->getIntSection(label);
-  if (groupField.isNull()) {
+  if (!meshSieveMesh->hasIntSection(label)) {
     std::ostringstream msg;
     msg << "Could not find group of points '" << label << "' in mesh.";
     throw std::runtime_error(msg.str());
   } // if
+
+  const ALE::Obj<IntSection>& groupField = meshSieveMesh->getIntSection(label);
+  assert(!groupField.isNull());
   _mesh = 
     ALE::Selection<DomainSieveMesh>::submeshV<SieveMesh>(meshSieveMesh,
 							 groupField);

Modified: short/3D/PyLith/trunk/libsrc/topology/SubMesh.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/SubMesh.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/topology/SubMesh.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,9 +14,6 @@
  * @file libsrc/topology/SubMesh.hh
  *
  * @brief C++ PyLith finite-element mesh.
- *
- * Extends Sieve mesh over subset of domain to include coordinate
- * system associated with domain.
  */
 
 #if !defined(pylith_topology_submesh_hh)
@@ -29,6 +26,12 @@
 #include "Mesh.hh" // USES Mesh
 
 // SubMesh -----------------------------------------------------------------
+/** @brief C++ PyLith finite-element mesh.
+ *
+ * Extends Sieve mesh over subset of domain to include coordinate
+ * system associated with domain. Also has functions to simply
+ * creating submeshes from groups of vertices.
+ */
 class pylith::topology::SubMesh
 { // SubMesh
   friend class TestSubMesh; // unit testing


Property changes on: short/3D/PyLith/trunk/libsrc/utils
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/libsrc/utils/EventLogger.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/EventLogger.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/EventLogger.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/EventLogger.hh
+ * @file libsrc/utils/EventLogger.hh
  *
  * @brief C++ object for managing event logging using PETSc.
  *
@@ -31,6 +31,10 @@
 #include "petsclog.h" // USES PetscLogEventBegin/End() in inline methods
 
 // EventLogger ----------------------------------------------------------
+/** @brief C++ object for managing event logging using PETSc.
+ *
+ * Each logger object manages the events for a single "logging class".
+ */
 class pylith::utils::EventLogger
 { // EventLogger
   friend class TestEventLogger; // unit testing

Modified: short/3D/PyLith/trunk/libsrc/utils/TestArray.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/TestArray.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/TestArray.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,15 +11,9 @@
 //
 
 /**
- * @file pylith/utils/TestArray.hh
+ * @file libsrc/utils/TestArray.hh
  *
  * @brief C++ object for testing array values.
- *
- * This object is used in unit testing of SWIG interfaces where the
- * C++ object has an accessor returning a std::valarray. The TestArray
- * methods provide the ability to compare the array returned by the
- * accessor against the expected values, which are supplied via a
- * pointer and a size (number of values).
  */
 
 #if !defined(pylith_utils_testarray_hh)
@@ -31,6 +25,14 @@
 #include "arrayfwd.hh" // USES double_array
 
 // TestArray ------------------------------------------------------------
+/** @brief C++ object for testing array values.
+ *
+ * This object is used in unit testing of SWIG interfaces where the
+ * C++ object has an accessor returning a std::valarray. The TestArray
+ * methods provide the ability to compare the array returned by the
+ * accessor against the expected values, which are supplied via a
+ * pointer and a size (number of values).
+ */
 class pylith::utils::TestArray
 { // TestArray
 

Modified: short/3D/PyLith/trunk/libsrc/utils/array.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/array.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/array.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/array.hh
+ * @file libsrc/utils/array.hh
  *
  * @brief Header file for PyLith array objects.
  *

Modified: short/3D/PyLith/trunk/libsrc/utils/arrayfwd.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/arrayfwd.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/arrayfwd.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/arrayfwd.hh
+ * @file libsrc/utils/arrayfwd.hh
  *
  * @brief Forward declarations for PyLith array objects.
  *

Modified: short/3D/PyLith/trunk/libsrc/utils/constdefs.h
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/constdefs.h	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/constdefs.h	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/macrodefs.hh
+ * @file libsrc/utils/constdefs.h
  *
  * @brief Macro definitions for PyLith.
  */

Modified: short/3D/PyLith/trunk/libsrc/utils/lapack.h
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/lapack.h	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/lapack.h	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/lapack.h
+ * @file libsrc/utils/lapack.h
  *
  * @brief Declarations for LAPACK routines that we use. We rely on
  * PETSc's interface to these routines.

Modified: short/3D/PyLith/trunk/libsrc/utils/macrodefs.h
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/macrodefs.h	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/macrodefs.h	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/macrodefs.hh
+ * @file libsrc/utils/macrodefs.h
  *
  * @brief Macro definitions for PyLith.
  */

Modified: short/3D/PyLith/trunk/libsrc/utils/petscerror.h
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/petscerror.h	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/petscerror.h	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/petscerror.h
+ * @file libsrc/utils/petscerror.h
  *
  * @brief Wrappers around PETSc error handling routines.
  */

Modified: short/3D/PyLith/trunk/libsrc/utils/petscfwd.h
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/petscfwd.h	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/petscfwd.h	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/petscfwd.h
+ * @file libsrc/utils/petscfwd.h
  *
  * @brief Forward declarations for Petsc objects.
  */

Modified: short/3D/PyLith/trunk/libsrc/utils/sievefwd.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/sievefwd.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/sievefwd.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/sievefwd.hh
+ * @file libsrc/utils/sievefwd.hh
  *
  * @brief Forward declarations for PETSc Sieve objects.
  */

Modified: short/3D/PyLith/trunk/libsrc/utils/sievetypes.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/utils/sievetypes.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/libsrc/utils/sievetypes.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 /**
- * @file pylith/utils/sievetypes.hh
+ * @file libsrc/utils/sievetypes.hh
  *
  * @brief Aliases for Sieve types.
  */
@@ -23,7 +23,10 @@
 
 namespace pylith {
 
+  /// Sieve mesh.
   typedef ALE::IMesh<> Mesh;
+
+  /// Sieve submesh.
   typedef ALE::IMesh<ALE::LabelSifter<int, Mesh::point_type> > SubMesh;
 
 } // pylith

Modified: short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDyn.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDyn.i	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDyn.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -34,6 +34,12 @@
       /// Deallocate PETSc and local data structures.
       virtual
       void deallocate(void);
+
+      /** Sets the spatial database for the inital tractions
+       * @param dbs spatial database for initial tractions
+       */
+      void dbInitial(spatialdata::spatialdb::SpatialDB* dbs);
+
   
       /** Initialize fault. Determine orientation and setup boundary
        * condition parameters.

Copied: short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i (from rev 16093, short/3D/PyLith/branches/pylith-friction/modulesrc/faults/FaultCohesiveDynL.i)
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i	                        (rev 0)
+++ short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,165 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file modulesrc/faults/FaultCohesiveDynL.i
+ *
+ * @brief Python interface to C++ FaultCohesiveDynL object.
+ */
+
+namespace pylith {
+  namespace faults {
+
+    class FaultCohesiveDynL : public FaultCohesive
+    { // class FaultCohesiveDynL
+
+      // PUBLIC METHODS /////////////////////////////////////////////////
+    public :
+
+      /// Default constructor.
+      FaultCohesiveDynL(void);
+      
+      /// Destructor.
+      virtual
+      ~FaultCohesiveDynL(void);
+      
+      /// Deallocate PETSc and local data structures.
+      virtual
+      void deallocate(void);
+      
+      /** Sets the spatial database for the inital tractions.
+       *
+       * @param db spatial database for initial tractions
+       */
+      void dbInitial(spatialdata::spatialdb::SpatialDB* db);
+  
+      /** Initialize fault. Determine orientation and setup boundary
+       * condition parameters.
+       *
+       * @param mesh Finite-element mesh.
+       * @param upDir Direction perpendicular to along-strike direction that is 
+       *   not collinear with fault normal (usually "up" direction but could 
+       *   be up-dip direction; only applies to fault surfaces in a 3-D domain).
+       * @param normalDir General preferred direction for fault normal
+       *   (used to pick which of two possible normal directions for
+       *   interface; only applies to fault surfaces in a 3-D domain).
+       */
+      void initialize(const pylith::topology::Mesh& mesh,
+		      const double upDir[3],
+		      const double normalDir[3]);
+      
+      /** Split solution field for separate preconditioning.
+       *
+       * @param field Solution field.
+       */
+      void splitField(pylith::topology::Field<pylith::topology::Mesh>* field);
+
+      /** Integrate contributions to residual term (r) for operator that
+       * require assembly across processors.
+       *
+       * @param residual Field containing values for residual
+       * @param t Current time
+       * @param fields Solution fields
+       */
+      void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+			     const double t,
+			     pylith::topology::SolutionFields* const fields);
+
+      /** Integrate contributions to residual term (r) for operator that
+       * do not require assembly across cells, vertices, or processors.
+       *
+       * @param residual Field containing values for residual
+       * @param t Current time
+       * @param fields Solution fields
+       */
+      void integrateResidualAssembled(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+				      const double t,
+				      pylith::topology::SolutionFields* const fields);
+
+      /** Integrate contributions to Jacobian matrix (A) associated with
+       * operator that do not require assembly across cells, vertices, or
+       * processors.
+       *
+       * @param mat Sparse matrix
+       * @param t Current time
+       * @param fields Solution fields
+       * @param mesh Finite-element mesh
+       */
+      void integrateJacobianAssembled(pylith::topology::Jacobian* jacobian,
+				      const double t,
+				      pylith::topology::SolutionFields* const fields);
+      
+      /** Update state variables as needed.
+       *
+       * @param t Current time
+       * @param fields Solution fields
+       * @param mesh Finite-element mesh
+       */
+      void updateStateVars(const double t,
+			   pylith::topology::SolutionFields* const fields);
+      
+      /** Constrain solution space based on friction.
+       *
+       * @param fields Solution fields.
+       * @param t Current time.
+       * @param jacobian Sparse matrix for system Jacobian.
+       */
+      void constrainSolnSpace(pylith::topology::SolutionFields* const fields,
+			      const double t,
+			      const pylith::topology::Jacobian& jacobian);
+
+      /** Verify configuration is acceptable.
+       *
+       * @param mesh Finite-element mesh
+       */
+      void verifyConfiguration(const pylith::topology::Mesh& mesh) const;
+      
+      /** Get vertex field associated with integrator.
+       *
+       * @param name Name of cell field.
+       * @param fields Solution fields.
+       * @returns Vertex field.
+       */
+      const pylith::topology::Field<pylith::topology::SubMesh>&
+      vertexField(const char* name,
+		  const pylith::topology::SolutionFields* fields =0);
+      
+      /** Get cell field associated with integrator.
+       *
+       * @param name Name of cell field.
+       * @param fields Solution fields.
+       * @returns Cell field.
+       */
+      const pylith::topology::Field<pylith::topology::SubMesh>&
+      cellField(const char* name,
+		const pylith::topology::SolutionFields* fields =0);
+
+      /** Cohesive cells use Lagrange multiplier constraints?
+       *
+       * @returns True if implementation using Lagrange multiplier
+       * constraints, false otherwise.
+       */
+      bool useLagrangeConstraints(void) const;
+
+      /** Get fields associated with fault.
+       *
+       * @returns Fields associated with fault.
+       */
+      const pylith::topology::Fields<pylith::topology::Field<pylith::topology::SubMesh> >*
+      fields(void) const;
+
+    }; // class FaultCohesiveDynL
+
+  } // faults
+} // pylith
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/modulesrc/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/modulesrc/faults/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -28,6 +28,7 @@
 	Fault.i \
 	FaultCohesive.i \
 	FaultCohesiveDyn.i \
+	FaultCohesiveDynL.i \
 	FaultCohesiveKin.i \
 	../topology/SubMesh.i \
 	../feassemble/Quadrature.i \

Copied: short/3D/PyLith/trunk/modulesrc/faults/TimeHistorySlipFn.i (from rev 16093, short/3D/PyLith/branches/pylith-friction/modulesrc/faults/TimeHistorySlipFn.i)
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/TimeHistorySlipFn.i	                        (rev 0)
+++ short/3D/PyLith/trunk/modulesrc/faults/TimeHistorySlipFn.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,106 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file modulesrc/faults/TimeHistorySlipFn.i
+ *
+ * @brief Python interface to C++ Fault object.
+ */
+
+namespace pylith {
+  namespace faults {
+
+    class TimeHistorySlipFn : public SlipTimeFn
+    { // class TimeHistorySlipFn
+
+      // PUBLIC METHODS /////////////////////////////////////////////////
+    public :
+
+      /// Default constructor.
+      TimeHistorySlipFn(void);
+      
+      /// Destructor.
+      ~TimeHistorySlipFn(void);
+      
+      /// Deallocate PETSc and local data structures.
+      virtual
+      void deallocate(void);
+  
+      /** Set spatial database for amplitude of slip time history.
+       *
+       * @param db Spatial database
+       */
+      void dbAmplitude(spatialdata::spatialdb::SpatialDB* const db);
+      
+      /** Set spatial database for slip initiation time.
+       *
+       * @param db Spatial database
+       */
+      void dbSlipTime(spatialdata::spatialdb::SpatialDB* const db);
+      
+      /** Set time history.
+       *
+       * @param th Time history.
+       */
+      void dbTimeHistory(spatialdata::spatialdb::TimeHistory* const th);
+
+      /** Initialize slip time function.
+       *
+       * @param faultMesh Finite-element mesh of fault.
+       * @param cs Coordinate system for mesh
+       * @param normalizer Nondimensionalization of scales.
+       * @param originTime Origin time for earthquake source.
+       */
+      void initialize(const pylith::topology::SubMesh& faultMesh,
+		      const spatialdata::units::Nondimensional& normalizer,
+		      const double originTime =0.0);
+      
+      /** Get slip on fault surface at time t.
+       *
+       * @param slipField Slip field over fault surface.
+       * @param t Time t.
+       *
+       * @returns Slip vector as left-lateral/reverse/normal.
+       */
+      void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
+		const double t);
+  
+      /** Get slip increment on fault surface between time t0 and t1.
+       *
+       * @param slipField Slip field over fault surface.
+       * @param t0 Time t.
+       * @param t1 Time t+dt.
+       * 
+       * @returns Increment in slip vector as left-lateral/reverse/normal.
+       */
+      void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* slipField,
+		    const double t0,
+		    const double t1);
+      
+      /** Get final slip.
+       *
+       * @returns Final slip.
+       */
+      const pylith::topology::Field<pylith::topology::SubMesh>& finalSlip(void);
+      
+      /** Get time when slip begins at each point.
+       *
+       * @returns Time when slip begins.
+       */
+      const pylith::topology::Field<pylith::topology::SubMesh>& slipTime(void);
+
+    }; // class TimeHistorySlipFn
+
+  } // faults
+} // pylith
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/modulesrc/faults/faults.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/faults.i	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/modulesrc/faults/faults.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -20,10 +20,12 @@
 #include "pylith/faults/ConstRateSlipFn.hh"
 #include "pylith/faults/BruneSlipFn.hh"
 #include "pylith/faults/LiuCosSlipFn.hh"
+#include "pylith/faults/TimeHistorySlipFn.hh"
 #include "pylith/faults/EqKinSrc.hh"
 #include "pylith/faults/Fault.hh"
 #include "pylith/faults/FaultCohesive.hh"
 #include "pylith/faults/FaultCohesiveDyn.hh"
+#include "pylith/faults/FaultCohesiveDynL.hh"
 #include "pylith/faults/FaultCohesiveKin.hh"
 
 #include "pylith/topology/SubMesh.hh"
@@ -67,10 +69,12 @@
 %include "ConstRateSlipFn.i"
 %include "BruneSlipFn.i"
 %include "LiuCosSlipFn.i"
+%include "TimeHistorySlipFn.i"
 %include "EqKinSrc.i"
 %include "Fault.i"
 %include "FaultCohesive.i"
 %include "FaultCohesiveDyn.i"
+%include "FaultCohesiveDynL.i"
 %include "FaultCohesiveKin.i"
 
 // End of file


Property changes on: short/3D/PyLith/trunk/modulesrc/feassemble
___________________________________________________________________
Name: svn:ignore
   - Makefile.am
feassemble.py
feassemble_wrap.cxx

   + Makefile.am
feassemble.py
feassemble_wrap.cxx

Makefile.in


Copied: short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityExplicitLgDeform.i (from rev 16093, short/3D/PyLith/branches/pylith-friction/modulesrc/feassemble/ElasticityExplicitLgDeform.i)
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityExplicitLgDeform.i	                        (rev 0)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityExplicitLgDeform.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file modulesrc/feassemble/ElasticityExplicitLgDeform.i
+ *
+ * @brief Python interface to C++ ElasticityExplicitLgDeform object.
+ */
+
+namespace pylith {
+  namespace feassemble {
+
+    class ElasticityExplicitLgDeform : public IntegratorElasticityLgDeform
+    { // ElasticityExplicitLgDeform
+
+      // PUBLIC MEMBERS /////////////////////////////////////////////////
+    public:
+
+      /// Constructor
+      ElasticityExplicitLgDeform(void);
+
+      /// Destructor
+      ~ElasticityExplicitLgDeform(void);
+
+      /// Deallocate PETSc and local data structures.
+      void deallocate(void);
+      
+      /** Set time step for advancing from time t to time t+dt.
+       *
+       * @param dt Time step
+       */
+      void timeStep(const double dt);
+
+      /** Set flag for setting constraints for total field solution or
+       *  incremental field solution.
+       *
+       * @param flag True if using incremental solution, false otherwise.
+       */
+      void useSolnIncr(const bool flag);
+
+      /** Integrate contributions to residual term (r) for operator.
+       *
+       * @param residual Field containing values for residual
+       * @param t Current time
+       * @param fields Solution fields
+       */
+      void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+			     const double t,
+			     pylith::topology::SolutionFields* const fields);
+
+      /** Integrate contributions to Jacobian matrix (A) associated with
+       * operator.
+       *
+       * @param jacobian Sparse matrix for Jacobian of system.
+       * @param t Current time
+       * @param fields Solution fields
+       */
+      void integrateJacobian(pylith::topology::Jacobian* jacobian,
+			     const double t,
+			     pylith::topology::SolutionFields* const fields);
+
+      /** Integrate contributions to Jacobian matrix (A) associated with
+       * operator.
+       *
+       * @param jacobian Diagonal matrix (as field) for Jacobian of system.
+       * @param t Current time
+       * @param fields Solution fields
+       */
+      void integrateJacobian(const pylith::topology::Field<pylith::topology::Mesh>& jacobian,
+			     const double t,
+			     pylith::topology::SolutionFields* const fields);
+
+    }; // ElasticityExplicitLgDeform
+
+  } // feassemble
+} // pylith

Copied: short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityImplicitLgDeform.i (from rev 16093, short/3D/PyLith/branches/pylith-friction/modulesrc/feassemble/ElasticityImplicitLgDeform.i)
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityImplicitLgDeform.i	                        (rev 0)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityImplicitLgDeform.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,93 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file modulesrc/feassemble/ElasticityImplicitLgDeform.i
+ *
+ * @brief Python interface to C++ ElasticityImplicitLgDeform object.
+ */
+
+namespace pylith {
+  namespace feassemble {
+
+    class ElasticityImplicitLgDeform : public IntegratorElasticityLgDeform
+    { // ElasticityImplicitLgDeform
+
+      // PUBLIC MEMBERS /////////////////////////////////////////////////
+    public:
+
+      /// Constructor
+      ElasticityImplicitLgDeform(void);
+
+      /// Destructor
+      ~ElasticityImplicitLgDeform(void);
+
+      /// Deallocate PETSc and local data structures.
+      void deallocate(void);
+  
+      /** Set time step for advancing from time t to time t+dt.
+       *
+       * @param dt Time step
+       */
+      void timeStep(const double dt);
+
+      /** Get stable time step for advancing from time t to time t+dt.
+       *
+       * Default is current time step.
+       *
+       * @param mesh Finite-element mesh.
+       * @returns Time step
+       */
+      double stableTimeStep(const pylith::topology::Mesh& mesh) const;
+
+      /** Set flag for setting constraints for total field solution or
+       *  incremental field solution.
+       *
+       * @param flag True if using incremental solution, false otherwise.
+       */
+      void useSolnIncr(const bool flag);
+
+      /** Integrate residual part of RHS for 3-D finite elements.
+       * Includes gravity and element internal force contribution.
+       *
+       * We assume that the effects of boundary conditions are already
+       * included in the residual (tractions, concentrated nodal forces,
+       * and contributions to internal force vector due to
+       * displacement/velocity BC).  This routine computes the additional
+       * external loads due to body forces plus the
+       * element internal forces for the current stress state.
+       *
+       * @param residual Field containing values for residual
+       * @param t Current time
+       * @param fields Solution fields
+       */
+      void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+			     const double t,
+			     pylith::topology::SolutionFields* const fields);
+      
+      /** Integrate contributions to Jacobian matrix (A) associated with
+       * operator.
+       *
+       * @param jacobian Sparse matrix for Jacobian of system.
+       * @param t Current time
+       * @param fields Solution fields
+       */
+      void integrateJacobian(pylith::topology::Jacobian* jacobian,
+			     const double t,
+			     pylith::topology::SolutionFields* const fields);
+      
+    }; // ElasticityImplicitLgDeform
+
+  } // feassemble
+} // pylith
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticity.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticity.i	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticity.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,9 +10,9 @@
 // ----------------------------------------------------------------------
 //
 
-/** @file modulesrc/feassemble/Integrator.i
+/** @file modulesrc/feassemble/IntegratorElasticity.i
  *
- * @brief Python interface to C++ abstract Integrator object.
+ * @brief Python interface to C++ abstract IntegratorElasticity object.
  */
 
 %template(MeshIntegrator) pylith::feassemble::Integrator<pylith::feassemble::Quadrature<pylith::topology::Mesh> >;

Copied: short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticityLgDeform.i (from rev 16093, short/3D/PyLith/branches/pylith-friction/modulesrc/feassemble/IntegratorElasticityLgDeform.i)
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticityLgDeform.i	                        (rev 0)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/IntegratorElasticityLgDeform.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file modulesrc/feassemble/IntegratorElasticityLgDeform.i
+ *
+ * @brief Python interface to C++ abstract IntegratorElasticityLgDeform object.
+ */
+
+namespace pylith {
+  namespace feassemble {
+
+    class IntegratorElasticityLgDeform : 
+      public pylith::feassemble::IntegratorElasticity
+    { // IntegratorElasticityLgDeform
+
+      // PUBLIC MEMBERS /////////////////////////////////////////////////
+    public :
+      
+      /// Constructor
+      IntegratorElasticityLgDeform(void);
+
+      /// Destructor
+      virtual
+      ~IntegratorElasticityLgDeform(void);
+      
+      /** Determine whether we need to recompute the Jacobian.
+       *
+       * @returns True if Jacobian needs to be recomputed, false otherwise.
+       */
+      bool needNewJacobian(void);
+      
+      /** Update state variables as needed.
+       *
+       * @param t Current time
+       * @param fields Solution fields
+       * @param mesh Finite-element mesh
+       */
+      void updateStateVars(const double t,
+			   pylith::topology::SolutionFields* const fields);
+      
+    }; // IntegratorElasticityLgDeform
+
+  } // feassemble
+} // pylith
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/modulesrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -37,7 +37,10 @@
 	Integrator.i \
 	IntegratorElasticity.i \
 	ElasticityImplicit.i \
-	ElasticityExplicit.i
+	ElasticityExplicit.i \
+	IntegratorElasticityLgDeform.i \
+	ElasticityImplicitLgDeform.i \
+	ElasticityExplicitLgDeform.i
 
 swig_generated = \
 	feassemble_wrap.cxx \

Modified: short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.i	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/modulesrc/feassemble/feassemble.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -35,6 +35,8 @@
 #include "pylith/feassemble/Quadrature.hh"
 #include "pylith/feassemble/ElasticityImplicit.hh"
 #include "pylith/feassemble/ElasticityExplicit.hh"
+#include "pylith/feassemble/ElasticityImplicitLgDeform.hh"
+#include "pylith/feassemble/ElasticityExplicitLgDeform.hh"
 
 %}
 
@@ -79,6 +81,9 @@
 %include "IntegratorElasticity.i"
 %include "ElasticityImplicit.i"
 %include "ElasticityExplicit.i"
+%include "IntegratorElasticityLgDeform.i"
+%include "ElasticityImplicitLgDeform.i"
+%include "ElasticityExplicitLgDeform.i"
 
 // Template instatiation
 %template(MeshQuadrature) pylith::feassemble::Quadrature<pylith::topology::Mesh>;


Property changes on: short/3D/PyLith/trunk/modulesrc/include
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/modulesrc/meshio/DataWriterVTK.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/meshio/DataWriterVTK.i	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/modulesrc/meshio/DataWriterVTK.i	2009-12-10 01:52:12 UTC (rev 16094)
@@ -63,6 +63,12 @@
        */
       void timeConstant(const double value);
       
+	  /** Set precision of floating point values in output.
+   	   *	
+       * @param value Precision for floating point values.
+       */
+  	  void precision(const int value);
+
       /** Prepare file for data at a new time step.
        *
        * @param t Time stamp for new data

Copied: short/3D/PyLith/trunk/playpen/friction (from rev 16093, short/3D/PyLith/branches/pylith-friction/playpen/friction)


Property changes on: short/3D/PyLith/trunk/pylith
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/pylith/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,18 +32,24 @@
 	faults/Fault.py \
 	faults/FaultCohesive.py \
 	faults/FaultCohesiveKin.py \
+	faults/FaultCohesiveDyn.py \
+	faults/FaultCohesiveDynL.py \
 	faults/LiuCosSlipFn.py \
 	faults/SingleRupture.py \
 	faults/SlipTimeFn.py \
 	faults/StepSlipFn.py \
+	faults/TimeHistorySlipFn.py \
 	feassemble/__init__.py \
 	feassemble/Constraint.py \
 	feassemble/ElasticityExplicit.py \
+	feassemble/ElasticityExplicitLgDeform.py \
 	feassemble/ElasticityImplicit.py \
+	feassemble/ElasticityImplicitLgDeform.py \
 	feassemble/FIATLagrange.py \
 	feassemble/FIATSimplex.py \
 	feassemble/Integrator.py \
 	feassemble/IntegratorElasticity.py \
+	feassemble/IntegratorElasticityLgDeform.py \
 	feassemble/ReferenceCell.py \
 	feassemble/Quadrature.py \
 	feassemble/CellGeometry.py \
@@ -79,6 +85,7 @@
 	meshio/OutputManagerSubMesh.py \
 	meshio/OutputSoln.py \
 	meshio/OutputFaultKin.py \
+	meshio/OutputFaultDyn.py \
 	meshio/OutputMatElastic.py \
 	meshio/OutputNeumann.py \
 	meshio/OutputSolnSubset.py \
@@ -101,12 +108,16 @@
 	perf/Jacobian.py \
 	problems/__init__.py \
 	problems/Explicit.py \
+	problems/ExplicitLumped.py \
+	problems/ExplicitLgDeform.py \
 	problems/Formulation.py \
 	problems/Implicit.py \
+	problems/ImplicitLgDeform.py \
 	problems/Problem.py \
 	problems/Solver.py \
 	problems/SolverLinear.py \
 	problems/SolverNonlinear.py \
+	problems/SolverLumped.py \
 	problems/TimeDependent.py \
 	problems/TimeStep.py \
 	problems/TimeStepAdapt.py \

Copied: short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDyn.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/faults/FaultCohesiveDyn.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDyn.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDyn.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,220 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/faults/FaultCohesiveDyn.py
+##
+
+## @brief Python object for a fault surface with dynamic
+## (friction) fault implemented with cohesive elements.
+##
+## Factory: fault
+
+from FaultCohesive import FaultCohesive
+from pylith.feassemble.Integrator import Integrator
+from faults import FaultCohesiveDyn as ModuleFaultCohesiveDyn
+
+from pylith.utils.NullComponent import NullComponent
+
+# FaultCohesiveDyn class
+class FaultCohesiveDyn(FaultCohesive, Integrator, ModuleFaultCohesiveDyn):
+  """
+  Python object for a fault surface with dynamic (friction) fault
+  implemented with cohesive elements.
+
+  Inventory
+
+  @class Inventory
+  Python object for managing FaultCohesiveDyn facilities and properties.
+  
+  \b Properties
+  @li None
+  
+  \b Facilities
+  @li \b db_initial_tractions Spatial database for initial tractions.
+  @li \b output Output manager associated with fault data.
+
+  Factory: fault
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+
+  db = pyre.inventory.facility("db_initial_tractions", family="spatial_database",
+                               factory=NullComponent)
+  db.meta['tip'] = "Spatial database for initial tractions."
+
+  from pylith.meshio.OutputFaultDyn import OutputFaultDyn
+  output = pyre.inventory.facility("output", family="output_manager",
+                                   factory=OutputFaultDyn)
+  output.meta['tip'] = "Output manager associated with fault data."
+  
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="faultcohesivedyn"):
+    """
+    Initialize configuration.
+    """
+    FaultCohesive.__init__(self, name)
+    Integrator.__init__(self)
+    self._loggingPrefix = "CoDy "
+
+    self.availableFields = \
+        {'vertex': \
+           {'info': [],
+            'data': []},
+         'cell': \
+           {'info': ["normal_dir"],
+            'data': ["slip",
+                     "traction"]},
+}
+    return
+
+
+  def preinitialize(self, mesh):
+    """
+    Do pre-initialization setup.
+    """
+    self._info.log("Pre-initializing fault '%s'." % self.label())
+    FaultCohesive.preinitialize(self, mesh)
+    Integrator.preinitialize(self, mesh)
+
+    ModuleFaultCohesiveDyn.quadrature(self, self.faultQuadrature)
+
+    if mesh.dimension() == 2:
+      self.availableFields['cell']['info'] += ["strike_dir"]
+    elif mesh.dimension() == 3:
+      self.availableFields['cell']['info'] += ["strike_dir",
+                                               "dip_dir"]
+
+    if not isinstance(self.inventory.db, NullComponent):
+      self.availableFields['cell']['info'] += ["initial_traction"]
+    return
+  
+
+  def verifyConfiguration(self):
+    """
+    Verify compatibility of configuration.
+    """
+    logEvent = "%sverify" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+
+    FaultCohesive.verifyConfiguration(self)
+    Integrator.verifyConfiguration(self)
+    ModuleFaultCohesiveDyn.verifyConfiguration(self, self.mesh)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def initialize(self, totalTime, numTimeSteps, normalizer):
+    """
+    Initialize cohesive elements.
+    """
+    logEvent = "%sinit" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+    self._info.log("Initializing fault '%s'." % self.label())
+
+    Integrator.initialize(self, totalTime, numTimeSteps, normalizer)
+    
+    FaultCohesive.initialize(self, totalTime, numTimeSteps, normalizer)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def poststep(self, t, dt, totalTime, fields):
+    """
+    Hook for doing stuff after advancing time step.
+    """
+    logEvent = "%spoststep" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+
+    Integrator.poststep(self, t, dt, totalTime, fields)
+    FaultCohesive.poststep(self, t, dt, totalTime, fields)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def getVertexField(self, name, fields=None):
+    """
+    Get vertex field.
+    """
+    if None == fields:
+      field = ModuleFaultCohesiveDyn.vertexField(self, name)
+    else:
+      field = ModuleFaultCohesiveDyn.vertexField(self, name, fields)
+    return field
+
+
+  def getCellField(self, name, fields=None):
+    """
+    Get cell field.
+    """
+    if None == fields:
+      field = ModuleFaultCohesiveDyn.cellField(self, name)
+    else:
+      field = ModuleFaultCohesiveDyn.cellField(self, name, fields)
+    return field
+
+
+  def finalize(self):
+    """
+    Cleanup.
+    """
+    FaultCohesive.finalize(self)
+    Integrator.finalize(self)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Setup members using inventory.
+    """
+    FaultCohesive._configure(self)
+    if not isinstance(self.inventory.db, NullComponent):
+      ModuleFaultCohesiveDyn.dbInitial(self, self.inventory.db)
+    self.output = self.inventory.output
+    return
+
+
+  def _createModuleObj(self):
+    """
+    Create handle to C++ FaultCohesiveDyn.
+    """
+    ModuleFaultCohesiveDyn.__init__(self)
+    return
+    
+  
+  def _modelMemoryUse(self):
+    """
+    Model memory allocation.
+    """
+    self.perfLogger.logFault("Fault", self)
+    #self.perfLogger.logFields("Fault", self.fields())
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def fault():
+  """
+  Factory associated with FaultCohesiveDyn.
+  """
+  return FaultCohesiveDyn()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDynL.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/faults/FaultCohesiveDynL.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDynL.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/faults/FaultCohesiveDynL.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,219 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/faults/FaultCohesiveDynL.py
+##
+
+## @brief Python object for a fault surface with dynamic
+## (friction) fault implemented with cohesive elements.
+##
+## Factory: fault
+
+from FaultCohesive import FaultCohesive
+from pylith.feassemble.Integrator import Integrator
+from faults import FaultCohesiveDynL as ModuleFaultCohesiveDynL
+
+from pylith.utils.NullComponent import NullComponent
+
+# FaultCohesiveDynL class
+class FaultCohesiveDynL(FaultCohesive, Integrator, ModuleFaultCohesiveDynL):
+  """
+  Python object for a fault surface with kinematic (prescribed) slip
+  implemented with cohesive elements.
+
+  Inventory
+
+  @class Inventory
+  Python object for managing FaultCohesiveDynL facilities and properties.
+  
+  \b Properties
+  @li None
+  
+  \b Facilities
+  @li \b db_initial_tractions Spatial database for initial tractions.
+  @li \b output Output manager associated with fault data.
+
+  Factory: fault
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+
+  db = pyre.inventory.facility("db_initial_tractions", family="spatial_database",
+                               factory=NullComponent)
+  db.meta['tip'] = "Spatial database for initial tractions."
+
+  from pylith.meshio.OutputFaultDyn import OutputFaultDyn
+  output = pyre.inventory.facility("output", family="output_manager",
+                                   factory=OutputFaultDyn)
+  output.meta['tip'] = "Output manager associated with fault data."
+  
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="faultcohesivedynl"):
+    """
+    Initialize configuration.
+    """
+    FaultCohesive.__init__(self, name)
+    Integrator.__init__(self)
+    self._loggingPrefix = "CoDy "
+
+    self.availableFields = \
+        {'vertex': \
+           {'info': ["normal_dir"],
+            'data': ["slip",
+                     "traction"]},
+         'cell': \
+           {'info': [],
+            'data': []}}
+    return
+
+
+  def preinitialize(self, mesh):
+    """
+    Do pre-initialization setup.
+    """
+    self._info.log("Pre-initializing fault '%s'." % self.label())
+    FaultCohesive.preinitialize(self, mesh)
+    Integrator.preinitialize(self, mesh)
+
+    ModuleFaultCohesiveDynL.quadrature(self, self.faultQuadrature)
+
+    if mesh.dimension() == 2:
+      self.availableFields['vertex']['info'] += ["strike_dir"]
+    elif mesh.dimension() == 3:
+      self.availableFields['vertex']['info'] += ["strike_dir",
+                                                 "dip_dir"]
+
+    if not isinstance(self.inventory.db, NullComponent):
+      self.availableFields['vertex']['info'] += ["initial_traction"]
+    return
+  
+
+  def verifyConfiguration(self):
+    """
+    Verify compatibility of configuration.
+    """
+    logEvent = "%sverify" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+
+    FaultCohesive.verifyConfiguration(self)
+    Integrator.verifyConfiguration(self)
+    ModuleFaultCohesiveDynL.verifyConfiguration(self, self.mesh)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def initialize(self, totalTime, numTimeSteps, normalizer):
+    """
+    Initialize cohesive elements.
+    """
+    logEvent = "%sinit" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+    self._info.log("Initializing fault '%s'." % self.label())
+
+    Integrator.initialize(self, totalTime, numTimeSteps, normalizer)
+    
+    FaultCohesive.initialize(self, totalTime, numTimeSteps, normalizer)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def poststep(self, t, dt, totalTime, fields):
+    """
+    Hook for doing stuff after advancing time step.
+    """
+    logEvent = "%spoststep" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+
+    Integrator.poststep(self, t, dt, totalTime, fields)
+    FaultCohesive.poststep(self, t, dt, totalTime, fields)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def getVertexField(self, name, fields=None):
+    """
+    Get vertex field.
+    """
+    if None == fields:
+      field = ModuleFaultCohesiveDynL.vertexField(self, name)
+    else:
+      field = ModuleFaultCohesiveDynL.vertexField(self, name, fields)
+    return field
+
+
+  def getCellField(self, name, fields=None):
+    """
+    Get cell field.
+    """
+    if None == fields:
+      field = ModuleFaultCohesiveDynL.cellField(self, name)
+    else:
+      field = ModuleFaultCohesiveDynL.cellField(self, name, fields)
+    return field
+
+
+  def finalize(self):
+    """
+    Cleanup.
+    """
+    FaultCohesive.finalize(self)
+    Integrator.finalize(self)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Setup members using inventory.
+    """
+    FaultCohesive._configure(self)
+    if not isinstance(self.inventory.db, NullComponent):
+      ModuleFaultCohesiveDynL.dbInitial(self, self.inventory.db)
+    self.output = self.inventory.output
+    return
+
+
+  def _createModuleObj(self):
+    """
+    Create handle to C++ FaultCohesiveDynL.
+    """
+    ModuleFaultCohesiveDynL.__init__(self)
+    return
+    
+  
+  def _modelMemoryUse(self):
+    """
+    Model memory allocation.
+    """
+    self.perfLogger.logFault("Fault", self)
+    self.perfLogger.logFields("Fault", self.fields())
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def fault():
+  """
+  Factory associated with FaultCohesiveDynL.
+  """
+  return FaultCohesiveDynL()
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/pylith/faults/LiuCosSlipFn.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/LiuCosSlipFn.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/faults/LiuCosSlipFn.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -10,7 +10,7 @@
 # ----------------------------------------------------------------------
 #
 
-## @file pylith/faults/BruneSlipFn.py
+## @file pylith/faults/LiuCosSlipFn.py
 ##
 ## @brief Sine/cosine slip time function from Liu, Archuleta, and Hartzell,
 ## BSSA, 2006 (doi:10.1785/0120060036) which has a rapid rise and then
@@ -62,13 +62,13 @@
 
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
-  def __init__(self, name="bruneslipfn"):
+  def __init__(self, name="liucosslipfn"):
     """
     Constructor.
     """
     SlipTimeFn.__init__(self, name)
     ModuleLiuCosSlipFn.__init__(self)
-    self._loggingPrefix = "BrSF "
+    self._loggingPrefix = "LCSF "
     return
 
 

Copied: short/3D/PyLith/trunk/pylith/faults/TimeHistorySlipFn.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/faults/TimeHistorySlipFn.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/TimeHistorySlipFn.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/faults/TimeHistorySlipFn.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/faults/TimeHistorySlipFn.py
+##
+## @brief User-defined slip-time function with spatially variable
+## amplitude and start time.
+##
+## Factory: slip_time_fn
+
+from SlipTimeFn import SlipTimeFn
+from faults import TimeHistorySlipFn as ModuleTimeHistorySlipFn
+
+# TimeHistorySlipFn class
+class TimeHistorySlipFn(SlipTimeFn, ModuleTimeHistorySlipFn):
+  """
+  User-defined slip-time function with spatially variable amplitude
+  and start time.
+
+  Inventory
+
+  \b Properties
+  @li None
+  
+  \b Facilities
+  @li \b slip Spatial database of slip amplitude.
+  @li \b slip_time Spatial database of slip initiation time.
+  @li \b time_history Temporal database for slip time history function.
+
+  Factory: slip_time_fn
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+  
+  from spatialdata.spatialdb.SimpleDB import SimpleDB
+  
+  dbSlip = pyre.inventory.facility("slip", family="spatial_database",
+                                   factory=SimpleDB)
+  dbSlip.meta['tip'] = "Spatial database of slip amplitude."
+  
+  dbSlipTime = pyre.inventory.facility("slip_time", family="spatial_database",
+                                       factory=SimpleDB)
+  dbSlipTime.meta['tip'] = "Spatial database of slip initiation time."
+  
+  from spatialdata.spatialdb.TimeHistory import TimeHistory
+  dbTimeHistory = pyre.inventory.facility("time_history",
+                                          family="temporal_database",
+                                          factory=TimeHistory)
+  dbTimeHistory.meta['tip'] = "Spatial database of rise time (t95)."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="timehistoryslipfn"):
+    """
+    Constructor.
+    """
+    SlipTimeFn.__init__(self, name)
+    ModuleTimeHistorySlipFn.__init__(self)
+    self._loggingPrefix = "THSF "
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Setup members using inventory.
+    """
+    SlipTimeFn._configure(self)
+    ModuleTimeHistorySlipFn.dbAmplitude(self, self.inventory.dbSlip)
+    ModuleTimeHistorySlipFn.dbSlipTime(self, self.inventory.dbSlipTime)
+    ModuleTimeHistorySlipFn.dbTimeHistory(self, self.inventory.dbTimeHistory)
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def slip_time_fn():
+  """
+  Factory associated with TimeHistorySlipFn.
+  """
+  return TimeHistorySlipFn()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/feassemble/ElasticityExplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/feassemble/ElasticityExplicitLgDeform.py
+##
+## @brief Python object for explicit time integration of dynamic
+## elasticity equation using finite-elements with large rigidy body
+## motion and small strains.
+##
+## Factory: integrator
+
+from IntegratorElasticityLgDeform import IntegratorElasticityLgDeform
+from feassemble import ElasticityExplicitLgDeform as ModuleElasticityExplicitLgDeform
+
+# ElasticityExplicitLgDeform class
+class ElasticityExplicitLgDeform(IntegratorElasticityLgDeform,
+                                 ModuleElasticityExplicitLgDeform):
+  """
+  Python object for explicit time integration of dynamic elasticity
+  equation using finite-elements with large rigid body motions and
+  small strains.
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="elasticityexplicit"):
+    """
+    Constructor.
+    """
+    IntegratorElasticityLgDeform.__init__(self, name)
+    ModuleElasticityExplicitLgDeform.__init__(self)
+    self._loggingPrefix = "ElEx "
+    return
+
+
+  def initialize(self, totalTime, numTimeSteps, normalizer):
+    """
+    Do initialization.
+    """
+    logEvent = "%sinit" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+
+    IntegratorElasticityLgDeform.initialize(self, totalTime, numTimeSteps, normalizer)
+    ModuleElasticityExplicitLgDeform.initialize(self, self.mesh)
+    self._initializeOutput(totalTime, numTimeSteps, normalizer)
+    
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def integrator():
+  """
+  Factory associated with ElasticityExplicitLgDeform.
+  """
+  return ElasticityExplicitLgDeform()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/feassemble/ElasticityImplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/feassemble/ElasticityImplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/feassemble/ElasticityImplicitLgDeform.py
+##
+## @brief Python object for implicit time integration of dynamic
+## elasticity equation using finite-elements.
+##
+## Factory: integrator
+
+from IntegratorElasticityLgDeform import IntegratorElasticityLgDeform
+from feassemble import ElasticityImplicitLgDeform as ModuleElasticityImplicitLgDeform
+
+# ElasticityImplicitLgDeform class
+class ElasticityImplicitLgDeform(IntegratorElasticityLgDeform,
+                                 ModuleElasticityImplicitLgDeform):
+  """
+  Python object for implicit time integration of elasticity
+  equation using finite-elements.
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="elasticityimplicit"):
+    """
+    Constructor.
+    """
+    IntegratorElasticityLgDeform.__init__(self, name)
+    ModuleElasticityImplicitLgDeform.__init__(self)
+    self._loggingPrefix = "ElIm "
+    return
+
+
+  def initialize(self, totalTime, numTimeSteps, normalizer):
+    """
+    Do initialization.
+    """
+    logEvent = "%sinit" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+
+    IntegratorElasticityLgDeform.initialize(self, totalTime, numTimeSteps,
+                                            normalizer)
+    ModuleElasticityImplicitLgDeform.initialize(self, self.mesh)
+    self._initializeOutput(totalTime, numTimeSteps, normalizer)
+    
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def integrator():
+  """
+  Factory associated with ElasticityImplicitLgDeform.
+  """
+  return ElasticityImplicitLgDeform()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticityLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/feassemble/IntegratorElasticityLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticityLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/feassemble/IntegratorElasticityLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/feassemble/IntegratorElasticityLgDeform.py
+##
+## @brief Python object implementing sgeneral methods for time
+## integration of the elasticity equation using finite-elements with
+## large rogid body motions and small strains.
+##
+## Factory: integrator
+
+from IntegratorElasticity import IntegratorElasticity
+
+# IntegratorElasticityLgDeform class
+class IntegratorElasticityLgDeform(IntegratorElasticity):
+  """
+  Python object implementing sgeneral methods for time integration of
+  the elasticity equation using finite-elements with large rigid body
+  motions and small strains.
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="integratorelasticitylgdeform"):
+    """
+    Constructor.
+    """
+    IntegratorElasticity.__init__(self)
+    self.name = "Integrator ElasticityLgDeform"
+
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/pylith/feassemble/__init__.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/__init__.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/feassemble/__init__.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -17,10 +17,13 @@
 __all__ = ['CellGeometry',
            'Constraint',
            'ElasticityExplicit',
+           'ElasticityExplicitLgDeform',
            'ElasticityImplicit',
+           'ElasticityImplicitLgDeform',
            'FIATLagrange',
            'FIATSimplex',
            'IntegratorElasticity',
+           'IntegratorElasticityLgDeform',
            'Integrator',
            'Quadrature',
            'ReferenceCell',

Modified: short/3D/PyLith/trunk/pylith/meshio/DataWriterVTK.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/DataWriterVTK.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/meshio/DataWriterVTK.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -48,6 +48,11 @@
                                             validator=pyre.inventory.greater(0.0*second))
   timeConstant.meta['tip'] = "Values used to normalize time stamp in filename."
 
+  precision = pyre.inventory.int("float_precision", default=6,
+                                 validator=pyre.inventory.greater(0))
+  precision.meta['tip'] = "Precision of floating point values in output."
+  
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="datawritervtk"):

Modified: short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKMesh.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKMesh.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKMesh.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -47,6 +47,7 @@
     ModuleDataWriterVTK.filename(self, self.filename)
     ModuleDataWriterVTK.timeFormat(self, self.timeFormat)
     ModuleDataWriterVTK.timeConstant(self, self.timeConstantN)
+    ModuleDataWriterVTK.precision(self, self.precision)
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubMesh.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubMesh.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubMesh.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -47,6 +47,7 @@
     ModuleDataWriterVTK.filename(self, self.filename)
     ModuleDataWriterVTK.timeFormat(self, self.timeFormat)
     ModuleDataWriterVTK.timeConstant(self, self.timeConstantN)
+    ModuleDataWriterVTK.precision(self, self.precision)
     return
   
 

Modified: short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubSubMesh.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubSubMesh.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKSubSubMesh.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -47,6 +47,7 @@
     ModuleDataWriterVTK.filename(self, self.filename)
     ModuleDataWriterVTK.timeFormat(self, self.timeFormat)
     ModuleDataWriterVTK.timeConstant(self, self.timeConstantN)
+    ModuleDataWriterVTK.precision(self, self.precision)
     return
   
 

Copied: short/3D/PyLith/trunk/pylith/meshio/OutputFaultDyn.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/meshio/OutputFaultDyn.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/OutputFaultDyn.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/meshio/OutputFaultDyn.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pyre/meshio/OutputFaultDyn.py
+##
+## @brief Python object for managing output of finite-element
+## information for faults with dynamic ruptures.
+##
+## Factory: output_manager
+
+from OutputManagerSubMesh import OutputManagerSubMesh
+
+# OutputFaultDyn class
+class OutputFaultDyn(OutputManagerSubMesh):
+  """
+  Python object for managing output of finite-element information for
+  faults with dynamic ruptures.
+
+  Inventory
+
+  @class Inventory
+  Python object for managing OutputFaultDyn facilities and properties.
+  
+  \b Properties
+  @li \b vertex_info_fields Names of vertex info fields to output.
+  @li \b vertex_data_fields Names of vertex data fields to output.
+  
+  \b Facilities
+  @li None
+
+  Factory: output_manager
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+
+  vertexInfoFields = pyre.inventory.list("vertex_info_fields",
+                                         default=["normal_dir"])
+  vertexInfoFields.meta['tip'] = "Names of vertex info fields to output."
+
+  vertexDataFields = pyre.inventory.list("vertex_data_fields", 
+                                         default=["slip",
+                                                  "traction"])
+  vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="outputfaultdyn"):
+    """
+    Constructor.
+    """
+    OutputManagerSubMesh.__init__(self, name)
+    return
+
+    
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    OutputManagerSubMesh._configure(self)
+    self.vertexInfoFields = self.inventory.vertexInfoFields
+    self.vertexDataFields = self.inventory.vertexDataFields
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def output_manager():
+  """
+  Factory associated with OutputManager.
+  """
+  return OutputFaultDyn()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/problems/ExplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/problems/ExplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/ExplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/problems/ExplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/problems/ExplicitLgDeform.py
+##
+## @brief Python ExplicitLgDeform object for solving equations using an
+## explicit formulation with rigid body motion and small strains.
+##
+## Factory: pde_formulation
+
+from Explicit import Explicit
+
+# ExplicitLgDeform class
+class ExplicitLgDeform(Explicit):
+  """
+  Python ExplicitLgDeform object for solving equations using an explicit
+  formulation with rigid body motion and small strains.
+
+  Factory: pde_formulation.
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="explicitlgdeform"):
+    """
+    Constructor.
+    """
+    Explicit.__init__(self, name)
+    return
+
+
+  def elasticityIntegrator(self):
+    """
+    Get integrator for elastic material.
+    """
+    from pylith.feassemble.ElasticityExplicitLgDeform import ElasticityExplicitLgDeform
+    return ElasticityExplicitLgDeform()
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    Explicit._configure(self)
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def pde_formulation():
+  """
+  Factory associated with ExplicitLgDeform.
+  """
+  return ExplicitLgDeform()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/problems/ExplicitLumped.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/problems/ExplicitLumped.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/ExplicitLumped.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/problems/ExplicitLumped.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,247 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/problems/ExplicitLumped.py
+##
+## @brief Python ExplicitLumped object for solving equations using an
+## explicit formulation with a lumped Jacobian matrix that is stored
+## as a Field.
+##
+## Factory: pde_formulation
+
+from Formulation import Formulation
+from pylith.utils.profiling import resourceUsageString
+
+# ExplicitLumped class
+class ExplicitLumped(Formulation):
+  """
+  Python ExplicitLumped object for solving equations using an explicit
+  formulation.
+
+  The formulation has the general form, [A(t)] {u(t+dt)} = {b(t)},
+  where we want to solve for {u(t+dt)}, A(t) is usually constant
+  (i.e., independent of time), and {b(t)} usually depends on {u(t)}
+  and {u(t-dt)}.
+
+  Jacobian: A(t)
+  solution: u(t+dt)
+  residual: b(t) - A(t) \hat u(t+dt)
+  constant: b(t)
+
+  Factory: pde_formulation.
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  class Inventory(Formulation.Inventory):
+    """
+    Python object for managing ExplicitLumped facilities and properties.
+
+    Provide appropriate solver for lumped Jacobian as the default.
+    """
+
+    ## @class Inventory
+    ## Python object for managing ExplicitLumped facilities and properties.
+    ##
+    ## \b Properties
+    ## @li None
+    ##
+    ## \b Facilities
+    ## @li \b solver Algebraic solver.
+
+    import pyre.inventory
+
+    from SolverLumped import SolverLumped
+    solver = pyre.inventory.facility("solver", family="solver",
+                                     factory=SolverLumped)
+    solver.meta['tip'] = "Algebraic solver."
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="explicit"):
+    """
+    Constructor.
+    """
+    Formulation.__init__(self, name)
+    self._loggingPrefix = "TSEx "
+    return
+
+
+  def elasticityIntegrator(self):
+    """
+    Get integrator for elastic material.
+    """
+    from pylith.feassemble.ElasticityExplicit import ElasticityExplicit
+    return ElasticityExplicit()
+
+
+  def initialize(self, dimension, normalizer):
+    """
+    Initialize problem for explicit time integration.
+    """
+    logEvent = "%sinit" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+    
+    Formulation.initialize(self, dimension, normalizer)
+
+    from pylith.utils.petsc import MemoryLogger
+    logger = MemoryLogger.singleton()
+    logger.setDebug(0)
+    logger.stagePush("Problem")
+
+    # Allocate other fields, reusing layout from dispIncr
+    self._info.log("Creating other fields.")
+    self.fields.add("disp(t-dt)", "displacement")
+    self.fields.copyLayout("dispIncr(t->t+dt)")
+    self._debug.log(resourceUsageString())
+
+    # Setup fields and set to zero
+    dispTmdt = self.fields.get("disp(t-dt)")
+    dispTmdt.zero()
+    dispT = self.fields.get("disp(t)")
+    dispT.zero()
+    residual = self.fields.get("residual")
+    residual.zero()
+    residual.createVector()
+    self._debug.log(resourceUsageString())
+    logger.stagePop()
+
+    self._info.log("Creating lumped Jacobian matrix.")
+    from pylith.topology.topology.MeshField import MeshField
+    jacobian = MeshField(self.mesh)
+    jacobian.label("jacobian")
+    solution.vectorFieldType(solution.VECTOR)
+    jacobian.newSection(jacobian.VERTICES_FIELD, dimension)
+    jacobian.allocate()
+    self.jacobian = jacobian
+    self._debug.log(resourceUsageString())
+
+    logger.stagePush("Problem")
+    self._info.log("Initializing solver.")
+    self.solver.initialize(self.fields, self.jacobian, self)
+    self._debug.log(resourceUsageString())
+
+    # Solve for increment in displacement field.
+    for constraint in self.constraints:
+      constraint.useSolnIncr(True)
+    for integrator in self.integratorsMesh + self.integratorsSubMesh:
+      integrator.useSolnIncr(True)
+
+    logger.stagePop()
+    logger.setDebug(0)
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def prestep(self, t, dt):
+    """
+    Hook for doing stuff before advancing time step.
+    """
+    logEvent = "%sprestep" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+    
+    dispIncr = self.fields.get("dispIncr(t->t+dt)")
+    for constraint in self.constraints:
+      constraint.setFieldIncr(t, t+dt, dispIncr)
+
+    needNewJacobian = False
+    for integrator in self.integratorsMesh + self.integratorsSubMesh:
+      integrator.timeStep(dt)
+      if integrator.needNewJacobian():
+        needNewJacobian = True
+    if needNewJacobian:
+      self._reformJacobian(t, dt)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def step(self, t, dt):
+    """
+    Advance to next time step.
+    """
+    logEvent = "%sstep" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+
+    self._reformResidual(t, dt)
+    
+    self._info.log("Solving equations.")
+    residual = self.fields.get("residual")
+    dispIncr = self.fields.get("dispIncr(t->t+dt)")
+    self.solver.solve(dispIncr, self.jacobian, residual)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def poststep(self, t, dt):
+    """
+    Hook for doing stuff after advancing time step.
+    """
+    logEvent = "%spoststep" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)
+    
+    dispIncr = self.fields.get("dispIncr(t->t+dt)")
+    dispT = self.fields.get("disp(t)")
+    dispTmdt = self.fields.get("disp(t-dt)")
+
+    dispTmdt.copy(dispT)
+    dispT += dispIncr
+    dispIncr.zero()
+
+    Formulation.poststep(self, t, dt)
+
+    self._eventLogger.eventEnd(logEvent)    
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    Formulation._configure(self)
+    self.solver = self.inventory.solver
+    return
+
+
+  def _reformJacobian(self, t, dt):
+    """
+    Reform Jacobian matrix for operator.
+    """
+    self._debug.log(resourceUsageString())
+    self._info.log("Integrating Jacobian operator.")
+    self._eventLogger.stagePush("Reform Jacobian")
+
+    self.updateSettings(self.jacobian, fields, t, dt)
+    self.reformJacobianLumped()
+
+    self._eventLogger.stagePop()
+
+    if self.viewJacobian:
+      self.jacobian.view("Lumped Jacobian")
+
+    self._debug.log(resourceUsageString())
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def pde_formulation():
+  """
+  Factory associated with ExplicitLumped.
+  """
+  return ExplicitLumped()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/problems/ImplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/problems/ImplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/ImplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/problems/ImplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/problems/ImplicitLgDeform.py
+##
+## @brief Python ImplicitLgDeform object for solving equations using
+## an implicit formulation with rigid body motions and small strains.
+##
+## Factory: pde_formulation
+
+from Implicit import Implicit
+
+# ImplicitLgDeform class
+class ImplicitLgDeform(Implicit):
+  """
+  Python ImplicitLgDeform object for solving equations using an implicit
+  formulation with rigid body motions and small strains.
+
+  Factory: pde_formulation.
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="implicitlgdeform"):
+    """
+    Constructor.
+    """
+    Implicit.__init__(self, name)
+    return
+
+
+  def elasticityIntegrator(self):
+    """
+    Get integrator for elastic material.
+    """
+    from pylith.feassemble.ElasticityImplicitLgDeform import ElasticityImplicitLgDeform
+    return ElasticityImplicitLgDeform()
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    Implicit._configure(self)
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def pde_formulation():
+  """
+  Factory associated with ImplicitLgDeform.
+  """
+  return ImplicitLgDeform()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/pylith/problems/SolverLumped.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/pylith/problems/SolverLumped.py)
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/SolverLumped.py	                        (rev 0)
+++ short/3D/PyLith/trunk/pylith/problems/SolverLumped.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/solver/SolverLumped.py
+
+## @brief Python PyLith simple solver for system with a lumped (i.e.,
+## diagonal) Jacobian matrix.
+
+from Solver import Solver
+from problems import SolverLumped as ModuleSolverLumped
+
+# SolverLumped class
+class SolverLumped(Solver, ModuleSolverLumped):
+  """
+  Python PyLith linear algebraic solver.
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  class Inventory(Solver.Inventory):
+    """
+    Python object for managing SolverLumped facilities and properties.
+    """
+
+    ## @class Inventory
+    ## Python object for managing SolverLumped facilities and properties.
+    ##
+    ## \b Properties
+    ## @li None
+    ##
+    ## \b Facilities
+    ## @li None
+
+    import pyre.inventory
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="solverlinear"):
+    """
+    Constructor.
+    """
+    Solver.__init__(self, name)
+    ModuleSolverLumped.__init__(self)
+    return
+
+
+  def initialize(self, fields, jacobian, formulation):
+    """
+    Initialize linear solver.
+    """
+    ModuleSolverLumped.initialize(self, fields, jacobian, formulation)
+    return
+
+
+  # PRIVATE METHODS /////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    Solver._configure(self)
+    return
+
+
+  def _cleanup(self):
+    """
+    Deallocate PETSc and local data structures.
+    """
+    self.deallocate()
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def solver():
+  """
+  Factory associated with Solver.
+  """
+  return SolverLumped()
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/pylith/tests/PhysicalProperties.py
===================================================================
--- short/3D/PyLith/trunk/pylith/tests/PhysicalProperties.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/tests/PhysicalProperties.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -33,7 +33,7 @@
   testcase.assertEqual(mesh['spaceDim'], spaceDim)
 
   # Check physical properties
-  tolerance = 1.0e-5
+  tolerance = 1.0e-6
 
   for name in properties.keys():
     propertyE = properties[name]

Modified: short/3D/PyLith/trunk/pylith/tests/Solution.py
===================================================================
--- short/3D/PyLith/trunk/pylith/tests/Solution.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/tests/Solution.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -22,25 +22,22 @@
   """
   data = testcase.reader.read(filename)
   
-  # Check cells
-  (ncells, ncorners) = data['cells'].shape
-  testcase.assertEqual(mesh['ncells'], ncells)
-  testcase.assertEqual(mesh['ncorners'], ncorners)
-
   # Check vertices
   (nvertices, spaceDim) = data['vertices'].shape
   testcase.assertEqual(mesh['nvertices'], nvertices)
   testcase.assertEqual(mesh['spaceDim'], spaceDim)
 
   # Check displacement solution
-  tolerance = 1.0e-5
+  tolerance = 1.0e-6
 
   dispE = testcase.calcDisplacements(data['vertices'])
   disp = data['vertex_fields']['displacement']
 
   # Check x displacements
+  mask = numpy.abs(dispE[:,0] > tolerance)
   diff = numpy.abs(disp[:,0] - dispE[:,0])
-  okay = diff < tolerance
+  diffR = numpy.abs(1.0 - disp[:,0] / dispE[:,0])  
+  okay = ~mask * (diff < tolerance) + mask * (diffR < tolerance)
   if numpy.sum(okay) != nvertices:
     "Error in x-component of displacement field."
     print "Expected values: ",dispE
@@ -48,8 +45,10 @@
   testcase.assertEqual(nvertices, numpy.sum(okay))    
     
   # Check y displacements
-  diff = numpy.abs(disp[:,1] - dispE[:,1])
-  okay = diff < tolerance
+  mask = numpy.abs(dispE[:,1] > tolerance)
+  diff = numpy.abs(disp[:,1] - dispE[:,0])
+  diffR = numpy.abs(1.0 - disp[:,1] / dispE[:,1])  
+  okay = ~mask * (diff < tolerance) + mask * (diffR < tolerance)
   if numpy.sum(okay) != nvertices:
     "Error in y-component of displacement field."
     print "Expected values: ",dispE
@@ -57,8 +56,10 @@
   testcase.assertEqual(nvertices, numpy.sum(okay))    
 
   # Check z displacements
+  mask = numpy.abs(dispE[:,2] > tolerance)
   diff = numpy.abs(disp[:,2] - dispE[:,2])
-  okay = diff < tolerance
+  diffR = numpy.abs(1.0 - disp[:,2] / dispE[:,2])  
+  okay = ~mask * (diff < tolerance) + mask * (diffR < tolerance)
   if numpy.sum(okay) != nvertices:
     "Error in z-component of displacement field."
     print "Expected values: ",dispE

Modified: short/3D/PyLith/trunk/pylith/tests/StateVariables.py
===================================================================
--- short/3D/PyLith/trunk/pylith/tests/StateVariables.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/tests/StateVariables.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -37,7 +37,7 @@
   normalizer._configure()
 
   # Check state variables
-  tolerance = 1.0e-5
+  tolerance = 1.0e-6
 
   for name in stateVarNames:
     valuesE = testcase.calcStateVar(name, data['vertices'], data['cells'])

Modified: short/3D/PyLith/trunk/pylith/utils/VTKDataReader.py
===================================================================
--- short/3D/PyLith/trunk/pylith/utils/VTKDataReader.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/pylith/utils/VTKDataReader.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -74,6 +74,8 @@
       raise ValueError("Expecting cells to all be the same type.")
     if cellId == 5: # tri3
       ncorners = 3
+    elif cellId == 12: # tri3
+      ncorners = 8
     elif cellId == 3: # line2
       ncorners = 2
     elif cellId == 9: # quad4


Property changes on: short/3D/PyLith/trunk/share
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/templates
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/tests
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/tests/1d
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/tests/1d/line2
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/tests/1d/line2/TestDislocation.py
===================================================================
--- short/3D/PyLith/trunk/tests/1d/line2/TestDislocation.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/1d/line2/TestDislocation.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -89,7 +89,7 @@
       return
 
     filename = "%s-fault_t0000000.vtk" % self.outputRoot
-    fields = ["cumulative_slip", "traction_change"]
+    fields = ["slip", "traction_change"]
     check_vertex_fields(self, filename, self.faultMesh, fields)
 
     return
@@ -163,7 +163,7 @@
     elif name == "slip_time":
       field = slipTime*numpy.ones( (nvertices, 1), dtype=numpy.float64)
       
-    elif name == "cumulative_slip":
+    elif name == "slip":
       field = numpy.zeros( (nvertices, 3), dtype=numpy.float64)
       field[:,0] = finalSlip
 

Copied: short/3D/PyLith/trunk/tests/1d/line2/lgdeformtranslation.cfg (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/1d/line2/lgdeformtranslation.cfg)
===================================================================
--- short/3D/PyLith/trunk/tests/1d/line2/lgdeformtranslation.cfg	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/1d/line2/lgdeformtranslation.cfg	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,95 @@
+# -*- Python -*-
+[pylithapp]
+
+[pylithapp.launcher] # WARNING: THIS IS NOT PORTABLE
+command = mpirun -np ${nodes}
+
+# ----------------------------------------------------------------------
+# journal
+# ----------------------------------------------------------------------
+[pylithapp.journal.info]
+#timedependent = 1
+#implicit = 1
+#petsc = 1
+#solverlinear = 1
+#meshioascii = 1
+#implicitelasticity = 1
+#quadrature = 1
+#fiatsimplex = 1
+
+# ----------------------------------------------------------------------
+# mesh_generator
+# ----------------------------------------------------------------------
+[pylithapp.mesh_generator]
+#debug = 1
+
+[pylithapp.mesh_generator.reader]
+filename = bar.mesh
+coordsys.space_dim = 1
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+dimension = 1
+bc = [bc]
+
+formulation = pylith.problems.ImplicitLgDeform
+formulation.solver = pylith.problems.SolverNonlinear
+
+[pylithapp.timedependent.formulation.time_step]
+total_time = 0.0*s
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+materials.elastic = pylith.materials.ElasticStrain1D
+
+[pylithapp.timedependent.materials.elastic]
+label = Elastic material
+id = 1
+db_properties.iohandler.filename = matprops.spatialdb
+quadrature.cell.shape = line
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.bc.bc]
+bc_dof = [0]
+label = end points
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Dirichlet BC
+db_initial.values = [displacement-x]
+db_initial.data = [2.5*m]
+
+# ----------------------------------------------------------------------
+# PETSc
+# ----------------------------------------------------------------------
+[pylithapp.petsc]
+ksp_rtol = 1.0e-8
+pc_type = asm
+# Change the preconditioner settings (must turn off
+# shift_positive_definite and turn on shift_nonzero).
+sub_pc_factor_shift_positive_definite = 0
+sub_pc_factor_shift_nonzero = 
+
+ksp_max_it = 100
+ksp_gmres_restart = 50
+#ksp_monitor = true
+#ksp_view = true
+#log_summary = true
+#start_in_debugger = true
+#snes_monitor = true
+#snes_view = true
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+[pylithapp.problem.formulation.output.output.writer]
+filename = lgdeformtranslation.vtk
+
+[pylithapp.timedependent.materials.elastic.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = lgdeformtranslation-elastic.vtk


Property changes on: short/3D/PyLith/trunk/tests/1d/line3
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/tests/1d/line3/TestDislocation.py
===================================================================
--- short/3D/PyLith/trunk/tests/1d/line3/TestDislocation.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/1d/line3/TestDislocation.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -89,7 +89,7 @@
       return
 
     filename = "%s-fault_t0000000.vtk" % self.outputRoot
-    fields = ["cumulative_slip", "traction_change"]
+    fields = ["slip", "traction_change"]
     check_vertex_fields(self, filename, self.faultMesh, fields)
 
     return
@@ -163,7 +163,7 @@
     elif name == "slip_time":
       field = slipTime*numpy.ones( (nvertices, 1), dtype=numpy.float64)
       
-    elif name == "cumulative_slip":
+    elif name == "slip":
       field = numpy.zeros( (nvertices, 3), dtype=numpy.float64)
       field[:,0] = finalSlip
 


Property changes on: short/3D/PyLith/trunk/tests/2d
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/tests/2d/quad4
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/tests/2d/quad4/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/2d/quad4/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -25,6 +25,11 @@
 	TestDislocation.py \
 	dislocation_soln.py \
 	dislocation2_soln.py \
+	TestLgDeformRigidBody.py \
+	rigidbody_soln.py \
+	rigidbody_gendb.py \
+	TestLgDeformTraction.py \
+	lgdeformtraction_soln.py \
 	testpylith.py
 
 dist_noinst_DATA = \
@@ -35,7 +40,9 @@
 	axialdisp.cfg \
 	sheardisp.cfg \
 	dislocation.cfg \
-	dislocation2.cfg
+	dislocation2.cfg \
+	lgdeformrigidbody.cfg \
+	lgdeformtraction.cfg
 
 noinst_TMP = \
 	axial_disp.spatialdb \
@@ -50,7 +57,14 @@
 	dislocation-elastic_info.vtk \
 	dislocation-elastic_t0000000.vtk \
 	dislocation-fault_info.vtk \
-	dislocation-fault_t0000000.vtk
+	dislocation-fault_t0000000.vtk \
+	rigidbody_disp.spatialdb \
+	lgdeformrigidbody_t0000000.vtk \
+	lgdeformrigidbody-elastic_info.vtk \
+	lgdeformrigidbody-elastic_t0000000.vtk \
+	lgdeformtraction_t0000000.vtk \
+	lgdeformtraction-elastic_info.vtk \
+	lgdeformtraction-elastic_t0000000.vtk
 
 
 TESTS_ENVIRONMENT = $(PYTHON)

Modified: short/3D/PyLith/trunk/tests/2d/quad4/TestDislocation.py
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/TestDislocation.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/2d/quad4/TestDislocation.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -92,7 +92,7 @@
       return
 
     filename = "%s-fault_t0000000.vtk" % self.outputRoot
-    fields = ["cumulative_slip", "traction_change"]
+    fields = ["slip", "traction_change"]
     check_vertex_fields(self, filename, self.faultMesh, fields)
 
     return
@@ -144,7 +144,7 @@
     elif name == "slip_time":
       field = slipTime*numpy.zeros( (nvertices, 1), dtype=numpy.float64)
       
-    elif name == "cumulative_slip":
+    elif name == "slip":
       field = numpy.zeros( (nvertices, 3), dtype=numpy.float64)
       field[:,0] = finalSlip
 

Copied: short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformRigidBody.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/2d/quad4/TestLgDeformRigidBody.py)
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformRigidBody.py	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformRigidBody.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file tests/2d/quad4/TestRigidBody.py
+##
+## @brief Test suite for testing pylith with rigid body motion for
+## large deformations in 2-D.
+
+import numpy
+from TestQuad4 import TestQuad4
+from rigidbody_soln import AnalyticalSoln
+from pylith.utils.VTKDataReader import has_vtk
+from pylith.utils.VTKDataReader import VTKDataReader
+
+# Local version of PyLithApp
+from pylith.apps.PyLithApp import PyLithApp
+class RigidBodyApp(PyLithApp):
+  def __init__(self):
+    PyLithApp.__init__(self, name="lgdeformrigidbody")
+    return
+
+
+# Helper function to run PyLith
+def run_pylith():
+  """
+  Run pylith.
+  """
+  if not "done" in dir(run_pylith):
+    # Generate spatial databases
+    from rigidbody_gendb import GenerateDB
+    db = GenerateDB()
+    db.run()
+
+    # Run PyLith
+    app = RigidBodyApp()
+    app.run()
+    run_pylith.done = True
+  return
+
+
+class TestRigidBody(TestQuad4):
+  """
+  Test suite for testing pylith with 2-D rigid body motion.
+  """
+
+  def setUp(self):
+    """
+    Setup for test.
+    """
+    TestQuad4.setUp(self)
+    run_pylith()
+    self.outputRoot = "lgdeformrigidbody"
+    if has_vtk():
+      self.reader = VTKDataReader()
+      self.soln = AnalyticalSoln()
+    else:
+      self.reader = None
+    return
+
+
+  def calcDisplacements(self, vertices):
+    """
+    Calculate displacement field given coordinates of vertices.
+    """
+    return self.soln.displacement(vertices)
+
+
+  def calcStateVar(self, name, vertices, cells):
+    """
+    Calculate state variable.
+    """
+    ncells = self.mesh['ncells']
+    pts = numpy.zeros( (ncells, 3), dtype=numpy.float64)
+    if name == "total_strain":
+      stateVar = self.soln.strain(pts)
+    elif name == "stress":
+      stateVar = self.soln.stress(pts)
+    else:
+      raise ValueError("Unknown state variable '%s'." % name)
+
+    return stateVar
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformTraction.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/2d/quad4/TestLgDeformTraction.py)
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformTraction.py	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/2d/quad4/TestLgDeformTraction.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file tests/2d/quad4/TestLgDeformTraction.py
+##
+## @brief Test suite for testing pylith with uniform tractions for
+## large deformations in 2-D.
+
+import numpy
+from TestQuad4 import TestQuad4
+from lgdeformtraction_soln import AnalyticalSoln
+from pylith.utils.VTKDataReader import has_vtk
+from pylith.utils.VTKDataReader import VTKDataReader
+
+# Local version of PyLithApp
+from pylith.apps.PyLithApp import PyLithApp
+class TractionApp(PyLithApp):
+  def __init__(self):
+    PyLithApp.__init__(self, name="lgdeformtraction")
+    return
+
+
+# Helper function to run PyLith
+def run_pylith():
+  """
+  Run pylith.
+  """
+  if not "done" in dir(run_pylith):
+    # Run PyLith
+    app = TractionApp()
+    app.run()
+    run_pylith.done = True
+  return
+
+
+class TestTraction(TestQuad4):
+  """
+  Test suite for testing pylith with 2-D axial tractions.
+  """
+
+  def setUp(self):
+    """
+    Setup for test.
+    """
+    TestQuad4.setUp(self)
+    run_pylith()
+    self.outputRoot = "lgdeformtraction"
+    if has_vtk():
+      self.reader = VTKDataReader()
+      self.soln = AnalyticalSoln()
+    else:
+      self.reader = None
+    return
+
+
+  def calcDisplacements(self, vertices):
+    """
+    Calculate displacement field given coordinates of vertices.
+    """
+    return self.soln.displacement(vertices)
+
+
+  def calcStateVar(self, name, vertices, cells):
+    """
+    Calculate state variable.
+    """
+    ncells = self.mesh['ncells']
+    pts = numpy.zeros( (ncells, 3), dtype=numpy.float64)
+    if name == "total_strain":
+      stateVar = self.soln.strain(pts)
+    elif name == "stress":
+      stateVar = self.soln.stress(pts)
+    else:
+      raise ValueError("Unknown state variable '%s'." % name)
+
+    return stateVar
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/tests/2d/quad4/lgdeformrigidbody.cfg (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/2d/quad4/lgdeformrigidbody.cfg)
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/lgdeformrigidbody.cfg	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/2d/quad4/lgdeformrigidbody.cfg	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,108 @@
+# -*- Python -*-
+[lgdeformrigidbody]
+
+[lgdeformrigidbody.launcher] # WARNING: THIS IS NOT PORTABLE
+command = mpirun -np ${nodes}
+
+# ----------------------------------------------------------------------
+# journal
+# ----------------------------------------------------------------------
+[lgdeformrigidbody.journal.info]
+#timedependent = 1
+#implicit = 1
+#petsc = 1
+#solverlinear = 1
+#meshiocubit = 1
+#implicitelasticity = 1
+#quadrature2d = 1
+#fiatlagrange = 1
+
+# ----------------------------------------------------------------------
+# mesh_generator
+# ----------------------------------------------------------------------
+[lgdeformrigidbody.mesh_generator]
+#debug = 1
+reader = pylith.meshio.MeshIOCubit
+
+[lgdeformrigidbody.mesh_generator.reader]
+filename = mesh.exo
+coordsys.space_dim = 2
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[lgdeformrigidbody.timedependent]
+dimension = 2
+bc = [x_neg,x_pos]
+
+formulation = pylith.problems.ImplicitLgDeform
+formulation.solver = pylith.problems.SolverNonlinear
+
+[lgdeformrigidbody.timedependent.formulation.time_step]
+total_time = 0.0*s
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+[lgdeformrigidbody.timedependent]
+materials = [elastic]
+materials.elastic = pylith.materials.ElasticPlaneStrain
+
+[lgdeformrigidbody.timedependent.materials.elastic]
+label = Elastic material
+id = 1
+db_properties.iohandler.filename = matprops.spatialdb
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+[lgdeformrigidbody.timedependent.bc.x_neg]
+bc_dof = [0,1]
+label = 21
+db_initial = spatialdata.spatialdb.SimpleDB
+db_initial.label = Dirichlet BC -x edge
+db_initial.iohandler.filename = rigidbody_disp.spatialdb
+
+[lgdeformrigidbody.timedependent.bc.x_pos]
+bc_dof = [0,1]
+label = 20
+db_initial = spatialdata.spatialdb.SimpleDB
+db_initial.label = Dirichlet BC +x edge
+db_initial.iohandler.filename = rigidbody_disp.spatialdb
+
+# ----------------------------------------------------------------------
+# PETSc
+# ----------------------------------------------------------------------
+[lgdeformrigidbody.petsc]
+ksp_rtol = 1.0e-8
+pc_type = asm
+# Change the preconditioner settings (must turn off
+# shift_positive_definite and turn on shift_nonzero).
+sub_pc_factor_shift_positive_definite = 0
+sub_pc_factor_shift_nonzero = 
+
+ksp_max_it = 200
+ksp_gmres_restart = 100
+#ksp_monitor = true
+#ksp_view = true
+#snes_monitor = true
+#snes_view = true
+#ksp_converged_reason = true
+#snes_converged_reason = true
+#log_summary = true
+# start_in_debugger = true
+
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+[lgdeformrigidbody.problem.formulation.output.output.writer]
+filename = lgdeformrigidbody.vtk
+float_precision = 8
+
+[lgdeformrigidbody.timedependent.materials.elastic.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = lgdeformrigidbody-elastic.vtk
+writer.float_precision = 8

Copied: short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction.cfg (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/2d/quad4/lgdeformtraction.cfg)
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction.cfg	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction.cfg	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,124 @@
+# -*- Python -*-
+[lgdeformtraction]
+
+[lgdeformtraction.launcher] # WARNING: THIS IS NOT PORTABLE
+command = mpirun -np ${nodes}
+
+# ----------------------------------------------------------------------
+# journal
+# ----------------------------------------------------------------------
+[lgdeformtraction.journal.info]
+#timedependent = 1
+#implicit = 1
+#petsc = 1
+#solverlinear = 1
+#meshiocubit = 1
+#implicitelasticity = 1
+#quadrature2d = 1
+#fiatlagrange = 1
+
+# ----------------------------------------------------------------------
+# mesh_generator
+# ----------------------------------------------------------------------
+[lgdeformtraction.mesh_generator]
+#debug = 1
+reader = pylith.meshio.MeshIOCubit
+
+[lgdeformtraction.mesh_generator.reader]
+filename = mesh.exo
+coordsys.space_dim = 2
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[lgdeformtraction.timedependent]
+dimension = 2
+bc = [x_neg,x_pos,y_neg,y_pos]
+
+formulation = pylith.problems.ImplicitLgDeform
+formulation.solver = pylith.problems.SolverNonlinear
+
+[lgdeformtraction.timedependent.formulation.time_step]
+total_time = 0.0*s
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+[lgdeformtraction.timedependent]
+materials = [elastic]
+materials.elastic = pylith.materials.ElasticPlaneStrain
+
+[lgdeformtraction.timedependent.materials.elastic]
+label = Elastic material
+id = 1
+db_properties.iohandler.filename = matprops.spatialdb
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+[lgdeformtraction.timedependent.bc]
+x_pos = pylith.bc.Neumann
+y_pos = pylith.bc.Neumann
+
+[lgdeformtraction.timedependent.bc.x_neg]
+bc_dof = [0]
+label = 21
+
+[lgdeformtraction.timedependent.bc.y_neg]
+bc_dof = [1]
+label = 23
+
+[lgdeformtraction.timedependent.bc.x_pos]
+label = 20
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Neumann BC +x edge
+db_initial.values = [traction-shear,traction-normal]
+db_initial.data = [0.0*MPa,-100*MPa]
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 1
+
+[lgdeformtraction.timedependent.bc.y_pos]
+label = 22
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Neumann BC +y edge
+db_initial.values = [traction-shear,traction-normal]
+db_initial.data = [0.0*MPa,-10*MPa]
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 1
+
+# ----------------------------------------------------------------------
+# PETSc
+# ----------------------------------------------------------------------
+[lgdeformtraction.petsc]
+ksp_rtol = 1.0e-8
+pc_type = asm
+# Change the preconditioner settings (must turn off
+# shift_positive_definite and turn on shift_nonzero).
+sub_pc_factor_shift_positive_definite = 0
+sub_pc_factor_shift_nonzero = 
+
+ksp_max_it = 100
+ksp_gmres_restart = 50
+#ksp_monitor = true
+#ksp_view = true
+#snes_monitor = true
+#snes_view = true
+#ksp_converged_reason = true
+#snes_converged_reason = true
+#log_summary = true
+# start_in_debugger = true
+
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+[lgdeformtraction.problem.formulation.output.output.writer]
+filename = lgdeformtraction.vtk
+float_precision = 8
+
+[lgdeformtraction.timedependent.materials.elastic.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = lgdeformtraction-elastic.vtk
+writer.float_precision = 8

Copied: short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction_soln.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/2d/quad4/lgdeformtraction_soln.py)
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction_soln.py	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/2d/quad4/lgdeformtraction_soln.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file tests/2d/quad4/lgdeformtraction_soln.py
+##
+## @brief Analytical solution to axial tractions with large
+## deformation formulation.
+
+import numpy
+
+# Physical properties
+p_density = 2500.0
+p_vs = 3000.0
+p_vp = 5291.502622129181
+
+p_mu = p_density*p_vs**2
+p_lambda = p_density*p_vp**2 - 2*p_mu
+
+# Uniform stress field (plane strain)
+sxx0 = -100.0e+6
+syy0 = -10.0e+6
+ux = -12.6625644
+uy = 3.37567811
+
+sxx = -1.00158533e+8
+sxy = 0.0
+syy = -9.99578218e+6
+szz = p_lambda/(2*p_lambda+2*p_mu)*(sxx+syy)
+
+# Uniform strain field
+exx = -0.00158156790
+eyy = 0.000422048789
+ezz = 1.0/(2*p_mu) * (szz - p_lambda/(3*p_lambda+2*p_mu) * (sxx+syy+szz))
+
+exy = 1.0/(2*p_mu) * (sxy)
+
+#print sxx,syy
+#print exx,eyy,exy,ezz
+#print -exx*p_lambda/(p_lambda+2*p_mu)
+
+# ----------------------------------------------------------------------
+class AnalyticalSoln(object):
+  """
+  Analytical solution to axial/shear displacement problem.
+  """
+
+  def __init__(self):
+    return
+
+
+  def displacement(self, locs):
+    """
+    Compute displacement field at locations.
+    """
+    (npts, dim) = locs.shape
+    disp = numpy.zeros( (npts, 3), dtype=numpy.float64)
+    disp[:,0] = ux*(4000.0 + locs[:,0]) / 8000.0
+    disp[:,1] = uy*(4000.0 + locs[:,1]) / 8000.0
+    return disp
+
+
+  def strain(self, locs):
+    """
+    Compute strain field at locations.
+    """
+    (npts, dim) = locs.shape
+    strain = numpy.zeros( (npts, 3), dtype=numpy.float64)
+    strain[:,0] = exx
+    strain[:,1] = eyy
+    strain[:,2] = exy
+    return strain
+  
+
+  def stress(self, locs):
+    """
+    Compute stress field at locations.
+    """
+    (npts, dim) = locs.shape
+    stress = numpy.zeros( (npts, 3), dtype=numpy.float64)
+    stress[:,0] = sxx
+    stress[:,1] = syy
+    stress[:,2] = sxy
+    return stress
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_gendb.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/2d/quad4/rigidbody_gendb.py)
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_gendb.py	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_gendb.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file tests/2d/quad4/rigidbody_gendb.py
+##
+## @brief Python script to generate spatial database with displacement
+## boundary conditions for the rigid body motion test.
+
+import numpy
+
+class GenerateDB(object):
+  """
+  Python object to generate spatial database with displacement
+  boundary conditions for the rigid body motion test.
+  """
+  
+  def __init__(self):
+    """
+    Constructor.
+    """
+    return
+  
+  
+  def run(self):
+    """
+    Generate the database.
+    """
+    # Domain
+    x = numpy.arange(-4000.0, 4000.1, 1000.0)
+    y = numpy.arange(-4000.0, 4000.1, 1000.0)
+    npts = x.shape[0]
+
+    xx = x * numpy.ones( (npts, 1), dtype=numpy.float64)
+    yy = y * numpy.ones( (npts, 1), dtype=numpy.float64)
+    xy = numpy.zeros( (npts**2, 2), dtype=numpy.float64)
+    xy[:,0] = numpy.ravel(xx)
+    xy[:,1] = numpy.ravel(numpy.transpose(yy))
+
+    from rigidbody_soln import AnalyticalSoln
+    soln = AnalyticalSoln()
+    disp = soln.displacement(xy)
+
+    from spatialdata.geocoords.CSCart import CSCart
+    cs = CSCart()
+    cs.inventory.spaceDim = 2
+    cs._configure()
+    data = {'locs': xy,
+            'coordsys': cs,
+            'data_dim': 2,
+            'values': [{'name': "displacement-x",
+                        'units': "m",
+                        'data': numpy.ravel(disp[:,0])},
+                       {'name': "displacement-y",
+                        'units': "m",
+                        'data': numpy.ravel(disp[:,1])}]}
+
+    from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii
+    io = SimpleIOAscii()
+    io.inventory.filename = "rigidbody_disp.spatialdb"
+    io._configure()
+    io.write(data)
+    return
+
+# ======================================================================
+if __name__ == "__main__":
+  app = GenerateDB()
+  app.run()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_soln.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/2d/quad4/rigidbody_soln.py)
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_soln.py	                        (rev 0)
+++ short/3D/PyLith/trunk/tests/2d/quad4/rigidbody_soln.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file tests/2d/quad4/rigidbody_soln.py
+##
+## @brief Analytical solution to rigid body motion problem.
+
+import numpy
+
+# Physical properties
+p_density = 2500.0
+p_vs = 3000.0
+p_vp = 5291.502622129181
+
+p_mu = p_density*p_vs**2
+p_lambda = p_density*p_vp**2 - 2*p_mu
+
+# Uniform stress field (plane strain)
+sxx = 0.0
+sxy = 0.0
+syy = 0.0
+szz = p_lambda/(2*p_lambda+2*p_mu)*(sxx+syy)
+
+# Uniform strain field
+exx = 0.0
+eyy = 0.0
+ezz = 0.0
+
+exy = 1.0/(2*p_mu) * (sxy)
+
+#print exx,eyy,exy,ezz
+#print -exx*p_lambda/(p_lambda+2*p_mu)
+
+# ----------------------------------------------------------------------
+class AnalyticalSoln(object):
+  """
+  Analytical solution to axial/shear displacement problem.
+  """
+
+  def __init__(self):
+    return
+
+
+  def displacement(self, locs):
+    """
+    Compute displacement field at locations.
+    """
+    u0 = 1000.0
+    v0 = 500.0
+    from math import pi
+    theta = -30.0/180.0*pi
+
+    (npts, dim) = locs.shape
+    disp = numpy.zeros( (npts, 3), dtype=numpy.float64)
+    disp[:,0] = -locs[:,0] + \
+        u0 + numpy.cos(theta)*locs[:,0] + numpy.sin(theta)*locs[:,1]
+    disp[:,1] = -locs[:,1] + \
+        v0 - numpy.sin(theta)*locs[:,0] + numpy.cos(theta)*locs[:,1]
+    return disp
+
+
+  def strain(self, locs):
+    """
+    Compute strain field at locations.
+    """
+    (npts, dim) = locs.shape
+    strain = numpy.zeros( (npts, 3), dtype=numpy.float64)
+    strain[:,0] = exx
+    strain[:,1] = eyy
+    strain[:,2] = exy
+    return strain
+  
+
+  def stress(self, locs):
+    """
+    Compute stress field at locations.
+    """
+    (npts, dim) = locs.shape
+    stress = numpy.zeros( (npts, 3), dtype=numpy.float64)
+    stress[:,0] = sxx
+    stress[:,1] = syy
+    stress[:,2] = sxy
+    return stress
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/tests/2d/quad4/testpylith.py
===================================================================
--- short/3D/PyLith/trunk/tests/2d/quad4/testpylith.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/2d/quad4/testpylith.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,12 @@
   #from TestDislocation2 import TestDislocation2
   #suite.addTest(unittest.makeSuite(TestDislocation2))
 
+  from TestLgDeformRigidBody import TestRigidBody
+  suite.addTest(unittest.makeSuite(TestRigidBody))
+
+  from TestLgDeformTraction import TestTraction
+  suite.addTest(unittest.makeSuite(TestTraction))
+
   return suite
 
 


Property changes on: short/3D/PyLith/trunk/tests/2d/tri3
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Copied: short/3D/PyLith/trunk/tests/3dnew (from rev 16093, short/3D/PyLith/branches/pylith-friction/tests/3dnew)

Modified: short/3D/PyLith/trunk/tests/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/tests/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -12,7 +12,9 @@
 
 SUBDIRS = \
 	1d \
-	2d
+	2d \
+	3dnew \
+	petsc
 
 
 # End of file 

Modified: short/3D/PyLith/trunk/tests/README
===================================================================
--- short/3D/PyLith/trunk/tests/README	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/README	2009-12-10 01:52:12 UTC (rev 16094)
@@ -9,10 +9,13 @@
     Point force
     Neumann
     Absorbing dampers
+    Body forces (2-D, 3-D)
   Faults
+    Kinematic
+    Dynamic
+  Large deformations
 
 
-
 ----------------------------------------------------------------------
 1-D tests
 ----------------------------------------------------------------------
@@ -69,6 +72,18 @@
   * dislocationdyn --TODO--
     [single fault, dynamic]
 
+  * lgdeformrigidbody --TODO-- (need higher precision output)
+
+    - Dirichlet BC w/initial displacement, UniformDB
+      (rigid body translation and rotation)
+    - Large deformation
+
+  * lgdeformtraction --TODO-- (need higher precision output)
+
+    - Dirichlet BC w/initial displacement, UniformDB
+    - Neuman BC w/initial value, UniformDB
+    - Large deformation
+
 tri3 (linear cells, plane stress)
 
   * axialdisp
@@ -100,3 +115,15 @@
 
 Gravity with faults, Neumann BC.
 
+  * lgdeformrigidbody --TODO-- (need higher precision output)
+
+    - Dirichlet BC w/initial displacement, UniformDB
+      (rigid body translation and rotation)
+    - Large deformation
+
+  * lgdeformtraction --TODO-- (need higher precision output)
+
+    - Dirichlet BC w/initial displacement, UniformDB
+    - Neuman BC w/initial value, UniformDB
+    - Large deformation
+


Property changes on: short/3D/PyLith/trunk/tests/petsc
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/tests/petsc/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/tests/petsc/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/tests/petsc/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -14,7 +14,7 @@
 
 check_SCRIPTS = testpetsc.py
 
-noinst_PYTHON = \
+dist_noinst_PYTHON = \
 	TestPetscApp.py
 
 noinst_DATA = 
@@ -26,15 +26,15 @@
 
 # 'export' the input files by performing a mock install
 export_datadir = $(top_builddir)/tests/petsc
-export-data: $(noinst_PYTHON) $(noinst_DATA)
-	for f in $(noinst_PYTHON) $(noinst_DATA); do $(install_sh_DATA) $(srcdir)/$$f $(export_datadir); done
+export-data: $(dist_noinst_PYTHON) $(dist_noinst_DATA)
+	for f in $(dist_noinst_PYTHON) $(dist_noinst_DATA); do $(install_sh_DATA) $(srcdir)/$$f $(export_datadir); done
 
-BUILT_SOURCES = export-data
+clean-data:
+	if [ "X$(top_srcdir)" != "X$(top_builddir)" ]; then for f in $(dist_noinst_PYTHON) $(dist_noinst_DATA) $(noinst_TMP); do $(RM) $(RM_FLAGS) $(export_datadir)/$$f; done; fi
 
-CLEANFILES = \
-	$(export_datadir)/$(noinst_PYTHON) \
-	$(export_datadir)/$(noinst_DATA) \
-	$(export_datadir)/$(noinst_TMP)
 
+BUILT_SOURCES = export-data
+clean-local: clean-data
+CLEANFILES = *.pyc
 
 # End of file 


Property changes on: short/3D/PyLith/trunk/unittests
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/libtests
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/libtests/bc
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -277,7 +277,81 @@
 } // testIntegrateJacobian
 
 // ----------------------------------------------------------------------
+// Test integrateJacobianLumped().
 void
+pylith::bc::TestAbsorbingDampers::testIntegrateJacobianLumped(void)
+{ // testIntegrateJacobianLumped
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  AbsorbingDampers bc;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &bc, &fields);
+
+  topology::Field<topology::Mesh> jacobian(mesh);
+  jacobian.label("Jacobian");
+  jacobian.vectorFieldType(topology::FieldBase::VECTOR);
+  jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
+  jacobian.allocate();
+
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+  CPPUNIT_ASSERT(!sieveMesh.isNull());
+
+  const topology::SubMesh& boundaryMesh = *bc._boundaryMesh;
+  const ALE::Obj<SieveSubMesh>& submesh = boundaryMesh.sieveMesh();
+  CPPUNIT_ASSERT(!submesh.isNull());
+
+  topology::Field<topology::Mesh>& solution = fields.solution();
+  const ALE::Obj<RealSection>& solutionSection = solution.section();
+  CPPUNIT_ASSERT(!solutionSection.isNull());
+
+  const double t = 1.0;
+  bc.integrateJacobian(jacobian, t, &fields);
+  CPPUNIT_ASSERT_EQUAL(false, bc.needNewJacobian());
+  jacobian.complete();
+
+  const double* valsMatrixE = _data->valsJacobian;
+  const int totalNumVertices = sieveMesh->depthStratum(0)->size();
+  const int sizeE = totalNumVertices * _data->spaceDim;
+  double_array valsE(sizeE);
+  const int spaceDim = _data->spaceDim;
+  for (int iVertex=0; iVertex < totalNumVertices; ++iVertex)
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      const int indexRow = (iVertex*spaceDim+iDim)*totalNumVertices*spaceDim;
+      double value = 0.0;
+      for (int jVertex=0; jVertex < totalNumVertices; ++jVertex)
+	value += valsMatrixE[indexRow + jVertex*spaceDim+iDim];
+      valsE[iVertex*spaceDim+iDim] = value;
+    } // for
+
+#if 0 // DEBUGGING
+  jacobian.view("JACOBIAN");
+  std::cout << "\n\nJACOBIAN FULL" << std::endl;
+  const int n = totalNumVertices*spaceDim;
+  for (int r=0; r < n; ++r) {
+    for (int c=0; c < n; ++c) 
+      std::cout << "  " << valsMatrixE[r*n+c];
+    std::cout << "\n";
+  } // for
+#endif // DEBUGGING
+
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  CPPUNIT_ASSERT(!jacobianSection.isNull());
+  const double* vals = jacobianSection->restrictSpace();
+  const int size = jacobianSection->sizeWithBC();
+  CPPUNIT_ASSERT_EQUAL(sizeE, size);
+
+  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);
+
+} // testIntegrateJacobianLumped
+
+// ----------------------------------------------------------------------
+void
 pylith::bc::TestAbsorbingDampers::_initialize(topology::Mesh* mesh,
 					      AbsorbingDampers* const bc,
 					      topology::SolutionFields* fields) const

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampers.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -71,6 +71,9 @@
   /// Test integrateJacobian().
   void testIntegrateJacobian(void);
 
+  /// Test integrateJacobianLumped().
+  void testIntegrateJacobianLumped(void);
+
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :
 

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersHex8.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersLine2.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -39,6 +39,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersQuad4.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersQuad4.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -39,6 +39,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTet4.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -39,6 +39,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////

Modified: short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTri3.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/TestAbsorbingDampersTri3.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -39,6 +39,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST_SUITE_END();
 
   // PUBLIC METHODS /////////////////////////////////////////////////////


Property changes on: short/3D/PyLith/trunk/unittests/libtests/bc/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/bc/test_bc.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/bc/test_bc.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/bc/test_bc.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -64,6 +64,9 @@
 
     // Finalize PETSc
     err = PetscFinalize(); CHKERRQ(err);
+  } catch (const std::exception& err) {
+    std::cerr << "Error: " << err.what() << std::endl;
+    abort();
   } catch (...) {
     abort();
   } // catch


Property changes on: short/3D/PyLith/trunk/unittests/libtests/faults
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -27,6 +27,7 @@
 	TestConstRateSlipFn.cc \
 	TestBruneSlipFn.cc \
 	TestLiuCosSlipFn.cc \
+	TestTimeHistorySlipFn.cc \
 	TestEqKinSrc.cc \
 	TestFaultCohesiveKin.cc \
 	TestFaultCohesiveKinLine2.cc \
@@ -49,7 +50,7 @@
 
 noinst_HEADERS = \
 	TestBruneSlipFn.hh \
-	TestLiuCosSlipFn.hh \
+	TestTimeHistorySlipFn.hh \
 	TestConstRateSlipFn.hh \
 	TestStepSlipFn.hh \
 	TestEqKinSrc.hh \

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -521,12 +521,12 @@
   topology::Jacobian jacobian(fields);
 
   const double t = 2.134;
-  fault.integrateJacobian(&jacobian, t, &fields);
+  fault.integrateJacobianAssembled(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
 
   jacobian.assemble("final_assembly");
 
-  //MatView(jacobian, PETSC_VIEWER_STDOUT_WORLD); // DEBUGGING
+  // MatView(jacobian.matrix(), PETSC_VIEWER_STDOUT_WORLD); // DEBUGGING
 
   const double* valsE = _data->valsJacobian;
   const int nrowsE = dispSection->sizeWithBC();
@@ -576,6 +576,77 @@
 } // testIntegrateJacobianAssembled
 
 // ----------------------------------------------------------------------
+// Test integrateJacobianAssembled() with lumped Jacobian.
+void
+pylith::faults::TestFaultCohesiveKin::testIntegrateJacobianAssembledLumped(void)
+{ // testIntegrateJacobianAssembledLumped
+  topology::Mesh mesh;
+  FaultCohesiveKin fault;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &fault, &fields);
+
+  topology::Field<topology::Mesh> jacobian(mesh);
+  jacobian.label("Jacobian");
+  jacobian.vectorFieldType(topology::FieldBase::VECTOR);
+  jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
+  jacobian.allocate();
+
+  const double t = 2.134;
+  fault.integrateJacobianAssembled(jacobian, t, &fields);
+  CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
+  jacobian.complete();
+
+#if 0 // DEBUGGING
+  jacobian.view("JACOBIAN");
+#endif // DEBUGGING
+
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  CPPUNIT_ASSERT(!jacobianSection.isNull());
+
+  int iVertex = 0;
+  const double tolerance = 1.0e-06;
+  const int spaceDim = _data->spaceDim;
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
+  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& vertices =
+    faultSieveMesh->depthStratum(0);
+  CPPUNIT_ASSERT(!vertices.isNull());
+  const SieveSubMesh::label_sequence::iterator verticesBegin = 
+    vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  SieveSubMesh::renumbering_type& renumbering = 
+    faultSieveMesh->getRenumbering();
+  const SieveMesh::renumbering_type::const_iterator renumberingBegin = 
+    renumbering.begin();
+  const SieveMesh::renumbering_type::const_iterator renumberingEnd = 
+    renumbering.end();
+  for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter, ++iVertex) {
+    SieveMesh::point_type meshVertex = -1;
+    bool found = false;
+
+    for (SieveMesh::renumbering_type::const_iterator r_iter = renumberingBegin;
+	 r_iter != renumberingEnd;
+	 ++r_iter) {
+      if (r_iter->second == *v_iter) {
+        meshVertex = r_iter->first;
+        found = true;
+        break;
+      } // if
+    } // for
+    CPPUNIT_ASSERT(found);
+    int fiberDim = jacobianSection->getFiberDimension(meshVertex);
+    CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
+    const double* jacobianVertex = jacobianSection->restrictPoint(meshVertex);
+    CPPUNIT_ASSERT(0 != jacobianVertex);
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, jacobianVertex[iDim],
+				   tolerance);
+  } // for
+} // testIntegrateJacobianAssembledLumped
+
+// ----------------------------------------------------------------------
 // Test updateStateVars().
 void
 pylith::faults::TestFaultCohesiveKin::testUpdateStateVars(void)
@@ -622,16 +693,16 @@
   const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
   SieveSubMesh::renumbering_type& renumbering = faultSieveMesh->getRenumbering();
 
-  // Compute expected cumulative slip using eqsrcs
-  topology::Field<topology::SubMesh> cumSlipE(*fault._faultMesh);
-  cumSlipE.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
-  cumSlipE.allocate();
-  const ALE::Obj<RealSection> cumSlipESection = cumSlipE.section();
-  CPPUNIT_ASSERT(!cumSlipESection.isNull());
+  // Compute expected slip using eqsrcs
+  topology::Field<topology::SubMesh> slipE(*fault._faultMesh);
+  slipE.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
+  slipE.allocate();
+  const ALE::Obj<RealSection> slipESection = slipE.section();
+  CPPUNIT_ASSERT(!slipESection.isNull());
 
-  const ALE::Obj<RealSection> cumSlipSection =
-    fault._fields->get("cumulative slip").section();
-  CPPUNIT_ASSERT(!cumSlipSection.isNull());
+  const ALE::Obj<RealSection> slipSection =
+    fault._fields->get("slip").section();
+  CPPUNIT_ASSERT(!slipSection.isNull());
 
   const FaultCohesiveKin::srcs_type::const_iterator srcsEnd = fault._eqSrcs.end();
   for (FaultCohesiveKin::srcs_type::iterator s_iter=fault._eqSrcs.begin(); 
@@ -640,7 +711,7 @@
     EqKinSrc* src = s_iter->second;
     assert(0 != src);
     if (t >= src->originTime())
-      src->slip(&cumSlipE, t);
+      src->slip(&slipE, t);
   } // for
 
   int iVertex = 0;
@@ -660,13 +731,13 @@
     } // for
     CPPUNIT_ASSERT(found);
 
-    // Check _cumSlip
-    int fiberDim = cumSlipSection->getFiberDimension(*v_iter);
+    // Check _slip
+    int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* slipV = cumSlipSection->restrictPoint(*v_iter);
+    const double* slipV = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipV);
 
-    const double* slipE = cumSlipESection->restrictPoint(*v_iter);
+    const double* slipE = slipESection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipE);
 
     for (int iDim=0; iDim < spaceDim; ++iDim) {

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -101,6 +101,9 @@
   /// Test integrateJacobianAssembled().
   void testIntegrateJacobianAssembled(void);
 
+  /// Test integrateJacobianAssembled() with lumped Jacobian.
+  void testIntegrateJacobianAssembledLumped(void);
+
   /// Test updateStateVars().
   void testUpdateStateVars(void);
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsHex8.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsHex8.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -41,6 +41,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -40,6 +40,8 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianAssembled );
+  CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestLiuCosSlipFn.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -407,9 +407,8 @@
                                 *mesh, sieveMesh->getIntSection(faultLabel));
   CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(faultLabel),
-                           faultId,
-                           firstFaultVertex, firstLagrangeVertex, firstFaultCell,
-                           useLagrangeConstraints);
+                           faultId, firstFaultVertex, firstLagrangeVertex,
+			   firstFaultCell, useLagrangeConstraints);
   // Need to copy coordinates from mesh to fault mesh since we are not
   // using create() instead of createParallel().
   const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh->sieveMesh();
@@ -481,9 +480,8 @@
                                 mesh, sieveMesh->getIntSection(data.faultLabel));
   CohesiveTopology::create(&mesh, faultMesh, faultBoundary, 
                            sieveMesh->getIntSection(data.faultLabel),
-                           data.faultId,
-                           firstFaultVertex, firstLagrangeVertex, firstFaultCell,
-                           useLagrangeConstraints);
+                           data.faultId, firstFaultVertex, firstLagrangeVertex,
+			   firstFaultCell, useLagrangeConstraints);
   // Need to copy coordinates from mesh to fault mesh since we are not
   // using create() instead of createParallel().
   const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();

Copied: short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,498 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestTimeHistorySlipFn.hh" // Implementation of class methods
+
+#include "pylith/faults/TimeHistorySlipFn.hh" // USES TimeHistorySlipFn
+
+#include "pylith/faults/CohesiveTopology.hh" // USES CohesiveTopology
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
+
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+#include "spatialdata/spatialdb/TimeHistory.hh" // USES TimeHistory
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestTimeHistorySlipFn );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::SieveSubMesh SieveSubMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+namespace pylith {
+  namespace faults {
+    namespace _TestTimeHistorySlipFn {
+      struct DataStruct {
+	const char* meshFilename;
+	const char* faultLabel;
+	const int faultId;
+	const char* finalSlipFilename;
+	const char* slipTimeFilename;
+	const char* timeHistoryFilename;
+	const int* constraintPts;
+	const double* amplitudeE;
+	const double* slipTimeE;
+	const int numConstraintPts;
+      }; // DataStruct
+    } // _TestTimeHistorySlipFn
+  } // faults
+} // pylith
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::faults::TestTimeHistorySlipFn::testConstructor(void)
+{ // testConstructor
+  TimeHistorySlipFn slipfn;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test dbAmplitude().
+void
+pylith::faults::TestTimeHistorySlipFn::testDbAmplitude(void)
+{ // testDbAmplitude
+  const char* label = "database ABC";
+  TimeHistorySlipFn slipfn;
+  
+  spatialdata::spatialdb::SimpleDB db(label);
+  slipfn.dbAmplitude(&db);
+
+  CPPUNIT_ASSERT(0 != slipfn._dbAmplitude);
+  CPPUNIT_ASSERT_EQUAL(std::string(label),
+		       std::string(slipfn._dbAmplitude->label()));
+  CPPUNIT_ASSERT(0 == slipfn._dbSlipTime);
+  CPPUNIT_ASSERT(0 == slipfn._dbTimeHistory);
+} // testDbAmplitude
+
+// ----------------------------------------------------------------------
+// Test dbSlipTime().
+void
+pylith::faults::TestTimeHistorySlipFn::testDbSlipTime(void)
+{ // testDbSlipTime
+  const char* label = "database ABCD";
+  TimeHistorySlipFn slipfn;
+  
+  spatialdata::spatialdb::SimpleDB db(label);
+  slipfn.dbSlipTime(&db);
+
+  CPPUNIT_ASSERT(0 != slipfn._dbSlipTime);
+  CPPUNIT_ASSERT_EQUAL(std::string(label),
+		       std::string(slipfn._dbSlipTime->label()));
+  CPPUNIT_ASSERT(0 == slipfn._dbAmplitude);
+  CPPUNIT_ASSERT(0 == slipfn._dbTimeHistory);
+} // testDbSlipTime
+
+// ----------------------------------------------------------------------
+// Test dbTimeHistory().
+void
+pylith::faults::TestTimeHistorySlipFn::testDbTimeHistory(void)
+{ // testDbTimeHistory
+  const char* label = "database ABCDE";
+  TimeHistorySlipFn slipfn;
+  
+  spatialdata::spatialdb::TimeHistory db(label);
+  slipfn.dbTimeHistory(&db);
+
+  CPPUNIT_ASSERT(0 != slipfn._dbTimeHistory);
+  CPPUNIT_ASSERT_EQUAL(std::string(label),
+		       std::string(slipfn._dbTimeHistory->label()));
+  CPPUNIT_ASSERT(0 == slipfn._dbAmplitude);
+  CPPUNIT_ASSERT(0 == slipfn._dbSlipTime);
+} // testDbTimeHistory
+
+// ----------------------------------------------------------------------
+// Test initialize() in 1-D.
+void
+pylith::faults::TestTimeHistorySlipFn::testInitialize1D(void)
+{ // testInitialize1D
+  const char* meshFilename = "data/line2.mesh";
+  const char* faultLabel = "fault";
+  const int faultId = 2;
+  const char* finalSlipFilename = "data/line2_finalslip.spatialdb";
+  const char* slipTimeFilename = "data/line2_sliptime.spatialdb";
+  const char* timeHistoryFilename = "data/slipfn.timedb";
+  const int constraintPts[] = { 3 };
+  const double amplitudeE[] = { 2.3 };
+  const double slipTimeE[] = { 1.2 };
+  const int numConstraintPts = 1;
+
+  _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
+				       faultLabel,
+				       faultId,
+				       finalSlipFilename,
+				       slipTimeFilename,
+				       timeHistoryFilename,
+				       constraintPts,
+				       amplitudeE,
+				       slipTimeE,
+				       numConstraintPts};
+  _testInitialize(data);
+} // testInitialize1D
+
+// ----------------------------------------------------------------------
+// Test initialize() in 2-D.
+void
+pylith::faults::TestTimeHistorySlipFn::testInitialize2D(void)
+{ // testInitialize2D
+  const char* meshFilename = "data/tri3.mesh";
+  const char* faultLabel = "fault";
+  const int faultId = 2;
+  const char* finalSlipFilename = "data/tri3_finalslip.spatialdb";
+  const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
+  const char* timeHistoryFilename = "data/slipfn.timedb";
+  const int constraintPts[] = { 3, 4 };
+  const double amplitudeE[] = { 2.3, 0.1, 
+				2.4, 0.2};
+  const double slipTimeE[] = { 1.2, 1.3 };
+  const int numConstraintPts = 2;
+
+  _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
+				       faultLabel,
+				       faultId,
+				       finalSlipFilename,
+				       slipTimeFilename,
+				       timeHistoryFilename,
+				       constraintPts,
+				       amplitudeE,
+				       slipTimeE,
+				       numConstraintPts};
+  _testInitialize(data);
+} // testInitialize2D
+
+// ----------------------------------------------------------------------
+// Test initialize() in 3-D.
+void
+pylith::faults::TestTimeHistorySlipFn::testInitialize3D(void)
+{ // testInitialize3D
+  const char* meshFilename = "data/tet4.mesh";
+  const char* faultLabel = "fault";
+  const int faultId = 2;
+  const char* finalSlipFilename = "data/tet4_finalslip.spatialdb";
+  const char* slipTimeFilename = "data/tet4_sliptime.spatialdb";
+  const char* timeHistoryFilename = "data/slipfn.timedb";
+  const int constraintPts[] = { 3, 4, 5 };
+  const double amplitudeE[] = { 2.3, -0.7, 0.1,
+				2.4, -0.8, 0.2,
+				2.5, -0.9, 0.3 };
+  const double slipTimeE[] = { 1.2, 1.3, 1.4 };
+  const int numConstraintPts = 3;
+
+  _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
+				       faultLabel,
+				       faultId,
+				       finalSlipFilename,
+				       slipTimeFilename,
+				       timeHistoryFilename,
+				       constraintPts,
+				       amplitudeE,
+				       slipTimeE,
+				       numConstraintPts};
+  _testInitialize(data);
+} // testInitialize3D
+
+// ----------------------------------------------------------------------
+// Test slip().
+void
+pylith::faults::TestTimeHistorySlipFn::testSlip(void)
+{ // testSlip
+  const double slipTimeE[] = { 1.2, 1.3 };
+  const double slipE[] = { 0.92, 0.04,
+			   0.84, 0.07 };
+  const double originTime = 5.064;
+
+  topology::Mesh mesh;
+  topology::SubMesh faultMesh;
+  TimeHistorySlipFn slipfn;
+  spatialdata::spatialdb::TimeHistory th;
+  _initialize(&mesh, &faultMesh, &slipfn, &th, originTime);
+  
+  const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
+  CPPUNIT_ASSERT(0 != cs);
+
+  const int spaceDim = cs->spaceDim();
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();
+  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& vertices =
+    faultSieveMesh->depthStratum(0);
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+  topology::Field<topology::SubMesh> slip(faultMesh);
+  slip.newSection(vertices, spaceDim);
+  slip.allocate();
+
+  const double t = 2.0;
+  slipfn.slip(&slip, originTime+t);
+
+  const double tolerance = 1.0e-06;
+  int iPoint = 0;
+  const ALE::Obj<RealSection>& slipSection = slip.section();
+  CPPUNIT_ASSERT(!slipSection.isNull());
+  for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter, ++iPoint) {
+    const int fiberDim = slipSection->getFiberDimension(*v_iter);
+    CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
+    const double* vals = slipSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != vals);
+    
+    for (int iDim=0; iDim < fiberDim; ++iDim)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE[iPoint*spaceDim+iDim], 
+				   vals[iDim], tolerance);
+  } // for
+} // testSlip
+
+// ----------------------------------------------------------------------
+// Test slipIncr().
+void
+pylith::faults::TestTimeHistorySlipFn::testSlipIncr(void)
+{ // testSlipIncr
+  const double slipTimeE[] = { 1.2, 1.3 };
+  const double slipE[] = { 0.92, 0.04, 
+			   0.984, 0.082};
+  const double originTime = 1.064;
+
+  topology::Mesh mesh;
+  topology::SubMesh faultMesh;
+  TimeHistorySlipFn slipfn;
+  spatialdata::spatialdb::TimeHistory th;
+  _initialize(&mesh, &faultMesh, &slipfn, &th, originTime);
+
+  const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
+  CPPUNIT_ASSERT(0 != cs);
+
+  const int spaceDim = cs->spaceDim();
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();
+  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& vertices =
+    faultSieveMesh->depthStratum(0);
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+  topology::Field<topology::SubMesh> slip(faultMesh);
+  slip.newSection(vertices, spaceDim);
+  slip.allocate();
+
+  const double t0 = 3.2;
+  const double t1 = 9.7;
+  slipfn.slipIncr(&slip, originTime+t0, originTime+t1);
+
+  const double tolerance = 1.0e-06;
+  int iPoint = 0;
+  const ALE::Obj<RealSection>& slipSection = slip.section();
+  CPPUNIT_ASSERT(!slipSection.isNull());
+  for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter, ++iPoint) {
+
+    const int fiberDim = slipSection->getFiberDimension(*v_iter);
+    CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
+    const double* vals = slipSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != vals);
+
+    for (int iDim=0; iDim < fiberDim; ++iDim)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE[iPoint*spaceDim+iDim],
+				   vals[iDim], tolerance);
+  } // for
+} // testSlipIncr
+
+// ----------------------------------------------------------------------
+// Initialize TimeHistorySlipFn.
+void
+pylith::faults::TestTimeHistorySlipFn::_initialize(topology::Mesh* mesh,
+					      topology::SubMesh* faultMesh,
+					      TimeHistorySlipFn* slipfn,
+					      spatialdata::spatialdb::TimeHistory* th,
+					      const double originTime)
+{ // _initialize
+  assert(0 != slipfn);
+
+  const char* meshFilename = "data/tri3.mesh";
+  const char* faultLabel = "fault";
+  const int faultId = 2;
+  const char* finalSlipFilename = "data/tri3_finalslip.spatialdb";
+  const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
+  const char* timeHistoryFilename = "data/slipfn.timedb";
+
+  meshio::MeshIOAscii meshIO;
+  meshIO.filename(meshFilename);
+  meshIO.debug(false);
+  meshIO.interpolate(false);
+  meshIO.read(mesh);
+
+  // Set up coordinates
+  spatialdata::geocoords::CSCart cs;
+  cs.setSpaceDim(mesh->dimension());
+  cs.initialize();
+  mesh->coordsys(&cs);
+
+  // Create fault mesh
+  int firstFaultVertex = 0;
+  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  int firstFaultCell   = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  const bool useLagrangeConstraints = true;
+  if (useLagrangeConstraints) {
+    firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+  }
+  ALE::Obj<ALE::Mesh> faultBoundary = 0;
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
+  CPPUNIT_ASSERT(!sieveMesh.isNull());
+  CohesiveTopology::createFault(faultMesh, faultBoundary,
+                                *mesh, sieveMesh->getIntSection(faultLabel));
+  CohesiveTopology::create(mesh, *faultMesh, faultBoundary, 
+                           sieveMesh->getIntSection(faultLabel),
+                           faultId, firstFaultVertex, firstLagrangeVertex, 
+			   firstFaultCell, useLagrangeConstraints);
+  // Need to copy coordinates from mesh to fault mesh since we are not
+  // using create() instead of createParallel().
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh->sieveMesh();
+  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+  faultSieveMesh->setRealSection("coordinates", 
+				 sieveMesh->getRealSection("coordinates"));
+
+  // Setup databases
+  spatialdata::spatialdb::SimpleDB dbAmplitude("slip amplitude");
+  spatialdata::spatialdb::SimpleIOAscii ioFinalSlip;
+  ioFinalSlip.filename(finalSlipFilename);
+  dbAmplitude.ioHandler(&ioFinalSlip);
+  
+  spatialdata::spatialdb::SimpleDB dbSlipTime("slip time");
+  spatialdata::spatialdb::SimpleIOAscii ioSlipTime;
+  ioSlipTime.filename(slipTimeFilename);
+  dbSlipTime.ioHandler(&ioSlipTime);
+  
+  th->label("time history");
+  th->filename(timeHistoryFilename);
+
+  spatialdata::units::Nondimensional normalizer;
+
+  // setup TimeHistorySlipFn
+  slipfn->dbAmplitude(&dbAmplitude);
+  slipfn->dbSlipTime(&dbSlipTime);
+  slipfn->dbTimeHistory(th);
+  
+  slipfn->initialize(*faultMesh, normalizer, originTime);
+} // _initialize
+
+// ----------------------------------------------------------------------
+// Test initialize().
+void
+pylith::faults::TestTimeHistorySlipFn::_testInitialize(const _TestTimeHistorySlipFn::DataStruct& data)
+{ // _testInitialize
+  typedef std::set<Mesh::point_type>::const_iterator vert_iterator;  
+
+  // Setup mesh
+  topology::Mesh mesh;
+  meshio::MeshIOAscii meshIO;
+  meshIO.filename(data.meshFilename);
+  meshIO.debug(false);
+  meshIO.interpolate(false);
+  meshIO.read(&mesh);
+
+  // Set up coordinates
+  spatialdata::geocoords::CSCart cs;
+  const int spaceDim = mesh.dimension();
+  cs.setSpaceDim(spaceDim);
+  cs.initialize();
+  mesh.coordsys(&cs);
+
+  // Create fault mesh
+  topology::SubMesh faultMesh;
+  int firstFaultVertex = 0;
+  int firstLagrangeVertex = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+  int firstFaultCell   = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+  const bool useLagrangeConstraints = true;
+  if (useLagrangeConstraints) {
+    firstFaultCell += mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+  }
+  ALE::Obj<ALE::Mesh> faultBoundary = 0;
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+  CPPUNIT_ASSERT(!sieveMesh.isNull());
+  CohesiveTopology::createFault(&faultMesh, faultBoundary,
+                                mesh, sieveMesh->getIntSection(data.faultLabel));
+  CohesiveTopology::create(&mesh, faultMesh, faultBoundary, 
+                           sieveMesh->getIntSection(data.faultLabel),
+                           data.faultId, firstFaultVertex, firstLagrangeVertex,
+			   firstFaultCell, useLagrangeConstraints);
+  // Need to copy coordinates from mesh to fault mesh since we are not
+  // using create() instead of createParallel().
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();
+  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+  faultSieveMesh->setRealSection("coordinates", 
+				 sieveMesh->getRealSection("coordinates"));
+
+  // Setup databases
+  spatialdata::spatialdb::SimpleDB dbAmplitude("slip amplitude");
+  spatialdata::spatialdb::SimpleIOAscii ioFinalSlip;
+  ioFinalSlip.filename(data.finalSlipFilename);
+  dbAmplitude.ioHandler(&ioFinalSlip);
+  
+  spatialdata::spatialdb::SimpleDB dbSlipTime("slip time");
+  spatialdata::spatialdb::SimpleIOAscii ioSlipTime;
+  ioSlipTime.filename(data.slipTimeFilename);
+  dbSlipTime.ioHandler(&ioSlipTime);
+  
+  spatialdata::spatialdb::TimeHistory dbTimeHistory("time history");
+  dbTimeHistory.filename(data.timeHistoryFilename);
+
+  // setup TimeHistorySlipFn
+  TimeHistorySlipFn slipfn;
+  slipfn.dbAmplitude(&dbAmplitude);
+  slipfn.dbSlipTime(&dbSlipTime);
+  slipfn.dbTimeHistory(&dbTimeHistory);
+  
+  spatialdata::units::Nondimensional normalizer;
+  const double originTime = 5.353;
+  
+  slipfn.initialize(faultMesh, normalizer, originTime);
+
+  const ALE::Obj<SieveMesh::label_sequence>& vertices =
+    faultSieveMesh->depthStratum(0);
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+
+  CPPUNIT_ASSERT(0 != slipfn._parameters);
+  const ALE::Obj<RealSection>& finalSlipSection =
+    slipfn._parameters->get("slip amplitude").section();
+  CPPUNIT_ASSERT(!finalSlipSection.isNull());
+  const ALE::Obj<RealSection>& slipTimeSection =
+    slipfn._parameters->get("slip time").section();
+  CPPUNIT_ASSERT(!slipTimeSection.isNull());
+
+  const double tolerance = 1.0e-06;
+  int iPoint = 0;
+  for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter, ++iPoint) {
+    CPPUNIT_ASSERT_EQUAL(spaceDim, finalSlipSection->getFiberDimension(*v_iter));
+    const double* amplitudeVertex = finalSlipSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != amplitudeVertex);
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(data.amplitudeE[iPoint*spaceDim+iDim],
+				   amplitudeVertex[iDim],
+				   tolerance);
+
+    CPPUNIT_ASSERT_EQUAL(1, slipTimeSection->getFiberDimension(*v_iter));
+    const double* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != slipTimeVertex);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
+				 slipTimeVertex[0], tolerance);
+  } // for
+} // _testInitialize
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestTimeHistorySlipFn.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,131 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/faults/TestTimeHistorySlipFn.hh
+ *
+ * @brief C++ TestTimeHistorySlipFn object
+ *
+ * C++ unit testing for TimeHistorySlipFn.
+ */
+
+#if !defined(pylith_faults_testtimehistoryslipfn_hh)
+#define pylith_faults_testtimehistoryslipfn_hh
+
+#include "pylith/faults/faultsfwd.hh" // USES TimeHistorySlipFn
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SubMesh
+#include "spatialdata/spatialdb/spatialdbfwd.hh" // USES TimeHistory
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace faults {
+    class TestTimeHistorySlipFn;
+
+    namespace _TestTimeHistorySlipFn {
+      struct DataStruct;
+    } // _TimeHistorySlipTimeFn
+  } // faults
+} // pylith
+
+/// C++ unit testing for TimeHistorySlipFn
+class pylith::faults::TestTimeHistorySlipFn : public CppUnit::TestFixture
+{ // class TestTimeHistorySlipFn
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestTimeHistorySlipFn );
+
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testDbAmplitude );
+  CPPUNIT_TEST( testDbSlipTime );
+  CPPUNIT_TEST( testDbTimeHistory );
+  CPPUNIT_TEST( testInitialize1D );
+  CPPUNIT_TEST( testInitialize2D );
+  CPPUNIT_TEST( testInitialize3D );
+  CPPUNIT_TEST( testSlip );
+  CPPUNIT_TEST( testSlipIncr );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test constructor.
+  void testConstructor(void);
+
+  /// Test dbAmplitude().
+  void testDbAmplitude(void);
+
+  /// Test dbSlipTime().
+  void testDbSlipTime(void);
+
+  /// Test dbTimeHistory().
+  void testDbTimeHistory(void);
+
+  /// Test initialize() in 1-D.
+  void testInitialize1D(void);
+
+  /// Test initialize() in 2-D.
+  void testInitialize2D(void);
+
+  /// Test initialize() in 3-D.
+  void testInitialize3D(void);
+
+  /// Test slip().
+  void testSlip(void);
+
+  /// Test slipIncr().
+  void testSlipIncr(void);
+
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Initialize TimeHistorySlipFn.
+   *
+   * @param mesh Finite-element mesh of domain.
+   * @param faultMesh Finite-element mesh of fault.
+   * @param slipfn Step slip function.
+   * @param th Time history database.
+   * @param originTime Origin time for earthquake rupture.
+   */
+  static
+  void _initialize(topology::Mesh* mesh,
+		   topology::SubMesh* faultMesh,
+		   TimeHistorySlipFn* slipfn,
+		   spatialdata::spatialdb::TimeHistory* th,
+		   const double originTime);
+
+  /** Test intialize().
+   *
+   * @param data Data for initialization and testing of TimeHistorySlipFn.
+   */
+  static
+  void _testInitialize(const _TestTimeHistorySlipFn::DataStruct& data);
+
+  /** Slip time function.
+   *
+   * @param t Time relative to when slip begins.
+   * @param finalSlip Final slip.
+   * @param riseTime Rise time (t95).
+   */
+  static
+  double _slipFn(const double t,
+		 const double finalSlip,
+		 const double riseTime);
+
+}; // class TestTimeHistorySlipFn
+
+#endif // pylith_faults_testtimehistoryslipfn_hh
+
+
+// End of file 


Property changes on: short/3D/PyLith/trunk/unittests/libtests/faults/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,6 +11,7 @@
 #
 
 dist_noinst_DATA = \
+	slipfn.timedb \
 	bulkprops_1d.spatialdb \
 	bulkprops_2d.spatialdb \
 	bulkprops_3d.spatialdb \

Copied: short/3D/PyLith/trunk/unittests/libtests/faults/data/slipfn.timedb (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/slipfn.timedb)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/slipfn.timedb	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/slipfn.timedb	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,10 @@
+#TIME HISTORY ascii
+TimeHistory {
+  num-points = 5
+  time-units = second
+}
+ 0.0  0.0
+ 1.0  0.5
+ 4.0  0.8
+ 8.0  1.0
+10.0  1.0


Property changes on: short/3D/PyLith/trunk/unittests/libtests/feassemble
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -53,6 +53,12 @@
 	TestElasticityExplicit2DQuadratic.cc \
 	TestElasticityExplicit3DLinear.cc \
 	TestElasticityExplicit3DQuadratic.cc \
+	TestElasticityExplicitGrav1DLinear.cc \
+	TestElasticityExplicitGrav1DQuadratic.cc \
+	TestElasticityExplicitGrav2DLinear.cc \
+	TestElasticityExplicitGrav2DQuadratic.cc \
+	TestElasticityExplicitGrav3DLinear.cc \
+	TestElasticityExplicitGrav3DQuadratic.cc \
 	TestElasticityImplicit.cc \
 	TestElasticityImplicit1DLinear.cc \
 	TestElasticityImplicit1DQuadratic.cc \
@@ -66,6 +72,33 @@
 	TestElasticityImplicitGrav2DQuadratic.cc \
 	TestElasticityImplicitGrav3DLinear.cc \
 	TestElasticityImplicitGrav3DQuadratic.cc \
+	TestIntegratorElasticityLgDeform.cc \
+	TestElasticityExplicitLgDeform.cc \
+	TestElasticityExplicitLgDeform1DLinear.cc \
+	TestElasticityExplicitLgDeform1DQuadratic.cc \
+	TestElasticityExplicitLgDeform2DLinear.cc \
+	TestElasticityExplicitLgDeform2DQuadratic.cc \
+	TestElasticityExplicitLgDeform3DLinear.cc \
+	TestElasticityExplicitLgDeform3DQuadratic.cc \
+	TestElasticityExplicitLgDeformGrav1DLinear.cc \
+	TestElasticityExplicitLgDeformGrav1DQuadratic.cc \
+	TestElasticityExplicitLgDeformGrav2DLinear.cc \
+	TestElasticityExplicitLgDeformGrav2DQuadratic.cc \
+	TestElasticityExplicitLgDeformGrav3DLinear.cc \
+	TestElasticityExplicitLgDeformGrav3DQuadratic.cc \
+	TestElasticityImplicitLgDeform.cc \
+	TestElasticityImplicitLgDeform1DLinear.cc \
+	TestElasticityImplicitLgDeform1DQuadratic.cc \
+	TestElasticityImplicitLgDeform2DLinear.cc \
+	TestElasticityImplicitLgDeform2DQuadratic.cc \
+	TestElasticityImplicitLgDeform3DLinear.cc \
+	TestElasticityImplicitLgDeform3DQuadratic.cc \
+	TestElasticityImplicitLgDeformGrav1DLinear.cc \
+	TestElasticityImplicitLgDeformGrav1DQuadratic.cc \
+	TestElasticityImplicitLgDeformGrav2DLinear.cc \
+	TestElasticityImplicitLgDeformGrav2DQuadratic.cc \
+	TestElasticityImplicitLgDeformGrav3DLinear.cc \
+	TestElasticityImplicitLgDeformGrav3DQuadratic.cc \
 	test_feassemble.cc
 
 
@@ -79,6 +112,12 @@
 	TestElasticityExplicit2DQuadratic.hh \
 	TestElasticityExplicit3DLinear.hh \
 	TestElasticityExplicit3DQuadratic.hh \
+	TestElasticityExplicitGrav1DLinear.hh \
+	TestElasticityExplicitGrav1DQuadratic.hh \
+	TestElasticityExplicitGrav2DLinear.hh \
+	TestElasticityExplicitGrav2DQuadratic.hh \
+	TestElasticityExplicitGrav3DLinear.hh \
+	TestElasticityExplicitGrav3DQuadratic.hh \
 	TestElasticityImplicit.hh \
 	TestElasticityImplicit1DLinear.hh \
 	TestElasticityImplicit1DQuadratic.hh \
@@ -92,6 +131,33 @@
 	TestElasticityImplicitGrav2DQuadratic.hh \
 	TestElasticityImplicitGrav3DLinear.hh \
 	TestElasticityImplicitGrav3DQuadratic.hh \
+	TestIntegratorElasticityLgDeform.hh \
+	TestElasticityExplicitLgDeform.hh \
+	TestElasticityExplicitLgDeform1DLinear.hh \
+	TestElasticityExplicitLgDeform1DQuadratic.hh \
+	TestElasticityExplicitLgDeform2DLinear.hh \
+	TestElasticityExplicitLgDeform2DQuadratic.hh \
+	TestElasticityExplicitLgDeform3DLinear.hh \
+	TestElasticityExplicitLgDeform3DQuadratic.hh \
+	TestElasticityExplicitLgDeformGrav1DLinear.hh \
+	TestElasticityExplicitLgDeformGrav1DQuadratic.hh \
+	TestElasticityExplicitLgDeformGrav2DLinear.hh \
+	TestElasticityExplicitLgDeformGrav2DQuadratic.hh \
+	TestElasticityExplicitLgDeformGrav3DLinear.hh \
+	TestElasticityExplicitLgDeformGrav3DQuadratic.hh \
+	TestElasticityImplicitLgDeform.hh \
+	TestElasticityImplicitLgDeform1DLinear.hh \
+	TestElasticityImplicitLgDeform1DQuadratic.hh \
+	TestElasticityImplicitLgDeform2DLinear.hh \
+	TestElasticityImplicitLgDeform2DQuadratic.hh \
+	TestElasticityImplicitLgDeform3DLinear.hh \
+	TestElasticityImplicitLgDeform3DQuadratic.hh \
+	TestElasticityImplicitLgDeformGrav1DLinear.hh \
+	TestElasticityImplicitLgDeformGrav1DQuadratic.hh \
+	TestElasticityImplicitLgDeformGrav2DLinear.hh \
+	TestElasticityImplicitLgDeformGrav2DQuadratic.hh \
+	TestElasticityImplicitLgDeformGrav3DLinear.hh \
+	TestElasticityImplicitLgDeformGrav3DQuadratic.hh \
 	TestGeometryPoint1D.hh \
 	TestGeometryPoint2D.hh \
 	TestGeometryPoint3D.hh \
@@ -139,6 +205,12 @@
 	data/ElasticityExplicitData2DQuadratic.cc \
 	data/ElasticityExplicitData3DLinear.cc \
 	data/ElasticityExplicitData3DQuadratic.cc \
+	data/ElasticityExplicitGravData1DLinear.cc \
+	data/ElasticityExplicitGravData1DQuadratic.cc \
+	data/ElasticityExplicitGravData2DLinear.cc \
+	data/ElasticityExplicitGravData2DQuadratic.cc \
+	data/ElasticityExplicitGravData3DLinear.cc \
+	data/ElasticityExplicitGravData3DQuadratic.cc \
 	data/ElasticityImplicitData1DLinear.cc \
 	data/ElasticityImplicitData1DQuadratic.cc \
 	data/ElasticityImplicitData2DLinear.cc \
@@ -151,6 +223,30 @@
 	data/ElasticityImplicitGravData2DQuadratic.cc \
 	data/ElasticityImplicitGravData3DLinear.cc \
 	data/ElasticityImplicitGravData3DQuadratic.cc \
+	data/ElasticityExplicitLgDeformData1DLinear.cc \
+	data/ElasticityExplicitLgDeformData1DQuadratic.cc \
+	data/ElasticityExplicitLgDeformData2DLinear.cc \
+	data/ElasticityExplicitLgDeformData2DQuadratic.cc \
+	data/ElasticityExplicitLgDeformData3DLinear.cc \
+	data/ElasticityExplicitLgDeformData3DQuadratic.cc \
+	data/ElasticityExplicitLgDeformGravData1DLinear.cc \
+	data/ElasticityExplicitLgDeformGravData1DQuadratic.cc \
+	data/ElasticityExplicitLgDeformGravData2DLinear.cc \
+	data/ElasticityExplicitLgDeformGravData2DQuadratic.cc \
+	data/ElasticityExplicitLgDeformGravData3DLinear.cc \
+	data/ElasticityExplicitLgDeformGravData3DQuadratic.cc \
+	data/ElasticityImplicitLgDeformData1DLinear.cc \
+	data/ElasticityImplicitLgDeformData1DQuadratic.cc \
+	data/ElasticityImplicitLgDeformData2DLinear.cc \
+	data/ElasticityImplicitLgDeformData2DQuadratic.cc \
+	data/ElasticityImplicitLgDeformData3DLinear.cc \
+	data/ElasticityImplicitLgDeformData3DQuadratic.cc \
+	data/ElasticityImplicitLgDeformGravData1DLinear.cc \
+	data/ElasticityImplicitLgDeformGravData1DQuadratic.cc \
+	data/ElasticityImplicitLgDeformGravData2DLinear.cc \
+	data/ElasticityImplicitLgDeformGravData2DQuadratic.cc \
+	data/ElasticityImplicitLgDeformGravData3DLinear.cc \
+	data/ElasticityImplicitLgDeformGravData3DQuadratic.cc \
 	data/QuadratureData.cc \
 	data/QuadratureData1DLinear.cc \
 	data/QuadratureData1DQuadratic.cc \
@@ -189,6 +285,12 @@
 	data/ElasticityExplicitData2DQuadratic.hh \
 	data/ElasticityExplicitData3DLinear.hh \
 	data/ElasticityExplicitData3DQuadratic.hh \
+	data/ElasticityExplicitGravData1DLinear.hh \
+	data/ElasticityExplicitGravData1DQuadratic.hh \
+	data/ElasticityExplicitGravData2DLinear.hh \
+	data/ElasticityExplicitGravData2DQuadratic.hh \
+	data/ElasticityExplicitGravData3DLinear.hh \
+	data/ElasticityExplicitGravData3DQuadratic.hh \
 	data/ElasticityImplicitData1DLinear.hh \
 	data/ElasticityImplicitData1DQuadratic.hh \
 	data/ElasticityImplicitData2DLinear.hh \
@@ -201,6 +303,30 @@
 	data/ElasticityImplicitGravData2DQuadratic.hh \
 	data/ElasticityImplicitGravData3DLinear.hh \
 	data/ElasticityImplicitGravData3DQuadratic.hh \
+	data/ElasticityExplicitLgDeformData1DLinear.hh \
+	data/ElasticityExplicitLgDeformData1DQuadratic.hh \
+	data/ElasticityExplicitLgDeformData2DLinear.hh \
+	data/ElasticityExplicitLgDeformData2DQuadratic.hh \
+	data/ElasticityExplicitLgDeformData3DLinear.hh \
+	data/ElasticityExplicitLgDeformData3DQuadratic.hh \
+	data/ElasticityExplicitLgDeformGravData1DLinear.hh \
+	data/ElasticityExplicitLgDeformGravData1DQuadratic.hh \
+	data/ElasticityExplicitLgDeformGravData2DLinear.hh \
+	data/ElasticityExplicitLgDeformGravData2DQuadratic.hh \
+	data/ElasticityExplicitLgDeformGravData3DLinear.hh \
+	data/ElasticityExplicitLgDeformGravData3DQuadratic.hh \
+	data/ElasticityImplicitLgDeformData1DLinear.hh \
+	data/ElasticityImplicitLgDeformData1DQuadratic.hh \
+	data/ElasticityImplicitLgDeformData2DLinear.hh \
+	data/ElasticityImplicitLgDeformData2DQuadratic.hh \
+	data/ElasticityImplicitLgDeformData3DLinear.hh \
+	data/ElasticityImplicitLgDeformData3DQuadratic.hh \
+	data/ElasticityImplicitLgDeformGravData1DLinear.hh \
+	data/ElasticityImplicitLgDeformGravData1DQuadratic.hh \
+	data/ElasticityImplicitLgDeformGravData2DLinear.hh \
+	data/ElasticityImplicitLgDeformGravData2DQuadratic.hh \
+	data/ElasticityImplicitLgDeformGravData3DLinear.hh \
+	data/ElasticityImplicitLgDeformGravData3DQuadratic.hh \
 	data/QuadratureData.hh \
 	data/QuadratureData1DLinear.hh \
 	data/QuadratureData1DQuadratic.hh \

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -181,6 +181,13 @@
   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)
@@ -248,6 +255,70 @@
 } // testIntegrateJacobian
 
 // ----------------------------------------------------------------------
+// Test integrateJacobian().
+void
+pylith::feassemble::TestElasticityExplicit::testIntegrateJacobianLumped(void)
+{ // testIntegrateJacobian
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityExplicit integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+  integrator._needNewJacobian = true;
+
+  topology::Field<topology::Mesh> jacobian(mesh);
+  jacobian.label("Jacobian");
+  jacobian.vectorFieldType(topology::FieldBase::VECTOR);
+  jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
+  jacobian.allocate();
+
+  const double t = 1.0;
+  integrator.integrateJacobian(jacobian, t, &fields);
+  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
+
+#if 0 // DEBUGGING
+  // TEMPORARY
+  jacobian.view("JACOBIAN");
+  std::cout << "\n\nJACOBIAN FULL" << std::endl;
+  const int n = numBasis*spaceDim;
+  for (int r=0; r < n; ++r) {
+    for (int c=0; c < n; ++c) 
+      std::cout << "  " << valsMatrixE[r*n+c];
+    std::cout << "\n";
+  } // for
+#endif // DEBUGGING
+
+  const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+  CPPUNIT_ASSERT(!jacobianSection.isNull());
+  const double* vals = jacobianSection->restrictSpace();
+  const int size = jacobianSection->sizeWithBC();
+  CPPUNIT_ASSERT_EQUAL(sizeE, size);
+
+  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);
+} // testIntegrateJacobianLumped
+
+// ----------------------------------------------------------------------
 // Test updateStateVars().
 void 
 pylith::feassemble::TestElasticityExplicit::testUpdateStateVars(void)
@@ -344,9 +415,6 @@
   mesh->coordsys(&cs);
   mesh->nondimensionalize(normalizer);
 
-  // Setup gravityField
-  _gravityField = 0;
-
   // Setup material
   spatialdata::spatialdb::SimpleIOAscii iohandler;
   iohandler.filename(_data->matDBFilename);

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -89,6 +89,9 @@
   /// Test integrateJacobian().
   void testIntegrateJacobian(void);
 
+  /// Test integrateJacobianLumped().
+  void testIntegrateJacobianLumped(void);
+
   /// Test updateStateVars().
   void testUpdateStateVars(void);
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
   TestElasticityExplicit::setUp();
 
   _data = new ElasticityExplicitData1DLinear();
+  _gravityField = 0;
   GeometryLine1D geometry;
   CPPUNIT_ASSERT(0 != _quadrature);
   _quadrature->refGeometry(&geometry);

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -41,6 +41,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testStableTimeStep );
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
   TestElasticityExplicit::setUp();
 
   _data = new ElasticityExplicitData1DQuadratic();
+  _gravityField = 0;
   GeometryLine1D geometry;
   CPPUNIT_ASSERT(0 != _quadrature);
   _quadrature->refGeometry(&geometry);

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -41,6 +41,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testStableTimeStep );
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
   TestElasticityExplicit::setUp();
 
   _data = new ElasticityExplicitData2DLinear();
+  _gravityField = 0;
   CPPUNIT_ASSERT(0 != _quadrature);
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -41,6 +41,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testStableTimeStep );
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
   TestElasticityExplicit::setUp();
 
   _data = new ElasticityExplicitData2DQuadratic();
+  _gravityField = 0;
   CPPUNIT_ASSERT(0 != _quadrature);
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -41,6 +41,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testStableTimeStep );
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
   TestElasticityExplicit::setUp();
 
   _data = new ElasticityExplicitData3DLinear();
+  _gravityField = 0;
   CPPUNIT_ASSERT(0 != _quadrature);
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -41,6 +41,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testStableTimeStep );
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -32,6 +32,7 @@
   TestElasticityExplicit::setUp();
 
   _data = new ElasticityExplicitData3DQuadratic();
+  _gravityField = 0;
   CPPUNIT_ASSERT(0 != _quadrature);
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicit3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -41,6 +41,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testStableTimeStep );
 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitGrav1DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitGravData1DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitGrav1DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitGrav1DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicit::setUp();
+
+  _data = new ElasticityExplicitGravData1DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryLine1D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticStrain1D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicit object
+ *
+ * C++ unit testing for ElasticityExplicit with 1-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitgrav1dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitgrav1dlinear_hh
+
+#include "TestElasticityExplicit.hh" // ISA TestElasticityExplicit
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitGrav1DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicit
+class pylith::feassemble::TestElasticityExplicitGrav1DLinear :
+  public TestElasticityExplicit
+{ // class TestElasticityExplicit1DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitGrav1DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitGrav1DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitgrav1dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitGrav1DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitGravData1DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitGrav1DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitGrav1DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicit::setUp();
+
+  _data = new ElasticityExplicitGravData1DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryLine1D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticStrain1D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicit object
+ *
+ * C++ unit testing for ElasticityExplicit with 1-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitgrav1dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitgrav1dquadratic_hh
+
+#include "TestElasticityExplicit.hh" // ISA TestElasticityExplicit
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitGrav1DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicit
+class pylith::feassemble::TestElasticityExplicitGrav1DQuadratic :
+  public TestElasticityExplicit
+{ // class TestElasticityExplicit1DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitGrav1DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitGrav1DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitgrav1dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitGrav2DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitGravData2DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitGrav2DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitGrav2DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicit::setUp();
+
+  _data = new ElasticityExplicitGravData2DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicit object
+ *
+ * C++ unit testing for ElasticityExplicit with 2-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitgrav2dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitgrav2dlinear_hh
+
+#include "TestElasticityExplicit.hh" // ISA TestElasticityExplicit
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitGrav2DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicit
+class pylith::feassemble::TestElasticityExplicitGrav2DLinear :
+  public TestElasticityExplicit
+{ // class TestElasticityExplicit2DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitGrav2DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitGrav2DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitgrav2dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitGrav2DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitGravData2DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitGrav2DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitGrav2DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicit::setUp();
+
+  _data = new ElasticityExplicitGravData2DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicit object
+ *
+ * C++ unit testing for ElasticityExplicit with 2-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitgrav2dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitgrav2dquadratic_hh
+
+#include "TestElasticityExplicit.hh" // ISA TestElasticityExplicit
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitGrav2DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicit
+class pylith::feassemble::TestElasticityExplicitGrav2DQuadratic :
+  public TestElasticityExplicit
+{ // class TestElasticityExplicit2DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitGrav2DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitGrav2DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitgrav2dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitGrav3DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitGravData3DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/Quadrature3D.hh" // USES Quadrature3D
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitGrav3DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitGrav3DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicit::setUp();
+
+  _data = new ElasticityExplicitGravData3DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  _gravityField->gravAcceleration(g);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicit object
+ *
+ * C++ unit testing for ElasticityExplicit with 1-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitgrav3dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitgrav3dlinear_hh
+
+#include "TestElasticityExplicit.hh" // ISA TestElasticityExplicit
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitGrav3DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicit
+class pylith::feassemble::TestElasticityExplicitGrav3DLinear :
+  public TestElasticityExplicit
+{ // class TestElasticityExplicit3DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitGrav3DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitGrav3DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitgrav3dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitGrav3DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitGravData3DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/Quadrature3D.hh" // USES Quadrature3D
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitGrav3DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitGrav3DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicit::setUp();
+
+  _data = new ElasticityExplicitGravData3DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  _gravityField->gravAcceleration(g);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicit object
+ *
+ * C++ unit testing for ElasticityExplicit with 1-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitgrav3dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitgrav3dquadratic_hh
+
+#include "TestElasticityExplicit.hh" // ISA TestElasticityExplicit
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitGrav3DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicit
+class pylith::feassemble::TestElasticityExplicitGrav3DQuadratic :
+  public TestElasticityExplicit
+{ // class TestElasticityExplicit3DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitGrav3DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitGrav3DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitgrav3dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,319 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeform.hh" // Implementation of class methods
+
+#include "pylith/feassemble/ElasticityExplicitLgDeform.hh" // USES ElasticityExplicitLgDeform
+#include "data/IntegratorData.hh" // USES IntegratorData
+
+#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <math.h> // USES fabs()
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeform );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform::setUp(void)
+{ // setUp
+  _quadrature = new Quadrature<topology::Mesh>();
+  _data = 0;
+  _material = 0;
+  _gravityField = 0;
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform::tearDown(void)
+{ // tearDown
+  delete _data; _data = 0;
+  delete _quadrature; _quadrature = 0;
+  delete _material; _material = 0;
+  delete _gravityField; _gravityField = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform::testConstructor(void)
+{ // testConstructor
+  ElasticityExplicitLgDeform integrator;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test initialize().
+void 
+pylith::feassemble::TestElasticityExplicitLgDeform::testInitialize(void)
+{ // testInitialize
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityExplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+} // testInitialize
+
+// ----------------------------------------------------------------------
+// Test integrateResidual().
+void
+pylith::feassemble::TestElasticityExplicitLgDeform::testIntegrateResidual(void)
+{ // testIntegrateResidual
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityExplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  topology::Field<topology::Mesh>& residual = fields.get("residual");
+  const double t = 1.0;
+  integrator.integrateResidual(residual, t, &fields);
+
+  const double* valsE = _data->valsResidual;
+  const int sizeE = _data->spaceDim * _data->numVertices;
+
+#if 0 // DEBUGGING
+  residual.view("RESIDUAL");
+  std::cout << "RESIDUAL EXPECTED\n";
+  for (int i=0; i < sizeE; ++i)
+    std::cout << "  " << valsE[i] << "\n";
+#endif
+
+  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);
+
+  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);
+} // testIntegrateResidual
+
+// ----------------------------------------------------------------------
+// Test integrateJacobian().
+void
+pylith::feassemble::TestElasticityExplicitLgDeform::testIntegrateJacobian(void)
+{ // testIntegrateJacobian
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityExplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+  integrator._needNewJacobian = true;
+
+  topology::Jacobian jacobian(fields);
+
+  const double t = 1.0;
+  integrator.integrateJacobian(&jacobian, t, &fields);
+  CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
+  jacobian.assemble("final_assembly");
+
+  const double* valsE = _data->valsJacobian;
+  const int nrowsE = _data->numVertices * _data->spaceDim;
+  const int ncolsE = _data->numVertices * _data->spaceDim;
+
+  const PetscMat jacobianMat = jacobian.matrix();
+
+  int nrows = 0;
+  int ncols = 0;
+  MatGetSize(jacobianMat, &nrows, &ncols);
+  CPPUNIT_ASSERT_EQUAL(nrowsE, nrows);
+  CPPUNIT_ASSERT_EQUAL(ncolsE, ncols);
+
+  PetscMat jDense;
+  PetscMat jSparseAIJ;
+  MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
+  MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
+
+  double_array vals(nrows*ncols);
+  int_array rows(nrows);
+  int_array cols(ncols);
+  for (int iRow=0; iRow < nrows; ++iRow)
+    rows[iRow] = iRow;
+  for (int iCol=0; iCol < ncols; ++iCol)
+    cols[iCol] = iCol;
+  MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
+  const double tolerance = 1.0e-06;
+  for (int iRow=0; iRow < nrows; ++iRow)
+    for (int iCol=0; iCol < ncols; ++iCol) {
+      const int index = ncols*iRow+iCol;
+      if (fabs(valsE[index]) > 1.0)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[index]/valsE[index], tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[index], vals[index], tolerance);
+    } // for
+  MatDestroy(jDense);
+  MatDestroy(jSparseAIJ);
+} // testIntegrateJacobian
+
+// ----------------------------------------------------------------------
+// Test updateStateVars().
+void 
+pylith::feassemble::TestElasticityExplicitLgDeform::testUpdateStateVars(void)
+{ // testUpdateStateVars
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityExplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  const double t = 1.0;
+  integrator.updateStateVars(t, &fields);
+} // testUpdateStateVars
+
+// ----------------------------------------------------------------------
+// Initialize elasticity integrator.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform::_initialize(
+					 topology::Mesh* mesh,
+					 ElasticityExplicitLgDeform* const integrator,
+					 topology::SolutionFields* fields)
+{ // _initialize
+  CPPUNIT_ASSERT(0 != mesh);
+  CPPUNIT_ASSERT(0 != integrator);
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _material);
+
+  // Setup mesh
+  spatialdata::geocoords::CSCart cs;
+  cs.setSpaceDim(_data->spaceDim);
+  cs.initialize();
+  mesh->coordsys(&cs);
+  mesh->createSieveMesh(_data->cellDim);
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
+  CPPUNIT_ASSERT(!sieveMesh.isNull());
+  ALE::Obj<SieveMesh::sieve_type> sieve = 
+    new SieveMesh::sieve_type(mesh->comm());
+  CPPUNIT_ASSERT(!sieve.isNull());
+
+  // Cells and vertices
+  const bool interpolate = false;
+  ALE::Obj<ALE::Mesh::sieve_type> s = 
+    new ALE::Mesh::sieve_type(sieve->comm(), sieve->debug());
+  
+  ALE::SieveBuilder<ALE::Mesh>::buildTopology(s, 
+					      _data->cellDim, _data->numCells,
+                                              const_cast<int*>(_data->cells), 
+					      _data->numVertices,
+                                              interpolate, _data->numBasis);
+  std::map<ALE::Mesh::point_type,ALE::Mesh::point_type> renumbering;
+  ALE::ISieveConverter::convertSieve(*s, *sieve, renumbering);
+  sieveMesh->setSieve(sieve);
+  sieveMesh->stratify();
+  ALE::SieveBuilder<SieveMesh>::buildCoordinates(sieveMesh, _data->spaceDim, 
+						 _data->vertices);
+
+  // Material ids
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->heightStratum(0);
+  CPPUNIT_ASSERT(!cells.isNull());
+  const ALE::Obj<SieveMesh::label_type>& labelMaterials = 
+    sieveMesh->createLabel("material-id");
+  CPPUNIT_ASSERT(!labelMaterials.isNull());
+  int i = 0;
+  for(SieveMesh::label_sequence::iterator e_iter=cells->begin(); 
+      e_iter != cells->end();
+      ++e_iter)
+    sieveMesh->setValue(labelMaterials, *e_iter, _data->matId);
+
+  // Setup quadrature
+  _quadrature->initialize(_data->basis, _data->numQuadPts, _data->numBasis,
+			  _data->basisDerivRef, _data->numQuadPts,
+			  _data->numBasis, _data->cellDim,
+			  _data->quadPts, _data->numQuadPts, _data->cellDim,
+			  _data->quadWts, _data->numQuadPts,
+			  _data->spaceDim);
+
+  // Setup material
+  spatialdata::spatialdb::SimpleIOAscii iohandler;
+  iohandler.filename(_data->matDBFilename);
+  spatialdata::spatialdb::SimpleDB dbProperties;
+  dbProperties.ioHandler(&iohandler);
+  
+  spatialdata::units::Nondimensional normalizer;
+
+  _material->id(_data->matId);
+  _material->label(_data->matLabel);
+  _material->dbProperties(&dbProperties);
+  _material->normalizer(normalizer);
+
+  integrator->quadrature(_quadrature);
+  integrator->gravityField(_gravityField);
+  integrator->timeStep(_data->dt);
+  integrator->material(_material);
+  integrator->initialize(*mesh);
+
+  // Setup fields
+  CPPUNIT_ASSERT(0 != fields);
+  fields->add("residual", "residual");
+  fields->add("disp(t)", "displacement");
+  fields->add("dispIncr(t->t+dt)", "displacement_increment");
+  fields->add("disp(t-dt)", "displacement");
+  fields->solutionName("dispIncr(t->t+dt)");
+  
+  topology::Field<topology::Mesh>& residual = fields->get("residual");
+  residual.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
+  residual.allocate();
+  residual.zero();
+  fields->copyLayout("residual");
+
+  const int fieldSize = _data->spaceDim * _data->numVertices;
+  topology::Field<topology::Mesh>& dispIncr = fields->get("dispIncr(t->t+dt)");
+  topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
+  topology::Field<topology::Mesh>& dispTmdt = fields->get("disp(t-dt)");
+  const ALE::Obj<RealSection>& dispIncrSection = dispIncr.section();
+  const ALE::Obj<RealSection>& dispTSection = dispT.section();
+  const ALE::Obj<RealSection>& dispTmdtSection = dispTmdt.section();
+  CPPUNIT_ASSERT(!dispIncrSection.isNull());
+  CPPUNIT_ASSERT(!dispTSection.isNull());
+  CPPUNIT_ASSERT(!dispTmdtSection.isNull());
+  const int offset = _data->numCells;
+  for (int iVertex=0; iVertex < _data->numVertices; ++iVertex) {
+    dispIncrSection->updatePoint(iVertex+offset,
+         &_data->fieldTIncr[iVertex*_data->spaceDim]);
+    dispTSection->updatePoint(iVertex+offset, 
+            &_data->fieldT[iVertex*_data->spaceDim]);
+    dispTmdtSection->updatePoint(iVertex+offset,
+         &_data->fieldTmdt[iVertex*_data->spaceDim]);
+  } // for
+} // _initialize
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,105 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeform.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeform_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeform_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "pylith/feassemble/feassemblefwd.hh" // forward declarations
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SolutionFields
+#include "pylith/materials/materialsfwd.hh" // USES ElasticMaterial
+
+#include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeform;
+    class IntegratorData;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeform : public CppUnit::TestFixture
+{ // class TestElasticityExplicitLgDeform
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeform );
+
+  CPPUNIT_TEST( testConstructor );
+
+  // Testing of initialize(), integrateResidual(),
+  // integrateJacobian(), and updateStateVars() handled by derived
+  // classes.
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Tear down testing data.
+  void tearDown(void);
+
+  /// Test constructor.
+  void testConstructor(void);
+
+  /// Test initialize().
+  void testInitialize(void);
+
+  /// Test integrateResidual().
+  void testIntegrateResidual(void);
+
+  /// Test integrateJacobian().
+  void testIntegrateJacobian(void);
+
+  /// Test updateStateVars().
+  void testUpdateStateVars(void);
+
+  // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+  IntegratorData* _data; ///< Data for testing.
+  materials::ElasticMaterial* _material; ///< Elastic material.
+  Quadrature<topology::Mesh>* _quadrature; ///< Quadrature information.
+  spatialdata::spatialdb::GravityField* _gravityField; ///< Gravity field.
+
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Initialize elasticity integrator.
+   *
+   * @param mesh Finite-element mesh to initialize.
+   * @param integrator ElasticityIntegrator to initialize.
+   * @param fields Solution fields.
+   */
+  void _initialize(topology::Mesh* mesh,
+		   ElasticityExplicitLgDeform* const integrator,
+		   topology::SolutionFields* const fields);
+
+}; // class TestElasticityExplicitLgDeform
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeform_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,47 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeform1DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformData1DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeform1DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform1DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformData1DLinear();
+  _gravityField = 0;
+  GeometryLine1D geometry;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  _quadrature->refGeometry(&geometry);
+  _material = new materials::ElasticStrain1D;
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D linear cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeform1dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeform1dlinear_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeform1DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeform1DLinear :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform1DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeform1DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeform1DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeform1dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,47 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeform1DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformData1DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeform1DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform1DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformData1DQuadratic();
+  _gravityField = 0;
+  GeometryLine1D geometry;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  _quadrature->refGeometry(&geometry);
+  _material = new materials::ElasticStrain1D;
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeform1DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D quadratic cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeform1dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeform1dquadratic_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeform1DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeform1DQuadratic :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform1DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeform1DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeform1DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeform1dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeform2DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformData2DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeform2DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform2DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformData2DLinear();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 2-D linear cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeform2dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeform2dlinear_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeform2DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeform2DLinear :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform2DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeform2DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeform2DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeform2dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeform2DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformData2DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeform2DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform2DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformData2DQuadratic();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeform2DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 2-D quadratic cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeform2dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeform2dquadratic_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeform2DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeform2DQuadratic :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform2DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeform2DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeform2DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeform2dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeform3DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformData3DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeform3DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform3DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformData3DLinear();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D linear cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeform3dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeform3dlinear_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeform3DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeform3DLinear :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform3DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeform3DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeform3DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeform3dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeform3DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformData3DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeform3DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeform3DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformData3DQuadratic();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeform3DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D quadratic cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeform3dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeform3dquadratic_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeform3DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeform3DQuadratic :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform3DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeform3DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeform3DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeform3dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeformGrav1DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformGravData1DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeformGrav1DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeformGrav1DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformGravData1DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryLine1D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticStrain1D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeformgrav1dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeformgrav1dlinear_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeformGrav1DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeformGrav1DLinear :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform1DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeformGrav1DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeformGrav1DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeformgrav1dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeformGrav1DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformGravData1DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeformGrav1DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeformGrav1DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformGravData1DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryLine1D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticStrain1D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeformgrav1dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeformgrav1dquadratic_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeformGrav1DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeformGrav1DQuadratic :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform1DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeformGrav1DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeformGrav1DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeformgrav1dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeformGrav2DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformGravData2DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeformGrav2DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeformGrav2DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformGravData2DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 2-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeformgrav2dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeformgrav2dlinear_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeformGrav2DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeformGrav2DLinear :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform2DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeformGrav2DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeformGrav2DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeformgrav2dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeformGrav2DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformGravData2DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeformGrav2DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeformGrav2DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformGravData2DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 2-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeformgrav2dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeformgrav2dquadratic_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeformGrav2DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeformGrav2DQuadratic :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform2DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeformGrav2DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeformGrav2DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeformgrav2dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeformGrav3DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformGravData3DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/Quadrature3D.hh" // USES Quadrature3D
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeformGrav3DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeformGrav3DLinear::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformGravData3DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  _gravityField->gravAcceleration(g);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeformgrav3dlinear_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeformgrav3dlinear_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeformGrav3DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeformGrav3DLinear :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform3DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeformGrav3DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeformGrav3DLinear
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeformgrav3dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitLgDeformGrav3DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityExplicitLgDeformGravData3DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/Quadrature3D.hh" // USES Quadrature3D
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitLgDeformGrav3DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitLgDeformGrav3DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityExplicitLgDeform::setUp();
+
+  _data = new ElasticityExplicitLgDeformGravData3DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  _gravityField->gravAcceleration(g);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.hh
+ *
+ * @brief C++ TestElasticityExplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityExplicitLgDeform with 1-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicitlgdeformgrav3dquadratic_hh)
+#define pylith_feassemble_testelasticityexplicitlgdeformgrav3dquadratic_hh
+
+#include "TestElasticityExplicitLgDeform.hh" // ISA TestElasticityExplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityExplicitLgDeformGrav3DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitLgDeform
+class pylith::feassemble::TestElasticityExplicitLgDeformGrav3DQuadratic :
+  public TestElasticityExplicitLgDeform
+{ // class TestElasticityExplicitLgDeform3DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityExplicitLgDeformGrav3DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityExplicitLgDeformGrav3DQuadratic
+
+#endif // pylith_feassemble_testelasticityexplicitlgdeformgrav3dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,313 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform.hh" // Implementation of class methods
+
+#include "pylith/feassemble/ElasticityImplicitLgDeform.hh" // USES ElasticityImplicitLgDeform
+#include "data/IntegratorData.hh" // USES IntegratorData
+
+#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <math.h> // USES fabs()
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::setUp(void)
+{ // setUp
+  _quadrature = new Quadrature<topology::Mesh>();
+  _data = 0;
+  _material = 0;
+  _gravityField = 0;
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::tearDown(void)
+{ // tearDown
+  delete _data; _data = 0;
+  delete _quadrature; _quadrature = 0;
+  delete _material; _material = 0;
+  delete _gravityField; _gravityField = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testConstructor(void)
+{ // testConstructor
+  ElasticityImplicitLgDeform integrator;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test initialize().
+void 
+pylith::feassemble::TestElasticityImplicitLgDeform::testInitialize(void)
+{ // testInitialize
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+} // testInitialize
+
+// ----------------------------------------------------------------------
+// Test integrateResidual().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testIntegrateResidual(void)
+{ // testIntegrateResidual
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  topology::Field<topology::Mesh>& residual = fields.get("residual");
+  const double t = 1.0;
+  integrator.integrateResidual(residual, t, &fields);
+
+  const double* valsE = _data->valsResidual;
+  const int sizeE = _data->spaceDim * _data->numVertices;
+
+#if 0 // DEBUGGING
+  residual.view("RESIDUAL");
+  std::cout << "RESIDUAL EXPECTED\n";
+  for (int i=0; i < sizeE; ++i)
+    std::cout << "  " << valsE[i] << "\n";
+#endif
+
+  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);
+
+  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);
+} // testIntegrateResidual
+
+// ----------------------------------------------------------------------
+// Test integrateJacobian().
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::testIntegrateJacobian(void)
+{ // testIntegrateJacobian
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+  integrator._needNewJacobian = true;
+
+  topology::Jacobian jacobian(fields);
+
+  const double t = 1.0;
+  integrator.integrateJacobian(&jacobian, t, &fields);
+  CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
+  jacobian.assemble("final_assembly");
+
+  const double* valsE = _data->valsJacobian;
+  const int nrowsE = _data->numVertices * _data->spaceDim;
+  const int ncolsE = _data->numVertices * _data->spaceDim;
+
+  const PetscMat jacobianMat = jacobian.matrix();
+
+  int nrows = 0;
+  int ncols = 0;
+  MatGetSize(jacobianMat, &nrows, &ncols);
+  CPPUNIT_ASSERT_EQUAL(nrowsE, nrows);
+  CPPUNIT_ASSERT_EQUAL(ncolsE, ncols);
+
+  PetscMat jDense;
+  PetscMat jSparseAIJ;
+  MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
+  MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
+
+  double_array vals(nrows*ncols);
+  int_array rows(nrows);
+  int_array cols(ncols);
+  for (int iRow=0; iRow < nrows; ++iRow)
+    rows[iRow] = iRow;
+  for (int iCol=0; iCol < ncols; ++iCol)
+    cols[iCol] = iCol;
+  MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
+  const double tolerance = 1.0e-06;
+  for (int iRow=0; iRow < nrows; ++iRow)
+    for (int iCol=0; iCol < ncols; ++iCol) {
+      const int index = ncols*iRow+iCol;
+      if (fabs(valsE[index]) > 1.0)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[index]/valsE[index], tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[index], vals[index], tolerance);
+    } // for
+  MatDestroy(jDense);
+  MatDestroy(jSparseAIJ);
+} // testIntegrateJacobian
+
+// ----------------------------------------------------------------------
+// Test updateStateVars().
+void 
+pylith::feassemble::TestElasticityImplicitLgDeform::testUpdateStateVars(void)
+{ // testUpdateStateVars
+  CPPUNIT_ASSERT(0 != _data);
+
+  topology::Mesh mesh;
+  ElasticityImplicitLgDeform integrator;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &integrator, &fields);
+
+  const double t = 1.0;
+  integrator.updateStateVars(t, &fields);
+} // testUpdateStateVars
+
+// ----------------------------------------------------------------------
+// Initialize elasticity integrator.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform::_initialize(
+					 topology::Mesh* mesh,
+					 ElasticityImplicitLgDeform* const integrator,
+					 topology::SolutionFields* fields)
+{ // _initialize
+  CPPUNIT_ASSERT(0 != mesh);
+  CPPUNIT_ASSERT(0 != integrator);
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _material);
+
+  // Setup mesh
+  spatialdata::geocoords::CSCart cs;
+  cs.setSpaceDim(_data->spaceDim);
+  cs.initialize();
+  mesh->coordsys(&cs);
+  mesh->createSieveMesh(_data->cellDim);
+  const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
+  CPPUNIT_ASSERT(!sieveMesh.isNull());
+  ALE::Obj<SieveMesh::sieve_type> sieve = 
+    new SieveMesh::sieve_type(mesh->comm());
+  CPPUNIT_ASSERT(!sieve.isNull());
+
+  // Cells and vertices
+  const bool interpolate = false;
+  ALE::Obj<ALE::Mesh::sieve_type> s = 
+    new ALE::Mesh::sieve_type(sieve->comm(), sieve->debug());
+  
+  ALE::SieveBuilder<ALE::Mesh>::buildTopology(s, 
+					      _data->cellDim, _data->numCells,
+                                              const_cast<int*>(_data->cells), 
+					      _data->numVertices,
+                                              interpolate, _data->numBasis);
+  std::map<ALE::Mesh::point_type,ALE::Mesh::point_type> renumbering;
+  ALE::ISieveConverter::convertSieve(*s, *sieve, renumbering);
+  sieveMesh->setSieve(sieve);
+  sieveMesh->stratify();
+  ALE::SieveBuilder<SieveMesh>::buildCoordinates(sieveMesh, _data->spaceDim, 
+						 _data->vertices);
+
+  // Material ids
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sieveMesh->heightStratum(0);
+  CPPUNIT_ASSERT(!cells.isNull());
+  const ALE::Obj<SieveMesh::label_type>& labelMaterials = 
+    sieveMesh->createLabel("material-id");
+  CPPUNIT_ASSERT(!labelMaterials.isNull());
+  int i = 0;
+  for(SieveMesh::label_sequence::iterator e_iter=cells->begin(); 
+      e_iter != cells->end();
+      ++e_iter)
+    sieveMesh->setValue(labelMaterials, *e_iter, _data->matId);
+
+  // Setup quadrature
+  _quadrature->initialize(_data->basis, _data->numQuadPts, _data->numBasis,
+			  _data->basisDerivRef, _data->numQuadPts,
+			  _data->numBasis, _data->cellDim,
+			  _data->quadPts, _data->numQuadPts, _data->cellDim,
+			  _data->quadWts, _data->numQuadPts,
+			  _data->spaceDim);
+
+  // Setup material
+  spatialdata::spatialdb::SimpleIOAscii iohandler;
+  iohandler.filename(_data->matDBFilename);
+  spatialdata::spatialdb::SimpleDB dbProperties;
+  dbProperties.ioHandler(&iohandler);
+  
+  spatialdata::units::Nondimensional normalizer;
+
+  _material->id(_data->matId);
+  _material->label(_data->matLabel);
+  _material->dbProperties(&dbProperties);
+  _material->normalizer(normalizer);
+
+  integrator->quadrature(_quadrature);
+  integrator->gravityField(_gravityField);
+  integrator->timeStep(_data->dt);
+  integrator->material(_material);
+  integrator->initialize(*mesh);
+
+  // Setup fields
+  CPPUNIT_ASSERT(0 != fields);
+  fields->add("residual", "residual");
+  fields->add("disp(t)", "displacement");
+  fields->add("dispIncr(t->t+dt)", "displacement_increment");
+  fields->solutionName("dispIncr(t->t+dt)");
+  
+  topology::Field<topology::Mesh>& residual = fields->get("residual");
+  residual.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
+  residual.allocate();
+  residual.zero();
+  fields->copyLayout("residual");
+
+  const int fieldSize = _data->spaceDim * _data->numVertices;
+  topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
+  const ALE::Obj<RealSection>& dispTSection = dispT.section();
+  CPPUNIT_ASSERT(!dispTSection.isNull());
+  topology::Field<topology::Mesh>& dispTIncr = fields->get("dispIncr(t->t+dt)");
+  const ALE::Obj<RealSection>& dispTIncrSection = dispTIncr.section();
+  CPPUNIT_ASSERT(!dispTIncrSection.isNull());
+  const int offset = _data->numCells;
+  for (int iVertex=0; iVertex < _data->numVertices; ++iVertex) {
+    dispTSection->updatePoint(iVertex+offset, 
+			      &_data->fieldT[iVertex*_data->spaceDim]);
+    dispTIncrSection->updatePoint(iVertex+offset, 
+				  &_data->fieldTIncr[iVertex*_data->spaceDim]);
+  } // for
+} // _initialize
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,105 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "pylith/feassemble/feassemblefwd.hh" // forward declarations
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SolutionFields
+#include "pylith/materials/materialsfwd.hh" // USES ElasticMaterial
+
+#include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform;
+    class IntegratorData;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform : public CppUnit::TestFixture
+{ // class TestElasticityImplicitLgDeform
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform );
+
+  CPPUNIT_TEST( testConstructor );
+
+  // Testing of initialize(), integrateResidual(),
+  // integrateJacobian(), and updateStateVars() handled by derived
+  // classes.
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Tear down testing data.
+  void tearDown(void);
+
+  /// Test constructor.
+  void testConstructor(void);
+
+  /// Test initialize().
+  void testInitialize(void);
+
+  /// Test integrateResidual().
+  void testIntegrateResidual(void);
+
+  /// Test integrateJacobian().
+  void testIntegrateJacobian(void);
+
+  /// Test updateStateVars().
+  void testUpdateStateVars(void);
+
+  // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+  IntegratorData* _data; ///< Data for testing.
+  materials::ElasticMaterial* _material; ///< Elastic material.
+  Quadrature<topology::Mesh>* _quadrature; ///< Quadrature information.
+  spatialdata::spatialdb::GravityField* _gravityField; ///< Gravity field.
+
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Initialize elasticity integrator.
+   *
+   * @param mesh Finite-element mesh to initialize.
+   * @param integrator ElasticityIntegrator to initialize.
+   * @param fields Solution fields.
+   */
+  void _initialize(topology::Mesh* mesh,
+		   ElasticityImplicitLgDeform* const integrator,
+		   topology::SolutionFields* const fields);
+
+}; // class TestElasticityImplicitLgDeform
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,47 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform1DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformData1DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform1DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform1DLinear::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformData1DLinear();
+  _gravityField = 0;
+  GeometryLine1D geometry;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  _quadrature->refGeometry(&geometry);
+  _material = new materials::ElasticStrain1D;
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DLinear.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D linear cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform1dlinear_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform1dlinear_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform1DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform1DLinear :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform1DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform1DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeform1DLinear
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform1dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,47 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform1DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformData1DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform1DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform1DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformData1DQuadratic();
+  _gravityField = 0;
+  GeometryLine1D geometry;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  _quadrature->refGeometry(&geometry);
+  _material = new materials::ElasticStrain1D;
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform1DQuadratic.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D quadratic cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform1dquadratic_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform1dquadratic_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform1DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform1DQuadratic :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform1DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform1DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeform1DQuadratic
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform1dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform2DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformData2DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform2DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform2DLinear::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformData2DLinear();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DLinear.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 2-D linear cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform2dlinear_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform2dlinear_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform2DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform2DLinear :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform2DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform2DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeform2DLinear
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform2dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform2DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformData2DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform2DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform2DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformData2DQuadratic();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform2DQuadratic.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 2-D quadratic cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform2dquadratic_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform2dquadratic_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform2DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform2DQuadratic :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform2DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform2DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeform2DQuadratic
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform2dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform3DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformData3DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform3DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform3DLinear::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformData3DLinear();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DLinear.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D linear cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform3dlinear_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform3dlinear_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform3DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform3DLinear :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform3DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform3DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeform3DLinear
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform3dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeform3DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformData3DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeform3DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeform3DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformData3DQuadratic();
+  _gravityField = 0;
+  CPPUNIT_ASSERT(0 != _quadrature);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeform3DQuadratic.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D quadratic cells.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeform3dquadratic_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeform3dquadratic_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeform3DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeform3DQuadratic :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform3DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeform3DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeform3DQuadratic
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeform3dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeformGrav1DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformGravData1DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeformGrav1DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeformGrav1DLinear::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformGravData1DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryLine1D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticStrain1D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeformgrav1dlinear_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeformgrav1dlinear_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeformGrav1DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeformGrav1DLinear :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform1DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeformGrav1DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeformGrav1DLinear
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeformgrav1dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeformGrav1DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformGravData1DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeformGrav1DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeformGrav1DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformGravData1DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryLine1D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticStrain1D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticStrain1D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeformgrav1dquadratic_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeformgrav1dquadratic_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeformGrav1DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeformGrav1DQuadratic :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform1DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeformGrav1DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeformGrav1DQuadratic
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeformgrav1dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeformGrav2DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformGravData2DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeformGrav2DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeformGrav2DLinear::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformGravData2DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 2-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeformgrav2dlinear_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeformgrav2dlinear_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeformGrav2DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeformGrav2DLinear :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform2DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeformGrav2DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeformGrav2DLinear
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeformgrav2dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeformGrav2DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformGravData2DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeformGrav2DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeformGrav2DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformGravData2DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTri2D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  _gravityField->gravAcceleration(g);
+  _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
+
+  _material = new materials::ElasticPlaneStrain;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 2-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeformgrav2dquadratic_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeformgrav2dquadratic_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeformGrav2DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeformGrav2DQuadratic :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform2DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeformGrav2DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeformGrav2DQuadratic
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeformgrav2dquadratic_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeformGrav3DLinear.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformGravData3DLinear.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/Quadrature3D.hh" // USES Quadrature3D
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeformGrav3DLinear );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeformGrav3DLinear::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformGravData3DLinear();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  _gravityField->gravAcceleration(g);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D linear cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeformgrav3dlinear_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeformgrav3dlinear_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeformGrav3DLinear;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeformGrav3DLinear :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform3DLinear
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeformGrav3DLinear );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeformGrav3DLinear
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeformgrav3dlinear_hh
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityImplicitLgDeformGrav3DQuadratic.hh" // Implementation of class methods
+
+#include "data/ElasticityImplicitLgDeformGravData3DQuadratic.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Quadrature<Mesh>
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/Quadrature3D.hh" // USES Quadrature3D
+#include "pylith/feassemble/GeometryTet3D.hh" // USES GeometryTet3D
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityImplicitLgDeformGrav3DQuadratic );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityImplicitLgDeformGrav3DQuadratic::setUp(void)
+{ // setUp
+  TestElasticityImplicitLgDeform::setUp();
+
+  _data = new ElasticityImplicitLgDeformGravData3DQuadratic();
+  _gravityField = new spatialdata::spatialdb::GravityField();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  CPPUNIT_ASSERT(0 != _gravityField);
+  GeometryTet3D geometry;
+  _quadrature->refGeometry(&geometry);
+
+  const double g = 1.0e8;
+  _gravityField->gravAcceleration(g);
+
+  _material = new materials::ElasticIsotropic3D;
+  CPPUNIT_ASSERT(0 != _material);
+  
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT_EQUAL(std::string("ElasticIsotropic3D"),
+		       std::string(_data->matType));
+} // setUp
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.hh
+ *
+ * @brief C++ TestElasticityImplicitLgDeform object
+ *
+ * C++ unit testing for ElasticityImplicitLgDeform with 1-D quadratic cells and gravity.
+ */
+
+#if !defined(pylith_feassemble_testelasticityimplicitlgdeformgrav3dquadratic_hh)
+#define pylith_feassemble_testelasticityimplicitlgdeformgrav3dquadratic_hh
+
+#include "TestElasticityImplicitLgDeform.hh" // ISA TestElasticityImplicitLgDeform
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestElasticityImplicitLgDeformGrav3DQuadratic;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityImplicitLgDeform
+class pylith::feassemble::TestElasticityImplicitLgDeformGrav3DQuadratic :
+  public TestElasticityImplicitLgDeform
+{ // class TestElasticityImplicitLgDeform3DQuadratic
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticityImplicitLgDeformGrav3DQuadratic );
+
+  CPPUNIT_TEST( testInitialize );
+  CPPUNIT_TEST( testIntegrateResidual );
+  CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testUpdateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+}; // class TestElasticityImplicitLgDeformGrav3DQuadratic
+
+#endif // pylith_feassemble_testelasticityimplicitlgdeformgrav3dquadratic_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -185,6 +185,40 @@
 } // testResetCellMatrix
 
 // ----------------------------------------------------------------------
+// Test _lumpCellMatrix()
+void
+pylith::feassemble::TestIntegrator::testLumpCellMatrix(void)
+{ // testLumpCellMatrix
+  Quadrature<topology::Mesh> quadrature;
+  _initQuadrature(&quadrature);
+
+  ElasticityExplicit integrator;
+  integrator.quadrature(&quadrature);
+
+  integrator._initCellMatrix();
+  integrator._initCellVector();
+  
+  const size_t sizeM = 
+    quadrature.spaceDim() * quadrature.numBasis() *
+    quadrature.spaceDim() * quadrature.numBasis();
+  CPPUNIT_ASSERT_EQUAL(sizeM, integrator._cellMatrix.size());
+  for (size_t i=0; i < sizeM; ++i)
+    integrator._cellMatrix[i] = 1.23 + 1.2*i;
+  integrator._lumpCellMatrix();
+
+  const int numBasis = quadrature.numBasis();
+  const int spaceDim = quadrature.spaceDim();
+  for (int iBasis=0; iBasis < numBasis; ++iBasis)
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      double value = 0;
+      const int index = (iBasis*spaceDim+iDim)*numBasis*spaceDim;
+      for (int jBasis=0; jBasis < numBasis; ++jBasis)
+	value += 1.23 + 1.2*(index+jBasis*spaceDim+iDim);
+      CPPUNIT_ASSERT_EQUAL(value, integrator._cellVector[iBasis*spaceDim+iDim]);
+    } // for
+} // testLumpCellMatrix
+
+// ----------------------------------------------------------------------
 // Test splitField().
 void
 pylith::feassemble::TestIntegrator::testSplitField(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegrator.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -50,6 +50,7 @@
   CPPUNIT_TEST( testResetCellVector );
   CPPUNIT_TEST( testInitCellMatrix );
   CPPUNIT_TEST( testResetCellMatrix );
+  CPPUNIT_TEST( testLumpCellMatrix );
   CPPUNIT_TEST( testSplitField );
 
   CPPUNIT_TEST_SUITE_END();
@@ -84,6 +85,9 @@
   /// Test _resetCellMatrix().
   void testResetCellMatrix(void);
 
+  /// Test _lumpCellMatrix().
+  void testLumpCellMatrix(void);
+
   /// Test splitField().
   void testSplitField(void);
 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,436 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestIntegratorElasticityLgDeform.hh" // Implementation of class methods
+
+#include "pylith/feassemble/IntegratorElasticityLgDeform.hh" // USES IntegratorElasticityLgDeform
+
+#include <math.h> // USES fabs()
+
+#include <stdexcept>
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestIntegratorElasticityLgDeform );
+
+// ----------------------------------------------------------------------
+// Test calcDeformation() for 1-D.
+void
+pylith::feassemble::TestIntegratorElasticityLgDeform::testCalcDeformation1D(void)
+{ // testCalcDeformation1D
+  // N0 = 0.5 * (1 - x)
+  // N1 = 0.5 * (1 + x)
+  // dN0/dx = -0.5
+  // dN1/dx = +0.5
+  const int dim = 1;
+  const int numBasis = 2;
+  const int numQuadPts = 2;
+  const double verticesVals[] = { -1.0, 1.0 };
+  const double basisDerivVals[] = {
+    -0.50, 0.50,
+    -0.50, 0.50 };
+  const int tensorSize = 1;
+
+  const int size = numQuadPts * dim*dim;
+  double_array deform(size);    
+  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  double_array vertices(verticesVals, numBasis*dim);
+
+  const double tolerance = 1.0e-06;
+
+  { // Rigid body translation
+    // u(x) = 1.0
+    const double dispVals[] = { 1.0, 1.0 };
+    const double deformE[] = { 1.0, 1.0 };
+    
+    double_array disp(dispVals, numBasis*dim);
+    
+    IntegratorElasticityLgDeform::_calcDeformation(&deform,
+						   basisDeriv, vertices, disp,
+						   numBasis, numQuadPts, dim);
+    
+    CPPUNIT_ASSERT_EQUAL(size, int(deform.size()));
+    for (int i=0; i < size; ++i)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(deformE[i], deform[i], tolerance);
+  } // Rigid body translation
+
+  { // Uniform strain
+    // u(x) = 0.1*x
+    const double dispVals[] = { -0.1, 0.1 };
+    const double deformE[] = { 1.1, 1.1 };
+    
+    double_array disp(dispVals, numBasis*dim);
+    
+    IntegratorElasticityLgDeform::_calcDeformation(&deform,
+						   basisDeriv, vertices, disp,
+						   numBasis, numQuadPts, dim);
+    
+    CPPUNIT_ASSERT_EQUAL(size, int(deform.size()));
+    for (int i=0; i < size; ++i)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(deformE[i], deform[i], tolerance);
+  } // Uniform strain
+} // testCalcDeformation1D
+
+// ----------------------------------------------------------------------
+// Test calcDeformation() for 2-D.
+void
+pylith::feassemble::TestIntegratorElasticityLgDeform::testCalcDeformation2D(void)
+{ // testCalcDeformation2D
+  // N0 = x
+  // N1 = y
+  // N2 = 1 - x - y
+  // dN0/dx = +1.0, dN0/dy =  0.0
+  // dN1/dx =  0.0, dN1/dy = +1.0
+  // dN2/dx = -1.0, dN2/dy = -1.0
+  const int dim = 2;
+  const int numBasis = 3;
+  const int numQuadPts = 2;
+  const double verticesVals[] = {
+    1.0, 0.0,
+    0.0, 1.0, 
+    0.0, 0.0,
+  };
+  const double basisDerivVals[] = {
+    +1.0,  0.0,   0.0, +1.0,   -1.0, -1.0,
+    +1.0,  0.0,   0.0, +1.0,   -1.0, -1.0
+  };
+  const int tensorSize = 3;
+
+  const int size = numQuadPts * dim*dim;
+  double_array deform(size);    
+  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  double_array vertices(verticesVals, numBasis*dim);
+
+  const double tolerance = 1.0e-06;
+
+  { // Rigid body translation
+    // ux(x,y) = 0.5
+    // uy(x,y) = 0.2
+    const double dispVals[] = {
+      0.5, 0.2,
+      0.5, 0.2,
+      0.5, 0.2,
+    };
+    const double deformE[] = {
+      1.0, 0.0,   0.0, 1.0,
+      1.0, 0.0,   0.0, 1.0,
+    };
+    
+    double_array disp(dispVals, numBasis*dim);
+    
+    IntegratorElasticityLgDeform::_calcDeformation(&deform,
+						   basisDeriv, vertices, disp,
+						   numBasis, numQuadPts, dim);
+    
+    CPPUNIT_ASSERT_EQUAL(size, int(deform.size()));
+    for (int i=0; i < size; ++i)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(deformE[i], deform[i], tolerance);
+  } // Rigid body translation
+
+  { // Rigid body translation + rotation
+    // ux(x,y) = 0.5 + cos(theta)*x + sin(theta)*y - x0
+    // uy(x,y) = 0.2 - sin(theta)*x + cos(theta)*y - y0
+    // theta = pi/6
+    const double pi = 4.0*atan(1.0);
+    const double theta = pi / 6.0;
+    const double dispVals[] = {
+      0.5+cos(theta)*1.0+sin(theta)*0.0-1.0,
+      0.2-sin(theta)*1.0+cos(theta)*0.0-0.0,
+
+      0.5+cos(theta)*0.0+sin(theta)*1.0-0.0,
+      0.2-sin(theta)*0.0+cos(theta)*1.0-1.0,
+
+      0.5+cos(theta)*0.0+sin(theta)*0.0-0.0,
+      0.2-sin(theta)*0.0+cos(theta)*0.0-0.0,
+    };
+    const double deformE[] = {
+      cos(theta), sin(theta), -sin(theta), cos(theta),
+      cos(theta), sin(theta), -sin(theta), cos(theta),
+    };
+    
+    double_array disp(dispVals, numBasis*dim);
+    
+    IntegratorElasticityLgDeform::_calcDeformation(&deform,
+						   basisDeriv, vertices, disp,
+						   numBasis, numQuadPts, dim);
+    
+    CPPUNIT_ASSERT_EQUAL(size, int(deform.size()));
+    for (int i=0; i < size; ++i)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(deformE[i], deform[i], tolerance);
+  } // Rigid body translation + rotation
+
+  { // Uniform strain
+    // Let ux(x,y) = +0.4 + 0.3*x + 0.8*y
+    // Ley uy(x,y) = -2.0 + 0.5*x - 0.2*y
+    const double dispVals[] = {
+      0.7, -1.5,
+      1.2, -2.2,
+      0.4, -2.0
+    };
+    const double deformE[] = {
+      1.3, 0.8,   0.5, 0.8,
+      1.3, 0.8,   0.5, 0.8,
+    };
+    
+    double_array disp(dispVals, numBasis*dim);
+    
+    IntegratorElasticityLgDeform::_calcDeformation(&deform,
+						   basisDeriv, vertices, disp,
+						   numBasis, numQuadPts, dim);
+    
+    CPPUNIT_ASSERT_EQUAL(size, int(deform.size()));
+    for (int i=0; i < size; ++i)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(deformE[i], deform[i], tolerance);
+  } // Uniform strain
+} // testCalcDeformation2D
+
+// ----------------------------------------------------------------------
+// Test calcDeformation() for 3-D.
+void
+pylith::feassemble::TestIntegratorElasticityLgDeform::testCalcDeformation3D(void)
+{ // testCalcDeformation3D
+  // N0 = 0.125 * (1-x) * (1-y) * (1-z)
+  // N1 = 0.125 * (1+x) * (1-y) * (1-z)
+  // N2 = 0.125 * (1+x) * (1+y) * (1-z)
+  // N3 = 0.125 * (1-x) * (1+y) * (1-z)
+  // N4 = 0.125 * (1-x) * (1-y) * (1+z)
+  // N5 = 0.125 * (1+x) * (1-y) * (1+z)
+  // N6 = 0.125 * (1+x) * (1+y) * (1+z)
+  // N7 = 0.125 * (1-x) * (1+y) * (1+z)
+  // dN0/dx=-0.125, dN0/dy=-0.125, dN0/dz=-0.125
+  // dN1/dx=+0.125, dN1/dy=-0.125, dN1/dz=-0.125
+  // dN2/dx=+0.125, dN2/dy=+0.125, dN2/dz=-0.125
+  // dN3/dx=-0.125, dN3/dy=+0.125, dN3/dz=-0.125
+  // dN4/dx=-0.125, dN0/dy=-0.125, dN0/dz=+0.125
+  // dN5/dx=+0.125, dN1/dy=-0.125, dN1/dz=+0.125
+  // dN6/dx=+0.125, dN2/dy=+0.125, dN2/dz=+0.125
+  // dN7/dx=-0.125, dN3/dy=+0.125, dN3/dz=+0.125
+  const int dim = 3;
+  const int numBasis = 8;
+  const int numQuadPts = 1;
+  const double verticesVals[] = {
+    -1.0, -1.0, -1.0,
+    +1.0, -1.0, -1.0,
+    +1.0, +1.0, -1.0,
+    -1.0, +1.0, -1.0,
+    -1.0, -1.0, +1.0,
+    +1.0, -1.0, +1.0,
+    +1.0, +1.0, +1.0,
+    -1.0, +1.0, +1.0,
+  };
+  const double basisDerivVals[] = {
+    -0.125, -0.125, -0.125,
+    +0.125, -0.125, -0.125,
+    +0.125, +0.125, -0.125,
+    -0.125, +0.125, -0.125,
+    -0.125, -0.125, +0.125,
+    +0.125, -0.125, +0.125,
+    +0.125, +0.125, +0.125,
+    -0.125, +0.125, +0.125,
+  };
+  const int tensorSize = 3;
+
+  const int size = numQuadPts * dim*dim;
+  double_array deform(size);    
+  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  double_array vertices(verticesVals, numBasis*dim);
+
+  const double tolerance = 1.0e-06;
+
+  { // Rigid body translation
+    // ux(x,y,z) = 0.5
+    // uy(x,y,z) = 0.2
+    // uz(x,y,z) = 0.3
+    const double dispVals[] = {
+      0.5, 0.2, 0.3,
+      0.5, 0.2, 0.3,
+      0.5, 0.2, 0.3,
+      0.5, 0.2, 0.3,
+      0.5, 0.2, 0.3,
+      0.5, 0.2, 0.3,
+      0.5, 0.2, 0.3,
+      0.5, 0.2, 0.3,
+    };
+    const double deformE[] = {
+      1.0, 0.0, 0.0,   0.0, 1.0, 0.0,  0.0, 0.0, 1.0,
+      1.0, 0.0, 0.0,   0.0, 1.0, 0.0,  0.0, 0.0, 1.0,
+    };
+    
+    double_array disp(dispVals, numBasis*dim);
+    
+    IntegratorElasticityLgDeform::_calcDeformation(&deform,
+						   basisDeriv, vertices, disp,
+						   numBasis, numQuadPts, dim);
+    
+    CPPUNIT_ASSERT_EQUAL(size, int(deform.size()));
+    for (int i=0; i < size; ++i)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(deformE[i], deform[i], tolerance);
+  } // Rigid body translation
+
+  { // Uniform strain
+    // Let ux(x,y,z) = +0.4 + 0.3*x + 0.8*y - 0.2*z
+    // Ley uy(x,y,z) = -2.0 + 0.5*x - 0.2*y + 0.6*z
+    // Ley uz(x,y,z) = +0.7 + 0.8*x - 0.9*y - 0.1*z
+    const double dispVals[] = {
+      +0.4+0.3*-1+0.8*-1-0.2*-1,
+      -2.0+0.5*-1-0.2*-1+0.6*-1,
+      +0.7+0.8*-1-0.9*-1-0.1*-1,
+
+      +0.4+0.3*+1+0.8*-1-0.2*-1,
+      -2.0+0.5*+1-0.2*-1+0.6*-1,
+      +0.7+0.8*+1-0.9*-1-0.1*-1,
+
+      +0.4+0.3*+1+0.8*+1-0.2*-1,
+      -2.0+0.5*+1-0.2*+1+0.6*-1,
+      +0.7+0.8*+1-0.9*+1-0.1*-1,
+
+      +0.4+0.3*-1+0.8*+1-0.2*-1,
+      -2.0+0.5*-1-0.2*+1+0.6*-1,
+      +0.7+0.8*-1-0.9*+1-0.1*-1,
+
+      +0.4+0.3*-1+0.8*-1-0.2*+1,
+      -2.0+0.5*-1-0.2*-1+0.6*+1,
+      +0.7+0.8*-1-0.9*-1-0.1*+1,
+
+      +0.4+0.3*+1+0.8*-1-0.2*+1,
+      -2.0+0.5*+1-0.2*-1+0.6*+1,
+      +0.7+0.8*+1-0.9*-1-0.1*+1,
+
+      +0.4+0.3*+1+0.8*+1-0.2*+1,
+      -2.0+0.5*+1-0.2*+1+0.6*+1,
+      +0.7+0.8*+1-0.9*+1-0.1*+1,
+
+      +0.4+0.3*-1+0.8*+1-0.2*+1,
+      -2.0+0.5*-1-0.2*+1+0.6*+1,
+      +0.7+0.8*-1-0.9*+1-0.1*+1,
+
+    };
+    const double deformE[] = {
+      1.3, 0.8, -0.2,
+      0.5, 0.8, 0.6,
+      0.8, -0.9, 0.9,
+    };
+    
+    double_array disp(dispVals, numBasis*dim);
+    
+    IntegratorElasticityLgDeform::_calcDeformation(&deform,
+						   basisDeriv, vertices, disp,
+						   numBasis, numQuadPts, dim);
+    
+    CPPUNIT_ASSERT_EQUAL(size, int(deform.size()));
+    for (int i=0; i < size; ++i)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(deformE[i], deform[i], tolerance);
+  } // Uniform strain
+} // testCalcDeformation3D
+
+// ----------------------------------------------------------------------
+// Test calcTotalStrain1D().
+void
+pylith::feassemble::TestIntegratorElasticityLgDeform::testCalcTotalStrain1D(void)
+{ // testCalcTotalStrain1D
+  // Deformation tensor X
+  // X = [ 2.0 ], [ 0.4 ]
+  const int dim = 1;
+  const int numQuadPts = 2;
+  const double deformVals[] = {
+    2.0,  0.4,
+  };
+  const double strainE[] = {
+    0.5*(2.0*2.0-1.0),  0.5*(0.4*0.4-1.0),
+  };
+  const int tensorSize = 1;
+
+  const int size = numQuadPts * tensorSize;
+  double_array strain(size);
+
+  double_array deform(deformVals, numQuadPts*dim*dim);
+
+  IntegratorElasticityLgDeform::_calcTotalStrain1D(&strain,
+						   deform, numQuadPts);
+
+  const double tolerance = 1.0e-06;
+  CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);
+} // testCalcTotalStrain1D
+
+// ----------------------------------------------------------------------
+// Test calcTotalStrain2D().
+void
+pylith::feassemble::TestIntegratorElasticityLgDeform::testCalcTotalStrain2D(void)
+{ // testCalcTotalStrain2D
+  // Deformation tensor X
+  // X = [ 2.0, 0.4 ]    [  1.5, 0.2 ]
+  //     [ 0.6, 1.4 ],   [ -0.9, 0.8 ]
+  const int dim = 2;
+  const int numQuadPts = 2;
+  const double deformVals[] = {
+    2.0,  0.4, 0.6, 1.4,
+    1.5, 0.2, -0.9, 0.8,
+  };
+  const double strainE[] = {
+    1.68, 0.56, 0.82,
+    1.03, -0.16, -0.21,
+  };
+  const int tensorSize = 3;
+
+  const int size = numQuadPts * tensorSize;
+  double_array strain(size);
+
+  double_array deform(deformVals, numQuadPts*dim*dim);
+
+  IntegratorElasticityLgDeform::_calcTotalStrain2D(&strain,
+						   deform, numQuadPts);
+
+  const double tolerance = 1.0e-06;
+  CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);
+} // testCalcTotalStrain2D
+
+// ----------------------------------------------------------------------
+// Test calcTotalStrain3D().
+void
+pylith::feassemble::TestIntegratorElasticityLgDeform::testCalcTotalStrain3D(void)
+{ // testCalcTotalStrain3D
+  // Deformation tensor X
+  // X = [  2.0, 0.4,  0.3 ]    [  1.5, 0.2, -0.1 ]
+  //     [  0.6, 1.4, -0.8 ]    [ -0.9, 0.8,  0.3 ]
+  //     [ -0.1, 0.6,  1.0 ],   [ -0.8, 0.5,  1.2 ]
+  const int dim = 3;
+  const int numQuadPts = 2;
+  const double deformVals[] = {
+    2.0,  0.4, 0.3,  0.6, 1.4, -0.8,  -0.1, 0.6, 1.0,
+    1.5, 0.2, -0.1,  -0.9, 0.8, 0.3,  -0.8, 0.5, 1.2,
+  };
+  const double strainE[] = {
+    1.685, 0.74, 0.365, 0.79, -0.2, 0.01,
+    1.35, -0.035, 0.27, -0.41, 0.41, -0.69,
+  };
+  const int tensorSize = 6;
+
+  const int size = numQuadPts * tensorSize;
+  double_array strain(size);
+
+  double_array deform(deformVals, numQuadPts*dim*dim);
+
+  IntegratorElasticityLgDeform::_calcTotalStrain3D(&strain,
+						   deform, numQuadPts);
+
+  const double tolerance = 1.0e-06;
+  CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);
+} // testCalcTotalStrain3D
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,75 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.hh
+ *
+ * @brief C++ TestIntegratorElasticityLgDeform object
+ *
+ * C++ unit testing for IntegratorElasticityLgDeform.
+ */
+
+#if !defined(pylith_feassemble_testintegratorelasticitylgdeform_hh)
+#define pylith_feassemble_testintegratorelasticitylgdeform_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace feassemble {
+    class TestIntegratorElasticityLgDeform;
+  } // feassemble
+} // pylith
+
+/// C++ unit testing for Elasticity
+class pylith::feassemble::TestIntegratorElasticityLgDeform : public CppUnit::TestFixture
+{ // class TestIntegratorElasticityLgDeform
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestIntegratorElasticityLgDeform );
+
+  CPPUNIT_TEST( testCalcDeformation1D );
+  CPPUNIT_TEST( testCalcDeformation2D );
+  CPPUNIT_TEST( testCalcDeformation3D );
+  CPPUNIT_TEST( testCalcTotalStrain1D );
+  CPPUNIT_TEST( testCalcTotalStrain2D );
+  CPPUNIT_TEST( testCalcTotalStrain3D );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test calcDeformation() for 1-D.
+  void testCalcDeformation1D(void);
+
+  /// Test calcDeformation() for 2-D.
+  void testCalcDeformation2D(void);
+
+  /// Test calcDeformation() for 3-D.
+  void testCalcDeformation3D(void);
+
+  /// Test calcTotalStrain1D().
+  void testCalcTotalStrain1D(void);
+
+  /// Test calcTotalStrain2D().
+  void testCalcTotalStrain2D(void);
+
+  /// Test calcTotalStrain3D().
+  void testCalcTotalStrain3D(void);
+
+}; // class TestIntegratorElasticityLgDeform
+
+#endif // pylith_feassemble_testintegratorelasticitylgdeform_hh
+
+
+// End of file 


Property changes on: short/3D/PyLith/trunk/unittests/libtests/feassemble/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicit.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicit.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicit.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -15,14 +15,14 @@
 ## @brief Python application for generating C++ data files for testing
 ## C++ ElasticityExplicit object.
 
-from IntegratorElasticity import IntegratorElasticity
+from pyre.components.Component import Component
 
 import numpy
 
 # ----------------------------------------------------------------------
 
 # ElasticityExplicit class
-class ElasticityExplicit(IntegratorElasticity):
+class ElasticityExplicit(Component):
   """
   Python application for generating C++ data files for testing C++
   ElasticityExplicit object.
@@ -34,45 +34,43 @@
     """
     Constructor.
     """
-    IntegratorElasticity.__init__(self, name)
+    Component.__init__(self, name, facility="formulation")
     return
   
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
 
-  def _calculateResidual(self):
+  def calculateResidual(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 = self._calculateStiffnessMat()    
-    M = self._calculateMassMat()
+    K = integrator._calculateStiffnessMat()    
+    M = integrator._calculateMassMat()
 
-    dispResult = self.fieldT - self.fieldTmdt
-    self.valsResidual = 1.0/self.dt**2 * numpy.dot(M, dispResult) - \
-                        numpy.dot(K, self.fieldT)
-    return
+    dispResult = integrator.fieldT - integrator.fieldTmdt
+    residual = 1.0/integrator.dt**2 * numpy.dot(M, dispResult) - \
+        numpy.dot(K, integrator.fieldT)
+    return residual.flatten()
 
 
-  def _calculateJacobian(self):
+  def calculateJacobian(self, integrator):
     """
     Calculate contribution to Jacobian matrix of operator for integrator.
 
     [A] = (1/dt**2)[M]
     """
-    M = self._calculateMassMat()
+    M = integrator._calculateMassMat()
 
-    self.valsJacobian = 1.0/self.dt**2 * M
-    return
+    jacobian = 1.0/integrator.dt**2 * M
+    return jacobian
 
 
-# MAIN /////////////////////////////////////////////////////////////////
-if __name__ == "__main__":
+# FACTORY //////////////////////////////////////////////////////////////
+def formulation():
+  return ElasticityExplicit()
 
-  app = ElasticityExplicit()
-  app.run()
 
-
 # End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityExplicitData1DLinear.hh"
 
@@ -89,7 +89,7 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData1DLinear::_valsResidual[] = {
-  1.60042188e+10,
+  1.60042187e+10,
  -1.59957812e+10,
 };
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata1dlinear_hh)
 #define 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityExplicitData1DQuadratic.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata1dquadratic_hh)
 #define 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityExplicitData2DLinear.hh"
 
@@ -58,7 +58,7 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DLinear::_quadPts[] = {
-  3.33333333e-01,  3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DLinear::_quadWts[] = {
@@ -66,8 +66,8 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DLinear::_basis[] = {
- -3.33333333e-01,  6.66666667e-01,
-  6.66666667e-01,};
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
 
 const double pylith::feassemble::ElasticityExplicitData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
@@ -94,30 +94,30 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidual[] = {
- -1.66791140e+10,  3.09147184e+10,
- -2.30469823e+09, -2.72112551e+10,
-  1.89835830e+10, -3.70266130e+09,
+ -1.66787702e+10,  3.09146039e+10,
+ -2.30412532e+09, -2.72121717e+10,
+  1.89841559e+10, -3.70357797e+09,
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobian[] = {
   3.81944444e+05,  0.00000000e+00,
- -7.63888889e+05,  0.00000000e+00,
- -7.63888889e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
   0.00000000e+00,  3.81944444e+05,
-  0.00000000e+00, -7.63888889e+05,
-  0.00000000e+00, -7.63888889e+05,
- -7.63888889e+05,  0.00000000e+00,
-  1.52777778e+06,  0.00000000e+00,
-  1.52777778e+06,  0.00000000e+00,
-  0.00000000e+00, -7.63888889e+05,
-  0.00000000e+00,  1.52777778e+06,
-  0.00000000e+00,  1.52777778e+06,
- -7.63888889e+05,  0.00000000e+00,
-  1.52777778e+06,  0.00000000e+00,
-  1.52777778e+06,  0.00000000e+00,
-  0.00000000e+00, -7.63888889e+05,
-  0.00000000e+00,  1.52777778e+06,
-  0.00000000e+00,  1.52777778e+06,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
 };
 
 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata2dlinear_hh)
 #define 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityExplicitData2DQuadratic.hh"
 
@@ -25,7 +25,7 @@
 
 const int pylith::feassemble::ElasticityExplicitData2DQuadratic::_numBasis = 6;
 
-const int pylith::feassemble::ElasticityExplicitData2DQuadratic::_numQuadPts = 3;
+const int pylith::feassemble::ElasticityExplicitData2DQuadratic::_numQuadPts = 6;
 
 const char* pylith::feassemble::ElasticityExplicitData2DQuadratic::_matType = "ElasticPlaneStrain";
 
@@ -64,29 +64,59 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
   0.00000000e+00, -7.50000000e-01,
  -7.50000000e-01,  0.00000000e+00,
- -7.50000000e-01, -7.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_quadWts[] = {
-  6.66666667e-01,  6.66666667e-01,  6.66666667e-01,
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
  -9.37500000e-02,  0.00000000e+00,
  -9.37500000e-02,  2.50000000e-01,
   1.87500000e-01,  7.50000000e-01,
  -9.37500000e-02, -9.37500000e-02,
   0.00000000e+00,  2.50000000e-01,
   7.50000000e-01,  1.87500000e-01,
-  3.75000000e-01, -9.37500000e-02,
- -9.37500000e-02,  6.25000000e-02,
-  3.75000000e-01,  3.75000000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
  -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
   2.50000000e-01,  1.00000000e+00,
@@ -98,12 +128,12 @@
   1.00000000e+00,  2.50000000e-01,
  -1.00000000e+00, -2.50000000e-01,
   5.00000000e-01, -2.50000000e-01,
- -1.00000000e+00, -1.00000000e+00,
- -2.50000000e-01,  0.00000000e+00,
-  0.00000000e+00, -2.50000000e-01,
-  2.50000000e-01,  2.50000000e-01,
- -2.50000000e-01,  1.25000000e+00,
-  1.25000000e+00, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_fieldTIncr[] = {
@@ -134,87 +164,87 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsResidual[] = {
- -5.90114822e+09,  4.71777415e+10,
- -1.39396421e+10, -6.36913623e+09,
-  4.56555501e+08,  1.65074214e+10,
-  2.42225720e+10, -8.30477279e+09,
- -2.84015238e+10, -6.85803760e+10,
-  2.35671240e+10,  1.95727783e+10,
+  1.06595078e+10,  9.01579396e+10,
+ -2.93254295e+10, -4.67249883e+09,
+  4.90758945e+09,  6.17199466e+10,
+  6.30081264e+10,  1.02122281e+11,
+ -6.40775573e+10, -1.84807617e+11,
+  1.48314194e+10, -6.45195820e+10,
 };
 
 const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsJacobian[] = {
-  2.37304687e+06,  0.00000000e+00,
- -3.95507812e+05,  0.00000000e+00,
- -3.95507812e+05,  0.00000000e+00,
- -3.51562500e+05,  0.00000000e+00,
-  7.91015625e+05,  0.00000000e+00,
-  7.91015625e+05,  0.00000000e+00,
-  0.00000000e+00,  2.37304687e+06,
-  0.00000000e+00, -3.95507812e+05,
-  0.00000000e+00, -3.95507812e+05,
-  0.00000000e+00, -3.51562500e+05,
-  0.00000000e+00,  7.91015625e+05,
-  0.00000000e+00,  7.91015625e+05,
- -3.95507812e+05,  0.00000000e+00,
-  2.63671875e+05,  0.00000000e+00,
-  1.31835937e+05,  0.00000000e+00,
- -4.39453125e+05,  0.00000000e+00,
- -1.58203125e+06,  0.00000000e+00,
- -7.91015625e+05,  0.00000000e+00,
-  0.00000000e+00, -3.95507812e+05,
-  0.00000000e+00,  2.63671875e+05,
-  0.00000000e+00,  1.31835937e+05,
-  0.00000000e+00, -4.39453125e+05,
-  0.00000000e+00, -1.58203125e+06,
-  0.00000000e+00, -7.91015625e+05,
- -3.95507812e+05,  0.00000000e+00,
-  1.31835937e+05,  0.00000000e+00,
-  2.63671875e+05,  0.00000000e+00,
- -4.39453125e+05,  0.00000000e+00,
- -7.91015625e+05,  0.00000000e+00,
- -1.58203125e+06,  0.00000000e+00,
-  0.00000000e+00, -3.95507812e+05,
-  0.00000000e+00,  1.31835937e+05,
-  0.00000000e+00,  2.63671875e+05,
-  0.00000000e+00, -4.39453125e+05,
-  0.00000000e+00, -7.91015625e+05,
-  0.00000000e+00, -1.58203125e+06,
- -3.51562500e+05,  0.00000000e+00,
- -4.39453125e+05,  0.00000000e+00,
- -4.39453125e+05,  0.00000000e+00,
-  1.93359375e+06,  0.00000000e+00,
-  3.86718750e+06,  0.00000000e+00,
-  3.86718750e+06,  0.00000000e+00,
-  0.00000000e+00, -3.51562500e+05,
-  0.00000000e+00, -4.39453125e+05,
-  0.00000000e+00, -4.39453125e+05,
-  0.00000000e+00,  1.93359375e+06,
-  0.00000000e+00,  3.86718750e+06,
-  0.00000000e+00,  3.86718750e+06,
-  7.91015625e+05,  0.00000000e+00,
- -1.58203125e+06,  0.00000000e+00,
- -7.91015625e+05,  0.00000000e+00,
-  3.86718750e+06,  0.00000000e+00,
-  1.10742188e+07,  0.00000000e+00,
-  6.32812500e+06,  0.00000000e+00,
-  0.00000000e+00,  7.91015625e+05,
-  0.00000000e+00, -1.58203125e+06,
-  0.00000000e+00, -7.91015625e+05,
-  0.00000000e+00,  3.86718750e+06,
-  0.00000000e+00,  1.10742188e+07,
-  0.00000000e+00,  6.32812500e+06,
-  7.91015625e+05,  0.00000000e+00,
- -7.91015625e+05,  0.00000000e+00,
- -1.58203125e+06,  0.00000000e+00,
-  3.86718750e+06,  0.00000000e+00,
-  6.32812500e+06,  0.00000000e+00,
-  1.10742188e+07,  0.00000000e+00,
-  0.00000000e+00,  7.91015625e+05,
-  0.00000000e+00, -7.91015625e+05,
-  0.00000000e+00, -1.58203125e+06,
-  0.00000000e+00,  3.86718750e+06,
-  0.00000000e+00,  6.32812500e+06,
-  0.00000000e+00,  1.10742188e+07,
+  2.24121094e+06,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  4.21875000e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+  0.00000000e+00,  2.24121094e+06,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.36230469e+06,
+  2.41699219e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  2.41699219e+05,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  4.21875000e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  2.21484375e+07,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  2.21484375e+07,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00, -5.39062500e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  8.46679688e+06,
+  0.00000000e+00,  6.09375000e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  6.09375000e+06,
+  0.00000000e+00,  8.46679688e+06,
 };
 
 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata2dquadratic_hh)
 #define 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityExplicitData3DLinear.hh"
 
@@ -68,7 +68,7 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData3DLinear::_basis[] = {
- -2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
 const double pylith::feassemble::ElasticityExplicitData3DLinear::_basisDerivRef[] = {
@@ -100,61 +100,61 @@
 };
 
 const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsResidual[] = {
- -6.07565959e+09,  3.62534033e+10,  3.19640209e+09,
- -4.01015205e+09,  6.66855682e+10,  2.19200477e+10,
-  6.67262366e+09, -1.05592747e+11, -3.14993761e+10,
-  3.41184299e+09,  2.65427945e+09,  6.38343063e+09,
+ -6.07582772e+09,  3.62539077e+10,  3.19640209e+09,
+ -4.00897518e+09,  6.66855682e+10,  2.19195434e+10,
+  6.67380053e+09, -1.05592747e+11, -3.14998804e+10,
+  3.41301986e+09,  2.65427945e+09,  6.38292625e+09,
 };
 
 const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsJacobian[] = {
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
- -8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
- -8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
- -8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
-  0.00000000e+00, -8.40625000e+05,  0.00000000e+00,
-  0.00000000e+00, -8.40625000e+05,  0.00000000e+00,
-  0.00000000e+00, -8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
-  0.00000000e+00,  0.00000000e+00, -8.40625000e+05,
-  0.00000000e+00,  0.00000000e+00, -8.40625000e+05,
-  0.00000000e+00,  0.00000000e+00, -8.40625000e+05,
- -8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
-  0.00000000e+00, -8.40625000e+05,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
-  0.00000000e+00,  0.00000000e+00, -8.40625000e+05,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
- -8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
-  0.00000000e+00, -8.40625000e+05,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
-  0.00000000e+00,  0.00000000e+00, -8.40625000e+05,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
- -8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
-  0.00000000e+00, -8.40625000e+05,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
-  0.00000000e+00,  0.00000000e+00, -8.40625000e+05,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
 };
 
 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata3dlinear_hh)
 #define 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	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityExplicitData3DQuadratic.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityexplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityexplicitdata3dquadratic_hh)
 #define pylith_feassemble_elasticityexplicitdata3dquadratic_hh

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#include "ElasticityExplicitGravData1DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_numVertices = 2;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_numBasis = 2;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitGravData1DLinear::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityExplicitGravData1DLinear::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitGravData1DLinear::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitGravData1DLinear::_cells[] = {
+0,1,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_quadPts[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_basisDerivRef[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldTIncr[] = {
+  1.20000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldT[] = {
+  1.10000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsResidual[] = {
+ -2.65245781e+11,
+ -2.97245781e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsJacobian[] = {
+  1.40625000e+07,
+  1.40625000e+07,
+  1.40625000e+07,
+  1.40625000e+07,
+};
+
+pylith::feassemble::ElasticityExplicitGravData1DLinear::ElasticityExplicitGravData1DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitGravData1DLinear::~ElasticityExplicitGravData1DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#if !defined(pylith_feassemble_elasticityexplicitgravdata1dlinear_hh)
+#define pylith_feassemble_elasticityexplicitgravdata1dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitGravData1DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitGravData1DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitGravData1DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitGravData1DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitgravdata1dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#include "ElasticityExplicitGravData1DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_numQuadPts = 2;
+
+const char* pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+  8.75000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_quadPts[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_basis[] = {
+  4.55341801e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+  4.55341801e-01,
+  6.66666667e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_basisDerivRef[] = {
+ -1.07735027e+00,
+ -7.73502692e-02,
+  1.15470054e+00,
+  7.73502692e-02,
+  1.07735027e+00,
+ -1.15470054e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldTIncr[] = {
+  1.20000000e+00,
+  0.00000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldT[] = {
+  1.10000000e+00,
+  1.00000000e-01,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.00000000e-01,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsResidual[] = {
+ -3.77481250e+10,
+  4.22509375e+10,
+ -5.66994375e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsJacobian[] = {
+  6.25000000e+06,
+ -3.12500000e+06,
+  6.25000000e+06,
+ -3.12500000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  2.50000000e+07,
+};
+
+pylith::feassemble::ElasticityExplicitGravData1DQuadratic::ElasticityExplicitGravData1DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitGravData1DQuadratic::~ElasticityExplicitGravData1DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#if !defined(pylith_feassemble_elasticityexplicitgravdata1dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitgravdata1dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitGravData1DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitGravData1DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitGravData1DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitGravData1DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitgravdata1dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#include "ElasticityExplicitGravData2DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitGravData2DLinear::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityExplicitGravData2DLinear::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitGravData2DLinear::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_vertices[] = {
+  2.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  5.00000000e-01,
+ -1.00000000e+00, -2.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitGravData2DLinear::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_quadPts[] = {
+ -3.33333333e-01, -3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldTIncr[] = {
+  1.30000000e+00, -9.00000000e-01,
+  1.40000000e+00,  1.50000000e+00,
+  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldT[] = {
+  1.60000000e+00, -8.00000000e-01,
+  9.00000000e-01,  7.00000000e-01,
+ -2.00000000e-01, -1.10000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldTmdt[] = {
+  8.00000000e-01,  1.00000000e-01,
+  5.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidual[] = {
+ -1.66787702e+10,  1.94562705e+10,
+ -2.30412532e+09, -3.86705051e+10,
+  1.89841559e+10, -1.51619113e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobian[] = {
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+};
+
+pylith::feassemble::ElasticityExplicitGravData2DLinear::ElasticityExplicitGravData2DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitGravData2DLinear::~ElasticityExplicitGravData2DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#if !defined(pylith_feassemble_elasticityexplicitgravdata2dlinear_hh)
+#define pylith_feassemble_elasticityexplicitgravdata2dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitGravData2DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitGravData2DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitGravData2DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitGravData2DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitgravdata2dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,282 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#include "ElasticityExplicitGravData2DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_numVertices = 6;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_numBasis = 6;
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_numQuadPts = 6;
+
+const char* pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_vertices[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  2.00000000e-01,
+ -1.50000000e+00,  5.00000000e-01,
+ -2.50000000e-01,  3.50000000e-01,
+ -1.25000000e+00, -2.50000000e-01,
+  0.00000000e+00, -4.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_cells[] = {
+0,1,2,3,4,5,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
+  0.00000000e+00, -7.50000000e-01,
+ -7.50000000e-01,  0.00000000e+00,
+  2.50000000e-01,  2.50000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+ -9.37500000e-02,  0.00000000e+00,
+ -9.37500000e-02,  2.50000000e-01,
+  1.87500000e-01,  7.50000000e-01,
+ -9.37500000e-02, -9.37500000e-02,
+  0.00000000e+00,  2.50000000e-01,
+  7.50000000e-01,  1.87500000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.00000000e+00,
+ -2.50000000e-01,  5.00000000e-01,
+ -2.50000000e-01, -1.00000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+  1.00000000e+00,  2.50000000e-01,
+ -1.00000000e+00, -2.50000000e-01,
+  5.00000000e-01, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldTIncr[] = {
+ -4.00000000e-01, -6.00000000e-01,
+  7.00000000e-01,  8.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,
+ -5.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  9.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldT[] = {
+ -3.00000000e-01, -4.00000000e-01,
+  5.00000000e-01,  6.00000000e-01,
+  0.00000000e+00,  1.00000000e-01,
+ -2.00000000e-01, -3.00000000e-01,
+  2.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldTmdt[] = {
+ -2.00000000e-01, -3.00000000e-01,
+  3.00000000e-01,  4.00000000e-01,
+  0.00000000e+00, -1.00000000e-01,
+ -3.00000000e-01, -2.00000000e-01,
+  1.00000000e-01,  4.00000000e-01,
+ -2.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsResidual[] = {
+  1.06595078e+10,  4.79704396e+10,
+ -2.93254295e+10, -4.45162488e+10,
+  4.90758945e+09,  2.18761966e+10,
+  6.30081264e+10, -1.22877719e+11,
+ -6.40775573e+10, -2.36370117e+11,
+  1.48314194e+10, -1.16082082e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsJacobian[] = {
+  2.24121094e+06,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  4.21875000e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+  0.00000000e+00,  2.24121094e+06,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.36230469e+06,
+  2.41699219e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  2.41699219e+05,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  4.21875000e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  2.21484375e+07,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  2.21484375e+07,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00, -5.39062500e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  8.46679688e+06,
+  0.00000000e+00,  6.09375000e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  6.09375000e+06,
+  0.00000000e+00,  8.46679688e+06,
+};
+
+pylith::feassemble::ElasticityExplicitGravData2DQuadratic::ElasticityExplicitGravData2DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitGravData2DQuadratic::~ElasticityExplicitGravData2DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#if !defined(pylith_feassemble_elasticityexplicitgravdata2dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitgravdata2dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitGravData2DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitGravData2DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitGravData2DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitGravData2DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitgravdata2dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,192 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#include "ElasticityExplicitGravData3DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_numVertices = 4;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_numBasis = 4;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitGravData3DLinear::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityExplicitGravData3DLinear::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitGravData3DLinear::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_vertices[] = {
+ -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
+  2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
+  1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitGravData3DLinear::_cells[] = {
+0,1,2,3,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_quadPts[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_quadWts[] = {
+  1.33333333e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_basis[] = {
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldTIncr[] = {
+  3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
+ -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
+  2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
+ -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldT[] = {
+  8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
+  1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
+ -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldTmdt[] = {
+  1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
+  2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
+ -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsResidual[] = {
+ -6.07582772e+09,  3.62539077e+10, -3.04285979e+10,
+ -4.00897518e+09,  6.66855682e+10, -1.17054566e+10,
+  6.67380053e+09, -1.05592747e+11, -6.51248804e+10,
+  3.41301986e+09,  2.65427945e+09, -2.72420737e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsJacobian[] = {
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+};
+
+pylith::feassemble::ElasticityExplicitGravData3DLinear::ElasticityExplicitGravData3DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitGravData3DLinear::~ElasticityExplicitGravData3DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#if !defined(pylith_feassemble_elasticityexplicitgravdata3dlinear_hh)
+#define pylith_feassemble_elasticityexplicitgravdata3dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitGravData3DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitGravData3DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitGravData3DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitGravData3DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitgravdata3dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,531 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#include "ElasticityExplicitGravData3DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_numVertices = 10;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_numBasis = 10;
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_numQuadPts = 4;
+
+const char* pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_vertices[] = {
+ -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
+  2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
+  1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+  1.50000000e+00, -5.00000000e-01, -2.50000000e-01,
+  2.50000000e-01, -5.00000000e-01, -5.00000000e-01,
+  7.50000000e-01, -2.00000000e+00, -7.50000000e-01,
+ -1.50000000e-01, -7.50000000e-01,  5.00000000e-01,
+  1.10000000e+00, -7.50000000e-01,  7.50000000e-01,
+  6.00000000e-01,  7.50000000e-01,  1.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_cells[] = {
+0,1,2,3,4,5,6,7,8,9,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_quadPts[] = {
+ -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+  5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_basis[] = {
+  2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
+ -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
+  2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
+  4.00000000e-02, -4.50000000e-02,  3.75000000e-01,
+ -8.00000000e-02, -8.00000000e-02,  3.00000000e-01,
+  2.00000000e-02,  1.50000000e-01,  2.00000000e-02,
+  3.00000000e-01,  4.00000000e-02, -4.50000000e-02,
+ -8.00000000e-02,  3.75000000e-01, -8.00000000e-02,
+  3.00000000e-01,  1.50000000e-01,  2.00000000e-02,
+  2.00000000e-02,  4.00000000e-02,  3.00000000e-01,
+ -4.50000000e-02, -8.00000000e-02, -8.00000000e-02,
+  3.75000000e-01,  4.00000000e-02,  2.00000000e-02,
+  2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
+  3.00000000e-01,};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_basisDerivRef[] = {
+ -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01,  1.20000000e+00, -2.00000000e-01,
+  1.20000000e+00, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01,  1.20000000e+00,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  1.50000000e+00,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.40000000e+00, -1.50000000e+00, -1.50000000e+00,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  1.50000000e+00,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  1.50000000e+00,  2.00000000e-01,  0.00000000e+00,
+ -1.50000000e+00, -1.40000000e+00, -1.50000000e+00,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  1.50000000e+00,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -1.50000000e+00, -1.50000000e+00, -1.40000000e+00,
+  1.50000000e+00,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldTIncr[] = {
+  3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
+ -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
+  5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
+ -7.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -6.00000000e-01, -3.00000000e-01,  8.00000000e-01,
+ -4.00000000e-01, -8.00000000e-01, -5.00000000e-01,
+  7.00000000e-01,  8.00000000e-01, -5.00000000e-01,
+ -5.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,  8.00000000e-01,
+ -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldT[] = {
+  1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
+ -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
+  6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
+ -8.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+ -0.00000000e+00, -2.00000000e-01,  6.00000000e-01,
+ -4.00000000e-01, -7.00000000e-01, -2.00000000e-01,
+  7.00000000e-01,  6.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01, -3.00000000e-01, -3.00000000e-01,
+ -7.00000000e-01, -6.00000000e-01,  1.00000000e-01,
+ -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldTmdt[] = {
+  2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
+ -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
+ -3.00000000e-01, -8.00000000e-01, -3.00000000e-01,
+ -5.00000000e-01, -9.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+  9.00000000e-01,  5.00000000e-01, -2.00000000e-01,
+ -7.00000000e-01, -2.00000000e-01, -9.00000000e-01,
+ -5.00000000e-01, -8.00000000e-01,  4.00000000e-01,
+ -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsResidual[] = {
+  2.17446982e+10, -9.08226289e+09, -5.09583471e+09,
+  6.22338118e+10, -2.47879968e+10, -1.65884560e+10,
+ -4.60076154e+10, -5.34101030e+10, -5.55279242e+10,
+ -1.00555635e+10,  4.19850265e+10, -6.27466022e+10,
+ -8.43197122e+09,  6.33093784e+10, -1.24366385e+11,
+  6.62258554e+10,  1.09239192e+11, -1.20877067e+11,
+ -9.59444688e+10, -5.29496681e+10, -1.08716467e+11,
+ -1.25318752e+10, -6.06765547e+10, -7.32262485e+10,
+ -3.24446843e+10,  5.14096428e+10, -1.13619631e+11,
+  5.52108169e+10, -6.50263642e+10, -3.06855968e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsJacobian[] = {
+  1.50251107e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.50251107e+06,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.50251107e+06,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+};
+
+pylith::feassemble::ElasticityExplicitGravData3DQuadratic::ElasticityExplicitGravData3DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitGravData3DQuadratic::~ElasticityExplicitGravData3DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticity.
+
+#if !defined(pylith_feassemble_elasticityexplicitgravdata3dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitgravdata3dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitGravData3DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitGravData3DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitGravData3DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitGravData3DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitgravdata3dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/ElasticityExplicit.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ ElasticityExplicit object.
+
+from pyre.components.Component import Component
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# ElasticityExplicit class
+class ElasticityExplicit(Component):
+  """
+  Python application for generating C++ data files for testing C++
+  ElasticityExplicit object.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="elasticityexplicit"):
+    """
+    Constructor.
+    """
+    Component.__init__(self, name, facility="formulation")
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def calculateResidual(self, integrator):
+    """
+    Calculate contribution to residual of operator for integrator.
+
+    {r} = (1/dt**2)[M](-{u(t+dt)} + 2 {u(t)} - {u(t-dt)}) -
+          Sum(wt * [BL]^T [S])
+    """
+    import feutils
+
+    # Calculate action for inertia
+    M = integrator._calculateMassMat()
+    dispResult = integrator.fieldT - integrator.fieldTmdt
+    residual = 1.0/integrator.dt**2 * numpy.dot(M, dispResult)
+    residual = residual.flatten()
+
+    # Calculate action for elasticity
+
+    # Matrix of elasticity values
+    D = integrator._calculateElasticityMat()
+    
+    for cell in integrator.cells:
+      cellR = numpy.zeros( (integrator.spaceDim*integrator.numBasis, 1),
+                           dtype=numpy.float64)
+      vertices = integrator.vertices[cell, :]
+      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
+          feutils.calculateJacobian(integrator.quadrature, vertices)
+      fieldT = integrator.fieldT
+      for iQuad in xrange(integrator.numQuadPts):
+        wt = integrator.quadWts[iQuad] * jacobianDet[iQuad]
+        BL0 = integrator._calculateBasisDerivMatLinear0(basisDeriv, iQuad)
+        BL1 = integrator._calculateBasisDerivMatLinear1(basisDeriv, iQuad, fieldT)
+        BL = BL0 + BL1
+        strain = integrator._calculateStrain(basisDeriv, iQuad, fieldT)
+        S = numpy.dot(D, strain.transpose())
+        cellR -= wt * numpy.dot(BL.transpose(), S)
+      
+      feutils.assembleVec(residual, cellR.flatten(), cell, integrator.spaceDim)
+
+    return residual
+
+
+  def calculateJacobian(self, integrator):
+    """
+    Calculate contribution to Jacobian matrix of operator for integrator.
+
+    [A] = (1/dt**2)[M]
+    """
+    M = integrator._calculateMassMat()
+
+    jacobian = 1.0/integrator.dt**2 * M
+    return jacobian
+
+
+# FACTORY //////////////////////////////////////////////////////////////
+def formulation():
+  return ElasticityExplicit()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformData1DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_numVertices = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_numBasis = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_cells[] = {
+0,1,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_quadPts[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_basisDerivRef[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldTIncr[] = {
+  1.20000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldT[] = {
+  1.10000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsResidual[] = {
+  2.05237249e+10,
+ -2.05152874e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsJacobian[] = {
+  1.40625000e+07,
+  1.40625000e+07,
+  1.40625000e+07,
+  1.40625000e+07,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::ElasticityExplicitLgDeformData1DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::~ElasticityExplicitLgDeformData1DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformdata1dlinear_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformdata1dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformData1DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformData1DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformData1DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformData1DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformdata1dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformData1DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_numQuadPts = 2;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+  8.75000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_quadPts[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_basis[] = {
+  4.55341801e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+  4.55341801e-01,
+  6.66666667e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_basisDerivRef[] = {
+ -1.07735027e+00,
+ -7.73502692e-02,
+  1.15470054e+00,
+  7.73502692e-02,
+  1.07735027e+00,
+ -1.15470054e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldTIncr[] = {
+  1.20000000e+00,
+  0.00000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldT[] = {
+  1.10000000e+00,
+  1.00000000e-01,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.00000000e-01,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsResidual[] = {
+  8.41223688e+10,
+ -9.31066744e+09,
+ -7.48032639e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsJacobian[] = {
+  6.25000000e+06,
+ -3.12500000e+06,
+  6.25000000e+06,
+ -3.12500000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  2.50000000e+07,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::ElasticityExplicitLgDeformData1DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::~ElasticityExplicitLgDeformData1DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformdata1dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformdata1dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformData1DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformData1DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformData1DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformdata1dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformData2DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_vertices[] = {
+  2.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  5.00000000e-01,
+ -1.00000000e+00, -2.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_quadPts[] = {
+ -3.33333333e-01, -3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldTIncr[] = {
+  1.30000000e+00, -9.00000000e-01,
+  1.40000000e+00,  1.50000000e+00,
+  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldT[] = {
+  1.60000000e+00, -8.00000000e-01,
+  9.00000000e-01,  7.00000000e-01,
+ -2.00000000e-01, -1.10000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldTmdt[] = {
+  8.00000000e-01,  1.00000000e-01,
+  5.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsResidual[] = {
+ -1.30906935e+11,  1.45826347e+11,
+  4.13444081e+10, -1.44671612e+11,
+  8.95637877e+10, -1.15588068e+09,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsJacobian[] = {
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::ElasticityExplicitLgDeformData2DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::~ElasticityExplicitLgDeformData2DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformdata2dlinear_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformdata2dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformData2DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformData2DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformData2DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformData2DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformdata2dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,282 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformData2DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_numVertices = 6;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_numBasis = 6;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_numQuadPts = 6;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_vertices[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  2.00000000e-01,
+ -1.50000000e+00,  5.00000000e-01,
+ -2.50000000e-01,  3.50000000e-01,
+ -1.25000000e+00, -2.50000000e-01,
+  0.00000000e+00, -4.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_cells[] = {
+0,1,2,3,4,5,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
+  0.00000000e+00, -7.50000000e-01,
+ -7.50000000e-01,  0.00000000e+00,
+  2.50000000e-01,  2.50000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+ -9.37500000e-02,  0.00000000e+00,
+ -9.37500000e-02,  2.50000000e-01,
+  1.87500000e-01,  7.50000000e-01,
+ -9.37500000e-02, -9.37500000e-02,
+  0.00000000e+00,  2.50000000e-01,
+  7.50000000e-01,  1.87500000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.00000000e+00,
+ -2.50000000e-01,  5.00000000e-01,
+ -2.50000000e-01, -1.00000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+  1.00000000e+00,  2.50000000e-01,
+ -1.00000000e+00, -2.50000000e-01,
+  5.00000000e-01, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldTIncr[] = {
+ -4.00000000e-01, -6.00000000e-01,
+  7.00000000e-01,  8.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,
+ -5.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  9.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldT[] = {
+ -3.00000000e-01, -4.00000000e-01,
+  5.00000000e-01,  6.00000000e-01,
+  0.00000000e+00,  1.00000000e-01,
+ -2.00000000e-01, -3.00000000e-01,
+  2.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldTmdt[] = {
+ -2.00000000e-01, -3.00000000e-01,
+  3.00000000e-01,  4.00000000e-01,
+  0.00000000e+00, -1.00000000e-01,
+ -3.00000000e-01, -2.00000000e-01,
+  1.00000000e-01,  4.00000000e-01,
+ -2.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsResidual[] = {
+  3.35158253e+10,  8.10161927e+10,
+ -7.94924298e+10, -4.37818288e+10,
+  2.10014068e+10,  2.15146983e+10,
+  7.31028066e+10, -6.35763747e+09,
+ -5.42559207e+10, -9.94886446e+10,
+  6.13196816e+09,  4.70976886e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsJacobian[] = {
+  2.24121094e+06,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  4.21875000e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+  0.00000000e+00,  2.24121094e+06,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.36230469e+06,
+  2.41699219e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  2.41699219e+05,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  4.21875000e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  2.21484375e+07,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  2.21484375e+07,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00, -5.39062500e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  8.46679688e+06,
+  0.00000000e+00,  6.09375000e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  6.09375000e+06,
+  0.00000000e+00,  8.46679688e+06,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::ElasticityExplicitLgDeformData2DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::~ElasticityExplicitLgDeformData2DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformdata2dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformdata2dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformData2DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformData2DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformData2DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformdata2dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,192 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformData3DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_numVertices = 4;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_numBasis = 4;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_vertices[] = {
+ -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
+  2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
+  1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_cells[] = {
+0,1,2,3,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_quadPts[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_quadWts[] = {
+  1.33333333e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_basis[] = {
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldTIncr[] = {
+  3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
+ -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
+  2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
+ -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldT[] = {
+  8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
+  1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
+ -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldTmdt[] = {
+  1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
+  2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
+ -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsResidual[] = {
+ -1.33662714e+10,  3.00655673e+11,  1.48220308e+11,
+ -5.48903846e+10,  6.55599973e+11,  3.04460040e+11,
+  6.45906661e+10, -1.06342926e+12, -4.86427795e+11,
+  3.66800744e+09,  1.07174625e+11,  3.37464384e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsJacobian[] = {
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::ElasticityExplicitLgDeformData3DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::~ElasticityExplicitLgDeformData3DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformdata3dlinear_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformdata3dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformData3DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformData3DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformData3DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformData3DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformdata3dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,531 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformData3DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_numVertices = 10;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_numBasis = 10;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_numQuadPts = 4;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_vertices[] = {
+ -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
+  2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
+  1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+  1.50000000e+00, -5.00000000e-01, -2.50000000e-01,
+  2.50000000e-01, -5.00000000e-01, -5.00000000e-01,
+  7.50000000e-01, -2.00000000e+00, -7.50000000e-01,
+ -1.50000000e-01, -7.50000000e-01,  5.00000000e-01,
+  1.10000000e+00, -7.50000000e-01,  7.50000000e-01,
+  6.00000000e-01,  7.50000000e-01,  1.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_cells[] = {
+0,1,2,3,4,5,6,7,8,9,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_quadPts[] = {
+ -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+  5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_basis[] = {
+  2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
+ -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
+  2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
+  4.00000000e-02, -4.50000000e-02,  3.75000000e-01,
+ -8.00000000e-02, -8.00000000e-02,  3.00000000e-01,
+  2.00000000e-02,  1.50000000e-01,  2.00000000e-02,
+  3.00000000e-01,  4.00000000e-02, -4.50000000e-02,
+ -8.00000000e-02,  3.75000000e-01, -8.00000000e-02,
+  3.00000000e-01,  1.50000000e-01,  2.00000000e-02,
+  2.00000000e-02,  4.00000000e-02,  3.00000000e-01,
+ -4.50000000e-02, -8.00000000e-02, -8.00000000e-02,
+  3.75000000e-01,  4.00000000e-02,  2.00000000e-02,
+  2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
+  3.00000000e-01,};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_basisDerivRef[] = {
+ -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01,  1.20000000e+00, -2.00000000e-01,
+  1.20000000e+00, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01,  1.20000000e+00,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  1.50000000e+00,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.40000000e+00, -1.50000000e+00, -1.50000000e+00,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  1.50000000e+00,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  1.50000000e+00,  2.00000000e-01,  0.00000000e+00,
+ -1.50000000e+00, -1.40000000e+00, -1.50000000e+00,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  1.50000000e+00,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -1.50000000e+00, -1.50000000e+00, -1.40000000e+00,
+  1.50000000e+00,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldTIncr[] = {
+  3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
+ -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
+  5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
+ -7.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -6.00000000e-01, -3.00000000e-01,  8.00000000e-01,
+ -4.00000000e-01, -8.00000000e-01, -5.00000000e-01,
+  7.00000000e-01,  8.00000000e-01, -5.00000000e-01,
+ -5.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,  8.00000000e-01,
+ -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldT[] = {
+  1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
+ -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
+  6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
+ -8.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+ -0.00000000e+00, -2.00000000e-01,  6.00000000e-01,
+ -4.00000000e-01, -7.00000000e-01, -2.00000000e-01,
+  7.00000000e-01,  6.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01, -3.00000000e-01, -3.00000000e-01,
+ -7.00000000e-01, -6.00000000e-01,  1.00000000e-01,
+ -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldTmdt[] = {
+  2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
+ -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
+ -3.00000000e-01, -8.00000000e-01, -3.00000000e-01,
+ -5.00000000e-01, -9.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+  9.00000000e-01,  5.00000000e-01, -2.00000000e-01,
+ -7.00000000e-01, -2.00000000e-01, -9.00000000e-01,
+ -5.00000000e-01, -8.00000000e-01,  4.00000000e-01,
+ -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsResidual[] = {
+  3.68914019e+10,  2.89140041e+10, -8.37349483e+08,
+  1.31656837e+11, -3.38172944e+10,  5.13325670e+10,
+ -3.92908518e+11, -2.10628710e+11, -2.01772556e+11,
+ -1.14271876e+11,  1.30714284e+11, -1.07976362e+11,
+ -2.64261066e+11, -2.85532868e+10, -4.02044235e+10,
+  4.59398298e+11,  2.32374884e+11,  2.74961419e+11,
+ -2.46995439e+11, -7.38540882e+10, -4.79777811e+10,
+  5.25207525e+10, -8.35311020e+10, -1.48217553e+10,
+ -1.20397414e+11,  3.07705881e+11, -2.63722698e+11,
+  4.58366027e+11, -2.69314282e+11,  3.51027060e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsJacobian[] = {
+  1.50251107e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.50251107e+06,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.50251107e+06,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::ElasticityExplicitLgDeformData3DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::~ElasticityExplicitLgDeformData3DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformdata3dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformdata3dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformData3DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformData3DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformData3DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformdata3dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformGravData1DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_numVertices = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_numBasis = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_cells[] = {
+0,1,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_quadPts[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_basisDerivRef[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldTIncr[] = {
+  1.20000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldT[] = {
+  1.10000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsResidual[] = {
+ -2.60726275e+11,
+ -3.01765287e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsJacobian[] = {
+  1.40625000e+07,
+  1.40625000e+07,
+  1.40625000e+07,
+  1.40625000e+07,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::ElasticityExplicitLgDeformGravData1DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::~ElasticityExplicitLgDeformGravData1DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformgravdata1dlinear_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformgravdata1dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformGravData1DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformGravData1DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformGravData1DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformgravdata1dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformGravData1DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_numQuadPts = 2;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+  8.75000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_quadPts[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_basis[] = {
+  4.55341801e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+  4.55341801e-01,
+  6.66666667e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_basisDerivRef[] = {
+ -1.07735027e+00,
+ -7.73502692e-02,
+  1.15470054e+00,
+  7.73502692e-02,
+  1.07735027e+00,
+ -1.15470054e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldTIncr[] = {
+  1.20000000e+00,
+  0.00000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldT[] = {
+  1.10000000e+00,
+  1.00000000e-01,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.00000000e-01,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsResidual[] = {
+ -9.62763117e+09,
+ -1.03060667e+11,
+ -4.49803264e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsJacobian[] = {
+  6.25000000e+06,
+ -3.12500000e+06,
+  6.25000000e+06,
+ -3.12500000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  6.25000000e+06,
+  2.50000000e+07,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::ElasticityExplicitLgDeformGravData1DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::~ElasticityExplicitLgDeformGravData1DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformgravdata1dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformgravdata1dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformGravData1DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformGravData1DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformGravData1DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformgravdata1dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformGravData2DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_vertices[] = {
+  2.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  5.00000000e-01,
+ -1.00000000e+00, -2.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_quadPts[] = {
+ -3.33333333e-01, -3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldTIncr[] = {
+  1.30000000e+00, -9.00000000e-01,
+  1.40000000e+00,  1.50000000e+00,
+  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldT[] = {
+  1.60000000e+00, -8.00000000e-01,
+  9.00000000e-01,  7.00000000e-01,
+ -2.00000000e-01, -1.10000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldTmdt[] = {
+  8.00000000e-01,  1.00000000e-01,
+  5.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsResidual[] = {
+ -1.30906935e+11,  1.34368014e+11,
+  4.13444081e+10, -1.56129945e+11,
+  8.95637877e+10, -1.26142140e+10,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsJacobian[] = {
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  3.81944444e+05,  0.00000000e+00,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+  0.00000000e+00,  3.81944444e+05,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::ElasticityExplicitLgDeformGravData2DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::~ElasticityExplicitLgDeformGravData2DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformgravdata2dlinear_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformgravdata2dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformGravData2DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformGravData2DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformGravData2DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformgravdata2dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,282 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformGravData2DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_numVertices = 6;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_numBasis = 6;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_numQuadPts = 6;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_vertices[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  2.00000000e-01,
+ -1.50000000e+00,  5.00000000e-01,
+ -2.50000000e-01,  3.50000000e-01,
+ -1.25000000e+00, -2.50000000e-01,
+  0.00000000e+00, -4.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_cells[] = {
+0,1,2,3,4,5,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
+  0.00000000e+00, -7.50000000e-01,
+ -7.50000000e-01,  0.00000000e+00,
+  2.50000000e-01,  2.50000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+ -9.37500000e-02,  0.00000000e+00,
+ -9.37500000e-02,  2.50000000e-01,
+  1.87500000e-01,  7.50000000e-01,
+ -9.37500000e-02, -9.37500000e-02,
+  0.00000000e+00,  2.50000000e-01,
+  7.50000000e-01,  1.87500000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.00000000e+00,
+ -2.50000000e-01,  5.00000000e-01,
+ -2.50000000e-01, -1.00000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+  1.00000000e+00,  2.50000000e-01,
+ -1.00000000e+00, -2.50000000e-01,
+  5.00000000e-01, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldTIncr[] = {
+ -4.00000000e-01, -6.00000000e-01,
+  7.00000000e-01,  8.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,
+ -5.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  9.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldT[] = {
+ -3.00000000e-01, -4.00000000e-01,
+  5.00000000e-01,  6.00000000e-01,
+  0.00000000e+00,  1.00000000e-01,
+ -2.00000000e-01, -3.00000000e-01,
+  2.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldTmdt[] = {
+ -2.00000000e-01, -3.00000000e-01,
+  3.00000000e-01,  4.00000000e-01,
+  0.00000000e+00, -1.00000000e-01,
+ -3.00000000e-01, -2.00000000e-01,
+  1.00000000e-01,  4.00000000e-01,
+ -2.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsResidual[] = {
+  3.35158253e+10,  3.88286927e+10,
+ -7.94924298e+10, -8.36255788e+10,
+  2.10014068e+10, -1.83290517e+10,
+  7.31028066e+10, -2.31357637e+11,
+ -5.42559207e+10, -1.51051145e+11,
+  6.13196816e+09, -4.46481142e+09,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsJacobian[] = {
+  2.24121094e+06,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  2.41699219e+05,  0.00000000e+00,
+  4.21875000e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.36230469e+06,  0.00000000e+00,
+  0.00000000e+00,  2.24121094e+06,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.36230469e+06,
+  2.41699219e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  2.41699219e+05,  0.00000000e+00,
+ -6.73828125e+05,  0.00000000e+00,
+  3.61083984e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+  0.00000000e+00,  2.41699219e+05,
+  0.00000000e+00, -6.73828125e+05,
+  0.00000000e+00,  3.61083984e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  4.21875000e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  3.45703125e+06,  0.00000000e+00,
+  2.21484375e+07,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  0.00000000e+00,  4.21875000e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  3.45703125e+06,
+  0.00000000e+00,  2.21484375e+07,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00, -5.39062500e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  8.46679688e+06,
+  0.00000000e+00,  6.09375000e+06,
+ -1.36230469e+06,  0.00000000e+00,
+ -1.12792969e+06,  0.00000000e+00,
+ -1.52343750e+06,  0.00000000e+00,
+ -5.39062500e+06,  0.00000000e+00,
+  6.09375000e+06,  0.00000000e+00,
+  8.46679688e+06,  0.00000000e+00,
+  0.00000000e+00, -1.36230469e+06,
+  0.00000000e+00, -1.12792969e+06,
+  0.00000000e+00, -1.52343750e+06,
+  0.00000000e+00, -5.39062500e+06,
+  0.00000000e+00,  6.09375000e+06,
+  0.00000000e+00,  8.46679688e+06,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::ElasticityExplicitLgDeformGravData2DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::~ElasticityExplicitLgDeformGravData2DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformgravdata2dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformgravdata2dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformGravData2DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformGravData2DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformGravData2DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformgravdata2dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,192 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformGravData3DLinear.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_numVertices = 4;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_numBasis = 4;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_vertices[] = {
+ -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
+  2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
+  1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_cells[] = {
+0,1,2,3,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_quadPts[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_quadWts[] = {
+  1.33333333e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_basis[] = {
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldTIncr[] = {
+  3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
+ -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
+  2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
+ -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldT[] = {
+  8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
+  1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
+ -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldTmdt[] = {
+  1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
+  2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
+ -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsResidual[] = {
+ -1.33662714e+10,  3.00655673e+11,  1.14595308e+11,
+ -5.48903846e+10,  6.55599973e+11,  2.70835040e+11,
+  6.45906661e+10, -1.06342926e+12, -5.20052795e+11,
+  3.66800744e+09,  1.07174625e+11,  1.21438352e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsJacobian[] = {
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  8.40625000e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+  0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::ElasticityExplicitLgDeformGravData3DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::~ElasticityExplicitLgDeformGravData3DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformgravdata3dlinear_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformgravdata3dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformGravData3DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformGravData3DLinear(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformGravData3DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformgravdata3dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,531 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityExplicitLgDeformGravData3DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_numVertices = 10;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_numBasis = 10;
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_numQuadPts = 4;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_vertices[] = {
+ -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
+  2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
+  1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+  1.50000000e+00, -5.00000000e-01, -2.50000000e-01,
+  2.50000000e-01, -5.00000000e-01, -5.00000000e-01,
+  7.50000000e-01, -2.00000000e+00, -7.50000000e-01,
+ -1.50000000e-01, -7.50000000e-01,  5.00000000e-01,
+  1.10000000e+00, -7.50000000e-01,  7.50000000e-01,
+  6.00000000e-01,  7.50000000e-01,  1.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_cells[] = {
+0,1,2,3,4,5,6,7,8,9,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_quadPts[] = {
+ -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+  5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_basis[] = {
+  2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
+ -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
+  2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
+  4.00000000e-02, -4.50000000e-02,  3.75000000e-01,
+ -8.00000000e-02, -8.00000000e-02,  3.00000000e-01,
+  2.00000000e-02,  1.50000000e-01,  2.00000000e-02,
+  3.00000000e-01,  4.00000000e-02, -4.50000000e-02,
+ -8.00000000e-02,  3.75000000e-01, -8.00000000e-02,
+  3.00000000e-01,  1.50000000e-01,  2.00000000e-02,
+  2.00000000e-02,  4.00000000e-02,  3.00000000e-01,
+ -4.50000000e-02, -8.00000000e-02, -8.00000000e-02,
+  3.75000000e-01,  4.00000000e-02,  2.00000000e-02,
+  2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
+  3.00000000e-01,};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_basisDerivRef[] = {
+ -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01,  1.20000000e+00, -2.00000000e-01,
+  1.20000000e+00, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01,  1.20000000e+00,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  1.50000000e+00,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.40000000e+00, -1.50000000e+00, -1.50000000e+00,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  1.50000000e+00,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  1.50000000e+00,  2.00000000e-01,  0.00000000e+00,
+ -1.50000000e+00, -1.40000000e+00, -1.50000000e+00,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  1.50000000e+00,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -1.50000000e+00, -1.50000000e+00, -1.40000000e+00,
+  1.50000000e+00,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldTIncr[] = {
+  3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
+ -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
+  5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
+ -7.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -6.00000000e-01, -3.00000000e-01,  8.00000000e-01,
+ -4.00000000e-01, -8.00000000e-01, -5.00000000e-01,
+  7.00000000e-01,  8.00000000e-01, -5.00000000e-01,
+ -5.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,  8.00000000e-01,
+ -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldT[] = {
+  1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
+ -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
+  6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
+ -8.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+ -0.00000000e+00, -2.00000000e-01,  6.00000000e-01,
+ -4.00000000e-01, -7.00000000e-01, -2.00000000e-01,
+  7.00000000e-01,  6.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01, -3.00000000e-01, -3.00000000e-01,
+ -7.00000000e-01, -6.00000000e-01,  1.00000000e-01,
+ -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldTmdt[] = {
+  2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
+ -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
+ -3.00000000e-01, -8.00000000e-01, -3.00000000e-01,
+ -5.00000000e-01, -9.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+  9.00000000e-01,  5.00000000e-01, -2.00000000e-01,
+ -7.00000000e-01, -2.00000000e-01, -9.00000000e-01,
+ -5.00000000e-01, -8.00000000e-01,  4.00000000e-01,
+ -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsResidual[] = {
+  3.68914019e+10,  2.89140041e+10, -2.66277141e+10,
+  1.31656837e+11, -3.38172944e+10,  2.73208483e+10,
+ -3.92908518e+11, -2.10628710e+11, -2.25784275e+11,
+ -1.14271876e+11,  1.30714284e+11, -1.31988081e+11,
+ -2.64261066e+11, -2.85532868e+10, -1.61152340e+11,
+  4.59398298e+11,  2.32374884e+11,  1.91365064e+11,
+ -2.46995439e+11, -7.38540882e+10, -1.31574135e+11,
+  5.25207525e+10, -8.35311020e+10, -9.84181095e+10,
+ -1.20397414e+11,  3.07705881e+11, -3.84670615e+11,
+  4.58366027e+11, -2.69314282e+11,  2.30079143e+11,
+};
+
+const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsJacobian[] = {
+  1.50251107e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.50251107e+06,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.50251107e+06,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+ -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+ -8.39520833e+05,  0.00000000e+00,  0.00000000e+00,
+  2.84272070e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -5.70500651e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00, -8.39520833e+05,  0.00000000e+00,
+  0.00000000e+00,  2.84272070e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -5.70500651e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00, -8.39520833e+05,
+  0.00000000e+00,  0.00000000e+00,  2.84272070e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  1.24238411e+06,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+ -5.06914062e+05,  0.00000000e+00,  0.00000000e+00,
+  5.45154948e+05,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.50829167e+06,  0.00000000e+00,  0.00000000e+00,
+  1.80888281e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.24238411e+06,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00, -5.06914062e+05,  0.00000000e+00,
+  0.00000000e+00,  5.45154948e+05,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.50829167e+06,  0.00000000e+00,
+  0.00000000e+00,  1.80888281e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.24238411e+06,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00, -5.06914062e+05,
+  0.00000000e+00,  0.00000000e+00,  5.45154948e+05,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.50829167e+06,
+  0.00000000e+00,  0.00000000e+00,  1.80888281e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+ -3.13041667e+05,  0.00000000e+00,  0.00000000e+00,
+ -6.43869792e+05,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  1.46026823e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  5.19364583e+05,  0.00000000e+00,  0.00000000e+00,
+  1.12054688e+06,  0.00000000e+00,  0.00000000e+00,
+  2.05611458e+06,  0.00000000e+00,  0.00000000e+00,
+  3.25847917e+06,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.13041667e+05,  0.00000000e+00,
+  0.00000000e+00, -6.43869792e+05,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  1.46026823e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  5.19364583e+05,  0.00000000e+00,
+  0.00000000e+00,  1.12054688e+06,  0.00000000e+00,
+  0.00000000e+00,  2.05611458e+06,  0.00000000e+00,
+  0.00000000e+00,  3.25847917e+06,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.13041667e+05,
+  0.00000000e+00,  0.00000000e+00, -6.43869792e+05,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  1.46026823e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  5.19364583e+05,
+  0.00000000e+00,  0.00000000e+00,  1.12054688e+06,
+  0.00000000e+00,  0.00000000e+00,  2.05611458e+06,
+  0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
+};
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::ElasticityExplicitLgDeformGravData3DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::~ElasticityExplicitLgDeformGravData3DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityexplicitlgdeformgravdata3dquadratic_hh)
+#define pylith_feassemble_elasticityexplicitlgdeformgravdata3dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityExplicitLgDeformGravData3DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityExplicitLgDeformGravData3DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityExplicitLgDeformGravData3DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityexplicitlgdeformgravdata3dquadratic_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicit.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicit.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicit.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -15,14 +15,14 @@
 ## @brief Python application for generating C++ data files for testing
 ## C++ ElasticityImplicit object.
 
-from IntegratorElasticity import IntegratorElasticity
+from pyre.components.Component import Component
 
 import numpy
 
 # ----------------------------------------------------------------------
 
 # ElasticityImplicit class
-class ElasticityImplicit(IntegratorElasticity):
+class ElasticityImplicit(Component):
   """
   Python application for generating C++ data files for testing C++
   ElasticityImplicit object.
@@ -34,41 +34,39 @@
     """
     Constructor.
     """
-    IntegratorElasticity.__init__(self, name)
+    Component.__init__(self, name, facility="formulation")
     return
   
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
 
-  def _calculateResidual(self):
+  def calculateResidual(self, integrator):
     """
     Calculate contribution to residual of operator for integrator.
 
     {r} = -[K]{u(t)}
     """
-    K = self._calculateStiffnessMat()    
+    K = integrator._calculateStiffnessMat()    
 
-    self.valsResidual = -numpy.dot(K, self.fieldT+self.fieldTIncr)
-    return
+    residual = -numpy.dot(K, integrator.fieldT+integrator.fieldTIncr)
+    return residual.flatten()
 
 
-  def _calculateJacobian(self):
+  def calculateJacobian(self, integrator):
     """
     Calculate contribution to Jacobian matrix of operator for integrator.
 
     [A] = [K]
     """
-    K = self._calculateStiffnessMat()    
+    K = integrator._calculateStiffnessMat()    
 
-    self.valsJacobian = K
-    return
+    jacobian = K
+    return jacobian
 
 
-# MAIN /////////////////////////////////////////////////////////////////
-if __name__ == "__main__":
+# FACTORY //////////////////////////////////////////////////////////////
+def formulation():
+  return ElasticityImplicit()
 
-  app = ElasticityImplicit()
-  app.run()
 
-
 # End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitData1DLinear.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitdata1dlinear_hh)
 #define pylith_feassemble_elasticityimplicitdata1dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitData1DQuadratic.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitdata1dquadratic_hh)
 #define pylith_feassemble_elasticityimplicitdata1dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitData2DLinear.hh"
 
@@ -58,7 +58,7 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DLinear::_quadPts[] = {
-  3.33333333e-01,  3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DLinear::_quadWts[] = {
@@ -66,8 +66,8 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DLinear::_basis[] = {
- -3.33333333e-01,  6.66666667e-01,
-  6.66666667e-01,};
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
 
 const double pylith::feassemble::ElasticityImplicitData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitdata2dlinear_hh)
 #define pylith_feassemble_elasticityimplicitdata2dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitData2DQuadratic.hh"
 
@@ -25,7 +25,7 @@
 
 const int pylith::feassemble::ElasticityImplicitData2DQuadratic::_numBasis = 6;
 
-const int pylith::feassemble::ElasticityImplicitData2DQuadratic::_numQuadPts = 3;
+const int pylith::feassemble::ElasticityImplicitData2DQuadratic::_numQuadPts = 6;
 
 const char* pylith::feassemble::ElasticityImplicitData2DQuadratic::_matType = "ElasticPlaneStrain";
 
@@ -64,29 +64,59 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
   0.00000000e+00, -7.50000000e-01,
  -7.50000000e-01,  0.00000000e+00,
- -7.50000000e-01, -7.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_quadWts[] = {
-  6.66666667e-01,  6.66666667e-01,  6.66666667e-01,
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
  -9.37500000e-02,  0.00000000e+00,
  -9.37500000e-02,  2.50000000e-01,
   1.87500000e-01,  7.50000000e-01,
  -9.37500000e-02, -9.37500000e-02,
   0.00000000e+00,  2.50000000e-01,
   7.50000000e-01,  1.87500000e-01,
-  3.75000000e-01, -9.37500000e-02,
- -9.37500000e-02,  6.25000000e-02,
-  3.75000000e-01,  3.75000000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
  -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
   2.50000000e-01,  1.00000000e+00,
@@ -98,12 +128,12 @@
   1.00000000e+00,  2.50000000e-01,
  -1.00000000e+00, -2.50000000e-01,
   5.00000000e-01, -2.50000000e-01,
- -1.00000000e+00, -1.00000000e+00,
- -2.50000000e-01,  0.00000000e+00,
-  0.00000000e+00, -2.50000000e-01,
-  2.50000000e-01,  2.50000000e-01,
- -2.50000000e-01,  1.25000000e+00,
-  1.25000000e+00, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_fieldTIncr[] = {
@@ -134,87 +164,87 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_valsResidual[] = {
- -5.68494358e+10,  1.65323307e+11,
- -4.54933811e+10, -2.45823568e+10,
- -8.68914931e+09,  6.99783854e+10,
-  1.06940907e+11, -8.18836589e+10,
- -4.10563585e+10, -2.77954362e+11,
-  4.51474175e+10,  1.49118685e+11,
+  1.29278791e+09,  2.30117470e+11,
+ -1.01094274e+11, -3.41937391e+10,
+ -6.14324363e+09,  2.06921658e+11,
+  2.08592314e+11,  1.56195193e+11,
+ -1.44154554e+11, -5.45281912e+11,
+  4.15069698e+10, -1.37586697e+10,
 };
 
 const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_valsJacobian[] = {
-  4.15638021e+10,  9.27734375e+09,
-  2.73546007e+09,  4.13736979e+09,
-  4.19184028e+09, -2.59114583e+09,
- -2.07819010e+10, -4.63867188e+09,
- -2.11365017e+10,  3.05501302e+10,
- -6.57269965e+09, -3.67350260e+10,
-  9.27734375e+09,  1.17761719e+11,
-  3.90299479e+09,  4.38476562e+09,
- -2.35677083e+09,  1.52421875e+10,
- -4.63867188e+09, -5.88808594e+10,
-  2.82063802e+10, -9.35410156e+10,
- -3.43912760e+10,  1.50332031e+10,
-  2.73546007e+09,  3.90299479e+09,
-  1.45941840e+10,  3.09244792e+09,
-  4.56163194e+09, -2.35677083e+09,
- -1.64203559e+10,  3.16731771e+09,
-  7.29709201e+09,  1.54622396e+09,
- -1.27680122e+10, -9.35221354e+09,
-  4.13736979e+09,  4.38476562e+09,
-  3.09244792e+09,  6.34765625e+09,
- -2.59114583e+09, -1.21093750e+09,
-  3.63606771e+09, -7.51953125e+08,
-  1.54622396e+09,  3.17382812e+09,
- -9.82096354e+09, -1.19433594e+10,
-  4.19184028e+09, -2.35677083e+09,
-  4.56163194e+09, -2.59114583e+09,
-  1.75069444e+10, -9.89583333e+09,
- -1.78767361e+10,  1.01302083e+10,
- -1.71371528e+10,  9.66145833e+09,
-  8.75347222e+09, -4.94791667e+09,
- -2.59114583e+09,  1.52421875e+10,
- -2.35677083e+09, -1.21093750e+09,
- -9.89583333e+09,  2.80625000e+10,
-  9.66145833e+09, -1.16093750e+10,
-  1.01302083e+10, -4.45156250e+10,
- -4.94791667e+09,  1.40312500e+10,
- -2.07819010e+10, -4.63867188e+09,
- -1.64203559e+10,  3.63606771e+09,
- -1.78767361e+10,  9.66145833e+09,
-  6.89335937e+10, -5.56640625e+09,
-  3.54600694e+08, -3.44856771e+10,
- -1.42092014e+10,  3.13932292e+10,
- -4.63867188e+09, -5.88808594e+10,
-  3.16731771e+09, -7.51953125e+08,
-  1.01302083e+10, -1.16093750e+10,
- -5.56640625e+09,  1.10496094e+11,
- -3.35481771e+10,  3.46601562e+10,
-  3.04557292e+10, -7.39140625e+10,
- -2.11365017e+10,  2.82063802e+10,
-  7.29709201e+09,  1.54622396e+09,
- -1.71371528e+10,  1.01302083e+10,
-  3.54600694e+08, -3.35481771e+10,
-  1.40440538e+11, -4.51497396e+10,
- -1.09818576e+11,  3.88151042e+10,
-  3.05501302e+10, -9.35410156e+10,
-  1.54622396e+09,  3.17382812e+09,
-  9.66145833e+09, -4.45156250e+10,
- -3.44856771e+10,  3.46601562e+10,
- -4.51497396e+10,  1.56933594e+11,
-  3.78776042e+10, -5.67109375e+10,
- -6.57269965e+09, -3.43912760e+10,
- -1.27680122e+10, -9.82096354e+09,
-  8.75347222e+09, -4.94791667e+09,
- -1.42092014e+10,  3.04557292e+10,
- -1.09818576e+11,  3.78776042e+10,
-  1.34615017e+11, -1.91731771e+10,
- -3.67350260e+10,  1.50332031e+10,
- -9.35221354e+09, -1.19433594e+10,
- -4.94791667e+09,  1.40312500e+10,
-  3.13932292e+10, -7.39140625e+10,
-  3.88151042e+10, -5.67109375e+10,
- -1.91731771e+10,  1.13503906e+11,
+  4.84911024e+10,  1.08235677e+10,
+  1.04859303e+10,  1.58599175e+10,
+  1.60687211e+10, -9.93272569e+09,
+  3.11728516e+10,  6.95800781e+09,
+ -5.77211733e+10,  9.45258247e+09,
+ -4.84974320e+10, -3.31613498e+10,
+  1.08235677e+10,  1.37388672e+11,
+  1.49614800e+10,  1.68082682e+10,
+ -9.03428819e+09,  5.84283854e+10,
+  6.95800781e+09,  8.83212891e+10,
+  7.96820747e+09, -1.84855143e+11,
+ -3.16769748e+10, -1.16091471e+11,
+  1.04859303e+10,  1.49614800e+10,
+  4.98634621e+10,  1.05658637e+10,
+  3.04108796e+09, -1.57118056e+09,
+ -2.96531395e+10,  2.41807726e+10,
+  2.28334780e+09, -1.00401476e+10,
+ -3.60206887e+10, -3.80967882e+10,
+  1.58599175e+10,  1.68082682e+10,
+  1.05658637e+10,  2.16878255e+10,
+ -1.72743056e+09, -8.07291667e+08,
+  2.63292101e+10,  1.63899740e+10,
+ -1.07823351e+10, -9.12434896e+09,
+ -4.02452257e+10, -4.49544271e+10,
+  1.60687211e+10, -9.03428819e+09,
+  3.04108796e+09, -1.72743056e+09,
+  5.98153935e+10, -3.38107639e+10,
+ -2.72258391e+10,  1.55056424e+10,
+ -5.15554109e+10,  2.90256076e+10,
+ -1.43952546e+08,  4.12326389e+07,
+ -9.93272569e+09,  5.84283854e+10,
+ -1.57118056e+09, -8.07291667e+08,
+ -3.38107639e+10,  9.58802083e+10,
+  1.33572049e+10,  3.44856771e+10,
+  3.11740451e+10, -1.60766927e+11,
+  7.83420139e+08, -2.72200521e+10,
+  3.11728516e+10,  6.95800781e+09,
+ -2.96531395e+10,  2.63292101e+10,
+ -2.72258391e+10,  1.33572049e+10,
+  1.75797635e+11, -1.31429036e+10,
+ -6.82493128e+10, -4.63926866e+10,
+ -8.18421947e+10,  1.28911675e+10,
+  6.95800781e+09,  8.83212891e+10,
+  2.41807726e+10,  1.63899740e+10,
+  1.55056424e+10,  3.44856771e+10,
+ -1.31429036e+10,  2.86053711e+11,
+ -4.77208116e+10, -1.61957357e+11,
+  1.42192925e+10, -2.63293294e+11,
+ -5.77211733e+10,  7.96820747e+09,
+  2.28334780e+09, -1.07823351e+10,
+ -5.15554109e+10,  3.11740451e+10,
+ -6.82493128e+10, -4.77208116e+10,
+  1.76619973e+11, -1.47922092e+10,
+ -1.37742332e+09,  3.41531033e+10,
+  9.45258247e+09, -1.84855143e+11,
+ -1.00401476e+10, -9.12434896e+09,
+  2.90256076e+10, -1.60766927e+11,
+ -4.63926866e+10, -1.61957357e+11,
+ -1.47922092e+10,  3.83965169e+11,
+  3.27468533e+10,  1.32738607e+11,
+ -4.84974320e+10, -3.16769748e+10,
+ -3.60206887e+10, -4.02452257e+10,
+ -1.43952546e+08,  7.83420139e+08,
+ -8.18421947e+10,  1.42192925e+10,
+ -1.37742332e+09,  3.27468533e+10,
+  1.67881691e+11,  2.41726345e+10,
+ -3.31613498e+10, -1.16091471e+11,
+ -3.80967882e+10, -4.49544271e+10,
+  4.12326389e+07, -2.72200521e+10,
+  1.28911675e+10, -2.63293294e+11,
+  3.41531033e+10,  1.32738607e+11,
+  2.41726345e+10,  3.18820638e+11,
 };
 
 pylith::feassemble::ElasticityImplicitData2DQuadratic::ElasticityImplicitData2DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitdata2dquadratic_hh)
 #define pylith_feassemble_elasticityimplicitdata2dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitData3DLinear.hh"
 
@@ -68,7 +68,7 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitData3DLinear::_basis[] = {
- -2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
 const double pylith::feassemble::ElasticityImplicitData3DLinear::_basisDerivRef[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitdata3dlinear_hh)
 #define pylith_feassemble_elasticityimplicitdata3dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitData3DQuadratic.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicit.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitdata3dquadratic_hh)
 #define pylith_feassemble_elasticityimplicitdata3dquadratic_hh

Deleted: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGrav.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGrav.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGrav.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file unittests/libtests/feassemble/data/ElasticityImplicitGrav.py
-
-## @brief Python application for generating C++ data files for testing
-## C++ ElasticityImplicitGrav object.
-
-from IntegratorElasticity import IntegratorElasticity
-
-import numpy
-import feutils
-# import pdb
-
-# ----------------------------------------------------------------------
-
-# ElasticityImplicitGrav class
-class ElasticityImplicitGrav(IntegratorElasticity):
-  """
-  Python application for generating C++ data files for testing C++
-  ElasticityImplicitGrav object.
-  """
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-  
-  def __init__(self, name="elasticityimplicitgrav"):
-    """
-    Constructor.
-    """
-    # pdb.set_trace()
-    IntegratorElasticity.__init__(self, name)
-    return
-  
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _calculateResidual(self):
-    """
-    Calculate contribution to residual of operator for integrator.
-
-    {r} = -[K]{u(t)}
-    """
-    # pdb.set_trace()
-    K = self._calculateStiffnessMat()    
-    gravityGlobal = self._calculateGravity()
-
-    self.valsResidual = -numpy.dot(K, self.fieldT+self.fieldTIncr) + \
-        gravityGlobal.reshape(self.fieldT.shape)
-    return
-
-
-  def _calculateJacobian(self):
-    """
-    Calculate contribution to Jacobian matrix of operator for integrator.
-
-    [A] = [K]
-    """
-    K = self._calculateStiffnessMat()    
-
-    self.valsJacobian = K
-    return
-
-
-  def _calculateGravity(self):
-    """
-    Calculate body force vector.
-    """
-    # pdb.set_trace()
-    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
-    
-
-
-# MAIN /////////////////////////////////////////////////////////////////
-if __name__ == "__main__":
-
-  app = ElasticityImplicitGrav()
-  app.run()
-
-
-# End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitGravData1DLinear.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitgravdata1dlinear_hh)
 #define pylith_feassemble_elasticityimplicitgravdata1dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitGravData1DQuadratic.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitgravdata1dquadratic_hh)
 #define pylith_feassemble_elasticityimplicitgravdata1dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitGravData2DLinear.hh"
 
@@ -58,7 +58,7 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_quadPts[] = {
-  3.33333333e-01,  3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_quadWts[] = {
@@ -66,8 +66,8 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_basis[] = {
- -3.33333333e-01,  6.66666667e-01,
-  6.66666667e-01,};
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
 
 const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
@@ -94,9 +94,9 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsResidual[] = {
- -2.62107244e+10,  8.25403646e+10,
- -7.87159091e+09, -8.87369792e+10,
-  3.40823153e+10, -2.81783854e+10,
+ -2.62107244e+10,  5.96236979e+10,
+ -7.87159091e+09, -7.72786458e+10,
+  3.40823153e+10, -1.67200521e+10,
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsJacobian[] = {

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitgravdata2dlinear_hh)
 #define pylith_feassemble_elasticityimplicitgravdata2dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitGravData2DQuadratic.hh"
 
@@ -25,7 +25,7 @@
 
 const int pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_numBasis = 6;
 
-const int pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_numQuadPts = 3;
+const int pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_numQuadPts = 6;
 
 const char* pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_matType = "ElasticPlaneStrain";
 
@@ -64,29 +64,59 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
   0.00000000e+00, -7.50000000e-01,
  -7.50000000e-01,  0.00000000e+00,
- -7.50000000e-01, -7.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_quadWts[] = {
-  6.66666667e-01,  6.66666667e-01,  6.66666667e-01,
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
  -9.37500000e-02,  0.00000000e+00,
  -9.37500000e-02,  2.50000000e-01,
   1.87500000e-01,  7.50000000e-01,
  -9.37500000e-02, -9.37500000e-02,
   0.00000000e+00,  2.50000000e-01,
   7.50000000e-01,  1.87500000e-01,
-  3.75000000e-01, -9.37500000e-02,
- -9.37500000e-02,  6.25000000e-02,
-  3.75000000e-01,  3.75000000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
  -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
   2.50000000e-01,  1.00000000e+00,
@@ -98,12 +128,12 @@
   1.00000000e+00,  2.50000000e-01,
  -1.00000000e+00, -2.50000000e-01,
   5.00000000e-01, -2.50000000e-01,
- -1.00000000e+00, -1.00000000e+00,
- -2.50000000e-01,  0.00000000e+00,
-  0.00000000e+00, -2.50000000e-01,
-  2.50000000e-01,  2.50000000e-01,
- -2.50000000e-01,  1.25000000e+00,
-  1.25000000e+00, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_fieldTIncr[] = {
@@ -134,87 +164,87 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_valsResidual[] = {
- -5.68494358e+10,  1.37198307e+11,
- -4.54933811e+10,  3.54264323e+09,
- -8.68914931e+09,  9.81033854e+10,
-  1.06940907e+11, -1.66258659e+11,
- -4.10563585e+10, -4.74829362e+11,
-  4.51474175e+10, -4.77563151e+10,
+  1.29278791e+09,  1.87929970e+11,
+ -1.01094274e+11, -7.40374891e+10,
+ -6.14324363e+09,  1.67077908e+11,
+  2.08592314e+11, -6.88048069e+10,
+ -1.44154554e+11, -5.96844412e+11,
+  4.15069698e+10, -6.53211697e+10,
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_valsJacobian[] = {
-  4.15638021e+10,  9.27734375e+09,
-  2.73546007e+09,  4.13736979e+09,
-  4.19184028e+09, -2.59114583e+09,
- -2.07819010e+10, -4.63867188e+09,
- -2.11365017e+10,  3.05501302e+10,
- -6.57269965e+09, -3.67350260e+10,
-  9.27734375e+09,  1.17761719e+11,
-  3.90299479e+09,  4.38476562e+09,
- -2.35677083e+09,  1.52421875e+10,
- -4.63867188e+09, -5.88808594e+10,
-  2.82063802e+10, -9.35410156e+10,
- -3.43912760e+10,  1.50332031e+10,
-  2.73546007e+09,  3.90299479e+09,
-  1.45941840e+10,  3.09244792e+09,
-  4.56163194e+09, -2.35677083e+09,
- -1.64203559e+10,  3.16731771e+09,
-  7.29709201e+09,  1.54622396e+09,
- -1.27680122e+10, -9.35221354e+09,
-  4.13736979e+09,  4.38476562e+09,
-  3.09244792e+09,  6.34765625e+09,
- -2.59114583e+09, -1.21093750e+09,
-  3.63606771e+09, -7.51953125e+08,
-  1.54622396e+09,  3.17382812e+09,
- -9.82096354e+09, -1.19433594e+10,
-  4.19184028e+09, -2.35677083e+09,
-  4.56163194e+09, -2.59114583e+09,
-  1.75069444e+10, -9.89583333e+09,
- -1.78767361e+10,  1.01302083e+10,
- -1.71371528e+10,  9.66145833e+09,
-  8.75347222e+09, -4.94791667e+09,
- -2.59114583e+09,  1.52421875e+10,
- -2.35677083e+09, -1.21093750e+09,
- -9.89583333e+09,  2.80625000e+10,
-  9.66145833e+09, -1.16093750e+10,
-  1.01302083e+10, -4.45156250e+10,
- -4.94791667e+09,  1.40312500e+10,
- -2.07819010e+10, -4.63867188e+09,
- -1.64203559e+10,  3.63606771e+09,
- -1.78767361e+10,  9.66145833e+09,
-  6.89335937e+10, -5.56640625e+09,
-  3.54600694e+08, -3.44856771e+10,
- -1.42092014e+10,  3.13932292e+10,
- -4.63867188e+09, -5.88808594e+10,
-  3.16731771e+09, -7.51953125e+08,
-  1.01302083e+10, -1.16093750e+10,
- -5.56640625e+09,  1.10496094e+11,
- -3.35481771e+10,  3.46601562e+10,
-  3.04557292e+10, -7.39140625e+10,
- -2.11365017e+10,  2.82063802e+10,
-  7.29709201e+09,  1.54622396e+09,
- -1.71371528e+10,  1.01302083e+10,
-  3.54600694e+08, -3.35481771e+10,
-  1.40440538e+11, -4.51497396e+10,
- -1.09818576e+11,  3.88151042e+10,
-  3.05501302e+10, -9.35410156e+10,
-  1.54622396e+09,  3.17382812e+09,
-  9.66145833e+09, -4.45156250e+10,
- -3.44856771e+10,  3.46601562e+10,
- -4.51497396e+10,  1.56933594e+11,
-  3.78776042e+10, -5.67109375e+10,
- -6.57269965e+09, -3.43912760e+10,
- -1.27680122e+10, -9.82096354e+09,
-  8.75347222e+09, -4.94791667e+09,
- -1.42092014e+10,  3.04557292e+10,
- -1.09818576e+11,  3.78776042e+10,
-  1.34615017e+11, -1.91731771e+10,
- -3.67350260e+10,  1.50332031e+10,
- -9.35221354e+09, -1.19433594e+10,
- -4.94791667e+09,  1.40312500e+10,
-  3.13932292e+10, -7.39140625e+10,
-  3.88151042e+10, -5.67109375e+10,
- -1.91731771e+10,  1.13503906e+11,
+  4.84911024e+10,  1.08235677e+10,
+  1.04859303e+10,  1.58599175e+10,
+  1.60687211e+10, -9.93272569e+09,
+  3.11728516e+10,  6.95800781e+09,
+ -5.77211733e+10,  9.45258247e+09,
+ -4.84974320e+10, -3.31613498e+10,
+  1.08235677e+10,  1.37388672e+11,
+  1.49614800e+10,  1.68082682e+10,
+ -9.03428819e+09,  5.84283854e+10,
+  6.95800781e+09,  8.83212891e+10,
+  7.96820747e+09, -1.84855143e+11,
+ -3.16769748e+10, -1.16091471e+11,
+  1.04859303e+10,  1.49614800e+10,
+  4.98634621e+10,  1.05658637e+10,
+  3.04108796e+09, -1.57118056e+09,
+ -2.96531395e+10,  2.41807726e+10,
+  2.28334780e+09, -1.00401476e+10,
+ -3.60206887e+10, -3.80967882e+10,
+  1.58599175e+10,  1.68082682e+10,
+  1.05658637e+10,  2.16878255e+10,
+ -1.72743056e+09, -8.07291667e+08,
+  2.63292101e+10,  1.63899740e+10,
+ -1.07823351e+10, -9.12434896e+09,
+ -4.02452257e+10, -4.49544271e+10,
+  1.60687211e+10, -9.03428819e+09,
+  3.04108796e+09, -1.72743056e+09,
+  5.98153935e+10, -3.38107639e+10,
+ -2.72258391e+10,  1.55056424e+10,
+ -5.15554109e+10,  2.90256076e+10,
+ -1.43952546e+08,  4.12326389e+07,
+ -9.93272569e+09,  5.84283854e+10,
+ -1.57118056e+09, -8.07291667e+08,
+ -3.38107639e+10,  9.58802083e+10,
+  1.33572049e+10,  3.44856771e+10,
+  3.11740451e+10, -1.60766927e+11,
+  7.83420139e+08, -2.72200521e+10,
+  3.11728516e+10,  6.95800781e+09,
+ -2.96531395e+10,  2.63292101e+10,
+ -2.72258391e+10,  1.33572049e+10,
+  1.75797635e+11, -1.31429036e+10,
+ -6.82493128e+10, -4.63926866e+10,
+ -8.18421947e+10,  1.28911675e+10,
+  6.95800781e+09,  8.83212891e+10,
+  2.41807726e+10,  1.63899740e+10,
+  1.55056424e+10,  3.44856771e+10,
+ -1.31429036e+10,  2.86053711e+11,
+ -4.77208116e+10, -1.61957357e+11,
+  1.42192925e+10, -2.63293294e+11,
+ -5.77211733e+10,  7.96820747e+09,
+  2.28334780e+09, -1.07823351e+10,
+ -5.15554109e+10,  3.11740451e+10,
+ -6.82493128e+10, -4.77208116e+10,
+  1.76619973e+11, -1.47922092e+10,
+ -1.37742332e+09,  3.41531033e+10,
+  9.45258247e+09, -1.84855143e+11,
+ -1.00401476e+10, -9.12434896e+09,
+  2.90256076e+10, -1.60766927e+11,
+ -4.63926866e+10, -1.61957357e+11,
+ -1.47922092e+10,  3.83965169e+11,
+  3.27468533e+10,  1.32738607e+11,
+ -4.84974320e+10, -3.16769748e+10,
+ -3.60206887e+10, -4.02452257e+10,
+ -1.43952546e+08,  7.83420139e+08,
+ -8.18421947e+10,  1.42192925e+10,
+ -1.37742332e+09,  3.27468533e+10,
+  1.67881691e+11,  2.41726345e+10,
+ -3.31613498e+10, -1.16091471e+11,
+ -3.80967882e+10, -4.49544271e+10,
+  4.12326389e+07, -2.72200521e+10,
+  1.28911675e+10, -2.63293294e+11,
+  3.41531033e+10,  1.32738607e+11,
+  2.41726345e+10,  3.18820638e+11,
 };
 
 pylith::feassemble::ElasticityImplicitGravData2DQuadratic::ElasticityImplicitGravData2DQuadratic(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitgravdata2dquadratic_hh)
 #define pylith_feassemble_elasticityimplicitgravdata2dquadratic_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitGravData3DLinear.hh"
 
@@ -68,7 +68,7 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_basis[] = {
- -2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
 const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_basisDerivRef[] = {
@@ -100,7 +100,7 @@
 };
 
 const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_valsResidual[] = {
- -6.04851301e+09,  7.19421933e+10,  4.07639095e+10,
+ -6.04851301e+09,  7.19421933e+10, -2.64860905e+10,
   1.11995353e+10,  1.19496190e+11,  2.47670074e+10,
  -1.62946097e+10, -1.94715799e+11, -1.17458953e+11,
   1.11435874e+10,  3.27741636e+09, -1.53219641e+10,

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitgravdata3dlinear_hh)
 #define pylith_feassemble_elasticityimplicitgravdata3dlinear_hh

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #include "ElasticityImplicitGravData3DQuadratic.hh"
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -11,7 +11,7 @@
 //
 
 // DO NOT EDIT THIS FILE
-// This file was generated from python application elasticityimplicitgrav.
+// This file was generated from python application integratorelasticity.
 
 #if !defined(pylith_feassemble_elasticityimplicitgravdata3dquadratic_hh)
 #define pylith_feassemble_elasticityimplicitgravdata3dquadratic_hh

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/feassemble/data/ElasticityImplicitLgDeform.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ ElasticityImplicitLgDeform object.
+
+from ElasticityImplicit import ElasticityImplicit
+
+import numpy
+
+# ----------------------------------------------------------------------
+
+# ElasticityImplicitLgDeform class
+class ElasticityImplicitLgDeform(ElasticityImplicit):
+  """
+  Python application for generating C++ data files for testing C++
+  ElasticityImplicitLgDeform object.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="elasticityimplicitlgdeform"):
+    """
+    Constructor.
+    """
+    ElasticityImplicit.__init__(self, name)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def calculateResidual(self, integrator):
+    """
+    Calculate contribution to residual of operator for integrator.
+
+    {r} = -Sum(wt * [BL]^T [S})
+    """
+    import feutils
+
+    residual = numpy.zeros( (integrator.spaceDim*integrator.numVertices),
+                            dtype=numpy.float64)
+
+    # Matrix of elasticity values
+    D = integrator._calculateElasticityMat()
+    
+    for cell in integrator.cells:
+      cellR = numpy.zeros( (integrator.spaceDim*integrator.numBasis, 1),
+                           dtype=numpy.float64)
+      vertices = integrator.vertices[cell, :]
+      (jacobian, jacobianInv, jacobianDet, basisDeriv) = \
+          feutils.calculateJacobian(integrator.quadrature, vertices)
+      fieldTpdt = integrator.fieldT + integrator.fieldTIncr
+      for iQuad in xrange(integrator.numQuadPts):
+        wt = integrator.quadWts[iQuad] * jacobianDet[iQuad]
+        BL0 = integrator._calculateBasisDerivMatLinear0(basisDeriv, iQuad)
+        BL1 = integrator._calculateBasisDerivMatLinear1(basisDeriv, iQuad, fieldTpdt)
+        BL = BL0 + BL1
+        strain = integrator._calculateStrain(basisDeriv, iQuad, fieldTpdt)
+        S = numpy.dot(D, strain.transpose())
+        cellR -= wt * numpy.dot(BL.transpose(), S)
+      
+      feutils.assembleVec(residual, cellR.flatten(), cell, integrator.spaceDim)
+
+    return residual
+
+
+# FACTORY //////////////////////////////////////////////////////////////
+def formulation():
+  return ElasticityImplicitLgDeform()
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformData1DLinear.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numVertices = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numBasis = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_cells[] = {
+0,1,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadPts[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basisDerivRef[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTIncr[] = {
+  1.20000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldT[] = {
+  1.10000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsResidual[] = {
+  6.04800000e+10,
+ -6.04800000e+10,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsJacobian[] = {
+  9.76000000e+10,
+ -9.76000000e+10,
+ -9.76000000e+10,
+  9.76000000e+10,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::ElasticityImplicitLgDeformData1DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::~ElasticityImplicitLgDeformData1DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformData1DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformData1DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformData1DLinear(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformData1DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformData1DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_numQuadPts = 2;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+  8.75000000e-01,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_quadPts[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_basis[] = {
+  4.55341801e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+  4.55341801e-01,
+  6.66666667e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_basisDerivRef[] = {
+ -1.07735027e+00,
+ -7.73502692e-02,
+  1.15470054e+00,
+  7.73502692e-02,
+  1.07735027e+00,
+ -1.15470054e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldTIncr[] = {
+  1.20000000e+00,
+  0.00000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldT[] = {
+  1.10000000e+00,
+  1.00000000e-01,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.00000000e-01,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_valsResidual[] = {
+  3.54626283e+11,
+  3.31341344e+11,
+ -6.85967627e+11,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_valsJacobian[] = {
+  5.56003292e+11,
+  7.76230453e+10,
+ -6.33626337e+11,
+  7.76230453e+10,
+  5.30719342e+11,
+ -6.08342387e+11,
+ -6.33626337e+11,
+ -6.08342387e+11,
+  1.24196872e+12,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::ElasticityImplicitLgDeformData1DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::~ElasticityImplicitLgDeformData1DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata1dquadratic_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformdata1dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformData1DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformData1DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformData1DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformdata1dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformData2DLinear.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_vertices[] = {
+  2.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  5.00000000e-01,
+ -1.00000000e+00, -2.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_quadPts[] = {
+ -3.33333333e-01, -3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldTIncr[] = {
+  1.30000000e+00, -9.00000000e-01,
+  1.40000000e+00,  1.50000000e+00,
+  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldT[] = {
+  1.60000000e+00, -8.00000000e-01,
+  9.00000000e-01,  7.00000000e-01,
+ -2.00000000e-01, -1.10000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldTmdt[] = {
+  8.00000000e-01,  1.00000000e-01,
+  5.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsResidual[] = {
+ -3.65540787e+11,  1.05895913e+12,
+  9.00343192e+10, -1.09679715e+12,
+  2.75506468e+11,  3.78380237e+10,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsJacobian[] = {
+  4.36313261e+11, -1.48699027e+11,
+ -2.81223194e+11,  8.77736676e+10,
+ -1.55090067e+11,  6.09253592e+10,
+ -1.48699027e+11,  7.56519651e+11,
+  9.16706846e+10, -6.28762859e+11,
+  5.70283422e+10, -1.27756792e+11,
+ -2.81223194e+11,  9.16706846e+10,
+  2.80835568e+11, -2.94466026e+10,
+  3.87626315e+08, -6.22240820e+10,
+  8.77736676e+10, -6.28762859e+11,
+ -2.94466026e+10,  6.55682896e+11,
+ -5.83270649e+10, -2.69200376e+10,
+ -1.55090067e+11,  5.70283422e+10,
+  3.87626315e+08, -5.83270649e+10,
+  1.54702440e+11,  1.29872276e+09,
+  6.09253592e+10, -1.27756792e+11,
+ -6.22240820e+10, -2.69200376e+10,
+  1.29872276e+09,  1.54676830e+11,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::ElasticityImplicitLgDeformData2DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::~ElasticityImplicitLgDeformData2DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata2dlinear_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformdata2dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformData2DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformData2DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformData2DLinear(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformData2DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformdata2dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,282 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformData2DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_numVertices = 6;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_numBasis = 6;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_numQuadPts = 6;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_vertices[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  2.00000000e-01,
+ -1.50000000e+00,  5.00000000e-01,
+ -2.50000000e-01,  3.50000000e-01,
+ -1.25000000e+00, -2.50000000e-01,
+  0.00000000e+00, -4.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_cells[] = {
+0,1,2,3,4,5,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
+  0.00000000e+00, -7.50000000e-01,
+ -7.50000000e-01,  0.00000000e+00,
+  2.50000000e-01,  2.50000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+ -9.37500000e-02,  0.00000000e+00,
+ -9.37500000e-02,  2.50000000e-01,
+  1.87500000e-01,  7.50000000e-01,
+ -9.37500000e-02, -9.37500000e-02,
+  0.00000000e+00,  2.50000000e-01,
+  7.50000000e-01,  1.87500000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.00000000e+00,
+ -2.50000000e-01,  5.00000000e-01,
+ -2.50000000e-01, -1.00000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+  1.00000000e+00,  2.50000000e-01,
+ -1.00000000e+00, -2.50000000e-01,
+  5.00000000e-01, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldTIncr[] = {
+ -4.00000000e-01, -6.00000000e-01,
+  7.00000000e-01,  8.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,
+ -5.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  9.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldT[] = {
+ -3.00000000e-01, -4.00000000e-01,
+  5.00000000e-01,  6.00000000e-01,
+  0.00000000e+00,  1.00000000e-01,
+ -2.00000000e-01, -3.00000000e-01,
+  2.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldTmdt[] = {
+ -2.00000000e-01, -3.00000000e-01,
+  3.00000000e-01,  4.00000000e-01,
+  0.00000000e+00, -1.00000000e-01,
+ -3.00000000e-01, -2.00000000e-01,
+  1.00000000e-01,  4.00000000e-01,
+ -2.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_valsResidual[] = {
+  1.03829775e+12,  1.76362384e+12,
+ -7.52244241e+11, -8.27609561e+11,
+  8.03865887e+11,  1.06221366e+12,
+  1.48071362e+12,  7.67069459e+11,
+ -2.20475628e+12, -3.81077823e+12,
+ -3.65876743e+11,  1.04548083e+12,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_valsJacobian[] = {
+  1.18059576e+12,  5.56624427e+11,
+  2.17020537e+10,  2.82688919e+10,
+  7.03170548e+11,  3.46233237e+11,
+  9.30815156e+11,  3.73904122e+11,
+ -1.97360381e+12, -9.41768992e+11,
+ -8.62679703e+11, -3.63261686e+11,
+  5.56624427e+11,  1.72905310e+12,
+  2.55818801e+10,  7.57022146e+10,
+  3.45077232e+11,  7.84996129e+11,
+  3.77747140e+11,  6.31931179e+11,
+ -9.44649933e+11, -2.68111294e+12,
+ -3.60380746e+11, -5.40569680e+11,
+  2.17020537e+10,  2.55818801e+10,
+  5.70555199e+11,  2.59713039e+11,
+ -2.96119462e+10, -2.59165131e+10,
+ -4.24956826e+11, -1.36798725e+11,
+  1.42337474e+11,  6.73297341e+10,
+ -2.80025954e+11, -1.89909415e+11,
+  2.82688919e+10,  7.57022146e+10,
+  2.59713039e+11,  5.77356324e+11,
+ -2.66709077e+10, -5.44779112e+10,
+ -1.27273335e+11, -2.04209092e+11,
+  6.53971169e+10,  2.26338676e+11,
+ -1.99434806e+11, -6.20710212e+11,
+  7.03170548e+11,  3.45077232e+11,
+ -2.96119462e+10, -2.66709077e+10,
+  9.20384196e+11,  4.11776807e+11,
+  4.71950241e+11,  3.08031050e+11,
+ -1.68844719e+12, -8.05938575e+11,
+ -3.77445853e+11, -2.32275605e+11,
+  3.46233237e+11,  7.84996129e+11,
+ -2.59165131e+10, -5.44779112e+10,
+  4.11776807e+11,  9.45887355e+11,
+  3.13343794e+11,  3.21137311e+11,
+ -8.11251320e+11, -1.83366211e+12,
+ -2.34186006e+11, -1.63880774e+11,
+  9.30815156e+11,  3.77747140e+11,
+ -4.24956826e+11, -1.27273335e+11,
+  4.71950241e+11,  3.13343794e+11,
+  2.66933376e+12,  8.66541719e+11,
+ -1.81944099e+12, -9.28979272e+11,
+ -1.82770134e+12, -5.01380046e+11,
+  3.73904122e+11,  6.31931179e+11,
+ -1.36798725e+11, -2.04209092e+11,
+  3.08031050e+11,  3.21137311e+11,
+  8.66541719e+11,  2.75153025e+12,
+ -9.20742130e+11, -1.64708940e+12,
+ -4.90936036e+11, -1.85330024e+12,
+ -1.97360381e+12, -9.44649933e+11,
+  1.42337474e+11,  6.53971169e+10,
+ -1.68844719e+12, -8.11251320e+11,
+ -1.81944099e+12, -9.20742130e+11,
+  4.26074832e+12,  2.04726998e+12,
+  1.07840620e+12,  5.63976291e+11,
+ -9.41768992e+11, -2.68111294e+12,
+  6.73297341e+10,  2.26338676e+11,
+ -8.05938575e+11, -1.83366211e+12,
+ -9.28979272e+11, -1.64708940e+12,
+  2.04726998e+12,  5.76761534e+12,
+  5.62087130e+11,  1.67910439e+11,
+ -8.62679703e+11, -3.60380746e+11,
+ -2.80025954e+11, -1.99434806e+11,
+ -3.77445853e+11, -2.34186006e+11,
+ -1.82770134e+12, -4.90936036e+11,
+  1.07840620e+12,  5.62087130e+11,
+  2.26944665e+12,  7.22850462e+11,
+ -3.63261686e+11, -5.40569680e+11,
+ -1.89909415e+11, -6.20710212e+11,
+ -2.32275605e+11, -1.63880774e+11,
+ -5.01380046e+11, -1.85330024e+12,
+  5.63976291e+11,  1.67910439e+11,
+  7.22850462e+11,  3.01055047e+12,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::ElasticityImplicitLgDeformData2DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::~ElasticityImplicitLgDeformData2DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata2dquadratic_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformdata2dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformData2DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformData2DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformData2DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformdata2dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,192 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformData3DLinear.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_numVertices = 4;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_numBasis = 4;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_vertices[] = {
+ -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
+  2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
+  1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_cells[] = {
+0,1,2,3,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_quadPts[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_quadWts[] = {
+  1.33333333e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_basis[] = {
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldTIncr[] = {
+  3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
+ -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
+  2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
+ -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldT[] = {
+  8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
+  1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
+ -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldTmdt[] = {
+  1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
+  2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
+ -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_valsResidual[] = {
+  2.79474210e+11,  1.80174876e+12,  1.26556850e+12,
+  6.44632598e+11,  4.29759382e+12,  2.88601168e+12,
+ -1.13174893e+12, -6.94850554e+12, -4.65500318e+12,
+  2.07642124e+11,  8.49162957e+11,  5.03422995e+11,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_valsJacobian[] = {
+  2.94874367e+11,  6.16951570e+10,  3.89461610e+10,
+  5.48150595e+11,  1.11804684e+11,  7.10898629e+10,
+ -9.45152856e+11, -2.08621385e+11, -1.32482083e+11,
+  1.02127894e+11,  3.51215443e+10,  2.24460592e+10,
+  6.16951570e+10,  6.57018660e+11,  2.71425583e+11,
+  1.11804684e+11,  1.23922444e+12,  4.97844328e+11,
+ -2.08621385e+11, -2.12462667e+12, -8.51891691e+11,
+  3.51215443e+10,  2.28383572e+11,  8.26217801e+10,
+  3.89461610e+10,  2.71425583e+11,  4.77828353e+11,
+  7.10898629e+10,  4.97844328e+11,  8.73012939e+11,
+ -1.32482083e+11, -8.51891691e+11, -1.49263907e+12,
+  2.24460592e+10,  8.26217801e+10,  1.41797778e+11,
+  5.48150595e+11,  1.11804684e+11,  7.10898629e+10,
+  1.41837229e+12,  2.89096417e+11,  1.70605497e+11,
+ -2.25396787e+12, -4.94966564e+11, -2.95400181e+11,
+  2.87444987e+11,  9.40654624e+10,  5.37048209e+10,
+  1.11804684e+11,  1.23922444e+12,  4.97844328e+11,
+  2.89096417e+11,  3.27225597e+12,  1.26969767e+12,
+ -4.94966564e+11, -5.16973245e+12, -1.99940566e+12,
+  9.40654624e+10,  6.58252043e+11,  2.31863658e+11,
+  7.10898629e+10,  4.97844328e+11,  8.73012939e+11,
+  1.70605497e+11,  1.26969767e+12,  2.20481950e+12,
+ -2.95400181e+11, -1.99940566e+12, -3.47904176e+12,
+  5.37048209e+10,  2.31863658e+11,  4.01209317e+11,
+ -9.45152856e+11, -2.08621385e+11, -1.32482083e+11,
+ -2.25396787e+12, -4.94966564e+11, -2.95400181e+11,
+  3.68810232e+12,  8.67069202e+11,  5.19506826e+11,
+ -4.88981593e+11, -1.63481253e+11, -9.16245619e+10,
+ -2.08621385e+11, -2.12462667e+12, -8.51891691e+11,
+ -4.94966564e+11, -5.16973245e+12, -1.99940566e+12,
+  8.67069202e+11,  8.39475093e+12,  3.23896409e+12,
+ -1.63481253e+11, -1.10039182e+12, -3.87666745e+11,
+ -1.32482083e+11, -8.51891691e+11, -1.49263907e+12,
+ -2.95400181e+11, -1.99940566e+12, -3.47904176e+12,
+  5.19506826e+11,  3.23896409e+12,  5.64558477e+12,
+ -9.16245619e+10, -3.87666745e+11, -6.73903937e+11,
+  1.02127894e+11,  3.51215443e+10,  2.24460592e+10,
+  2.87444987e+11,  9.40654624e+10,  5.37048209e+10,
+ -4.88981593e+11, -1.63481253e+11, -9.16245619e+10,
+  9.94087115e+10,  3.42942460e+10,  1.54736818e+10,
+  3.51215443e+10,  2.28383572e+11,  8.26217801e+10,
+  9.40654624e+10,  6.58252043e+11,  2.31863658e+11,
+ -1.63481253e+11, -1.10039182e+12, -3.87666745e+11,
+  3.42942460e+10,  2.13756204e+11,  7.31813067e+10,
+  2.24460592e+10,  8.26217801e+10,  1.41797778e+11,
+  5.37048209e+10,  2.31863658e+11,  4.01209317e+11,
+ -9.16245619e+10, -3.87666745e+11, -6.73903937e+11,
+  1.54736818e+10,  7.31813067e+10,  1.30896842e+11,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::ElasticityImplicitLgDeformData3DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::~ElasticityImplicitLgDeformData3DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata3dlinear_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformdata3dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformData3DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformData3DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformData3DLinear(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformData3DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformdata3dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,531 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformData3DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_numVertices = 10;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_numBasis = 10;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_numQuadPts = 4;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_vertices[] = {
+ -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
+  2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
+  1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+  1.50000000e+00, -5.00000000e-01, -2.50000000e-01,
+  2.50000000e-01, -5.00000000e-01, -5.00000000e-01,
+  7.50000000e-01, -2.00000000e+00, -7.50000000e-01,
+ -1.50000000e-01, -7.50000000e-01,  5.00000000e-01,
+  1.10000000e+00, -7.50000000e-01,  7.50000000e-01,
+  6.00000000e-01,  7.50000000e-01,  1.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_cells[] = {
+0,1,2,3,4,5,6,7,8,9,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_quadPts[] = {
+ -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+  5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_basis[] = {
+  2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
+ -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
+  2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
+  4.00000000e-02, -4.50000000e-02,  3.75000000e-01,
+ -8.00000000e-02, -8.00000000e-02,  3.00000000e-01,
+  2.00000000e-02,  1.50000000e-01,  2.00000000e-02,
+  3.00000000e-01,  4.00000000e-02, -4.50000000e-02,
+ -8.00000000e-02,  3.75000000e-01, -8.00000000e-02,
+  3.00000000e-01,  1.50000000e-01,  2.00000000e-02,
+  2.00000000e-02,  4.00000000e-02,  3.00000000e-01,
+ -4.50000000e-02, -8.00000000e-02, -8.00000000e-02,
+  3.75000000e-01,  4.00000000e-02,  2.00000000e-02,
+  2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
+  3.00000000e-01,};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_basisDerivRef[] = {
+ -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01,  1.20000000e+00, -2.00000000e-01,
+  1.20000000e+00, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01,  1.20000000e+00,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  1.50000000e+00,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.40000000e+00, -1.50000000e+00, -1.50000000e+00,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  1.50000000e+00,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  1.50000000e+00,  2.00000000e-01,  0.00000000e+00,
+ -1.50000000e+00, -1.40000000e+00, -1.50000000e+00,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  1.50000000e+00,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -1.50000000e+00, -1.50000000e+00, -1.40000000e+00,
+  1.50000000e+00,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldTIncr[] = {
+  3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
+ -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
+  5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
+ -7.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -6.00000000e-01, -3.00000000e-01,  8.00000000e-01,
+ -4.00000000e-01, -8.00000000e-01, -5.00000000e-01,
+  7.00000000e-01,  8.00000000e-01, -5.00000000e-01,
+ -5.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,  8.00000000e-01,
+ -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldT[] = {
+  1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
+ -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
+  6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
+ -8.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+ -0.00000000e+00, -2.00000000e-01,  6.00000000e-01,
+ -4.00000000e-01, -7.00000000e-01, -2.00000000e-01,
+  7.00000000e-01,  6.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01, -3.00000000e-01, -3.00000000e-01,
+ -7.00000000e-01, -6.00000000e-01,  1.00000000e-01,
+ -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldTmdt[] = {
+  2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
+ -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
+ -3.00000000e-01, -8.00000000e-01, -3.00000000e-01,
+ -5.00000000e-01, -9.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+  9.00000000e-01,  5.00000000e-01, -2.00000000e-01,
+ -7.00000000e-01, -2.00000000e-01, -9.00000000e-01,
+ -5.00000000e-01, -8.00000000e-01,  4.00000000e-01,
+ -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_valsResidual[] = {
+  2.83531193e+11,  6.85360097e+11, -7.35048936e+11,
+  8.17609945e+11, -2.46059924e+11,  5.76994362e+11,
+ -1.61369461e+12, -3.33728123e+11, -1.98412259e+12,
+ -3.86612970e+11,  1.55209617e+12, -1.57307404e+12,
+ -8.25945978e+11, -2.06081757e+11, -8.11681780e+11,
+  2.39916408e+12,  1.36233180e+12,  2.44278998e+12,
+ -1.83049591e+12, -1.27565741e+12,  3.52648635e+11,
+  2.60556997e+11, -1.53217232e+12,  1.40244034e+12,
+ -8.95741060e+11,  3.53530714e+12, -4.18558562e+12,
+  1.79162831e+12, -3.54139567e+12,  4.51463965e+12,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_valsJacobian[] = {
+  4.65661925e+11,  1.45207670e+11,  8.48382894e+10,
+  1.24772472e+11,  7.41894782e+10, -4.42698676e+10,
+  7.18213188e+10,  5.09242305e+09,  4.05530373e+10,
+  9.25950209e+10,  3.01383081e+09,  4.41940539e+10,
+  1.40659877e+11,  7.81646933e+09,  8.55770103e+10,
+  7.55814313e+10,  1.00158408e+11, -5.39884553e+09,
+ -7.04119227e+11, -2.55717104e+11, -3.23748072e+10,
+ -3.27406977e+11, -3.58266405e+10, -1.14846242e+11,
+  1.90099476e+11, -7.46675761e+10,  1.18407263e+10,
+ -1.29665315e+11,  3.07330418e+10, -7.01133548e+10,
+  1.45207670e+11,  4.17879082e+11,  2.69285551e+10,
+  7.41894782e+10,  7.12501045e+10,  1.69326571e+10,
+  5.09242305e+09,  7.79843128e+10,  1.24078373e+09,
+  3.01383081e+09,  1.26067202e+11, -2.62782048e+10,
+  7.81646933e+09,  1.18102474e+11,  2.96832254e+10,
+  1.00158408e+11,  2.69890946e+10,  6.52474095e+10,
+ -2.55717104e+11, -5.58070068e+11, -2.09279922e+10,
+ -3.58266405e+10, -4.64117178e+11,  6.84864638e+10,
+ -7.46675761e+10,  3.28253126e+11, -2.44433188e+11,
+  3.07330418e+10, -1.44338150e+11,  8.31202909e+10,
+  8.48382894e+10,  2.69285551e+10,  4.15301734e+11,
+ -4.42698676e+10,  1.69326571e+10,  7.33047953e+10,
+  4.05530373e+10,  1.24078373e+09,  1.27489728e+11,
+  4.41940539e+10, -2.62782048e+10,  1.51395370e+11,
+  8.55770103e+10,  2.96832254e+10,  2.11321369e+11,
+ -5.39884553e+09,  6.52474095e+10, -1.46463462e+11,
+ -3.23748072e+10, -2.09279922e+10, -5.59853491e+11,
+ -1.14846242e+11,  6.84864638e+10, -5.09095160e+11,
+  1.18407263e+10, -2.44433188e+11,  4.97279724e+11,
+ -7.01133548e+10,  8.31202909e+10, -2.60680607e+11,
+  1.24772472e+11,  7.41894782e+10, -4.42698676e+10,
+  3.18994605e+11,  6.08636475e+10, -5.28381253e+10,
+ -5.95541375e+10,  1.26084960e+10, -4.24114682e+10,
+ -8.37120894e+10,  2.17101919e+10, -9.24436085e+08,
+ -2.46254169e+11, -4.29845346e+10, -4.41618213e+10,
+  3.69282312e+11,  1.07296224e+11,  1.48157570e+11,
+ -5.47553983e+11, -1.78849586e+11,  9.36194643e+10,
+  7.95730371e+10, -7.67652780e+10,  4.79024142e+10,
+ -2.15276680e+11,  8.00666055e+10, -1.77270676e+11,
+  2.59728633e+11, -5.81352446e+10,  7.21969464e+10,
+  7.41894782e+10,  7.12501045e+10,  1.69326571e+10,
+  6.08636475e+10,  3.25267756e+11, -1.22309091e+11,
+  1.26084960e+10, -5.31861531e+10,  1.29709419e+10,
+  2.17101919e+10, -1.52532444e+11,  1.00603438e+11,
+ -4.29845346e+10, -2.62321656e+11,  6.79528717e+10,
+  1.07296224e+11,  3.27288566e+11,  5.30178659e+10,
+ -1.78849586e+11, -4.32757567e+11,  7.65998486e+10,
+ -7.67652780e+10,  1.29553761e+11, -1.26591592e+11,
+  8.00666055e+10, -3.89057716e+11,  1.34140735e+11,
+ -5.81352446e+10,  4.36495348e+11, -2.13317675e+11,
+ -4.42698676e+10,  1.69326571e+10,  7.33047953e+10,
+ -5.28381253e+10, -1.22309091e+11,  4.88759132e+11,
+ -4.24114682e+10,  1.29709419e+10, -6.74464625e+10,
+ -9.24436085e+08,  1.00603438e+11, -1.98419387e+11,
+ -4.41618213e+10,  6.79528717e+10, -3.98133382e+11,
+  1.48157570e+11,  5.30178659e+10,  3.01368983e+11,
+  9.36194643e+10,  7.65998486e+10, -5.77601119e+11,
+  4.79024142e+10, -1.26591592e+11,  1.94445962e+11,
+ -1.77270676e+11,  1.34140735e+11, -2.74232321e+11,
+  7.21969464e+10, -2.13317675e+11,  4.57953800e+11,
+  7.18213188e+10,  5.09242305e+09,  4.05530373e+10,
+ -5.95541375e+10,  1.26084960e+10, -4.24114682e+10,
+  1.10135125e+12,  3.25720553e+11,  3.62390508e+11,
+  2.94017649e+11,  1.23894657e+10,  8.94735240e+10,
+  1.34408493e+10, -4.81163047e+10,  1.60257602e+11,
+ -6.81749121e+11, -2.46273575e+11, -2.38131042e+11,
+  1.52813392e+11,  6.38089974e+10,  2.92728877e+10,
+ -1.19071391e+10,  6.22561142e+10, -3.62572653e+10,
+  2.38104621e+11, -5.73710641e+10, -4.42540169e+09,
+ -1.11833868e+12, -1.30115106e+11, -3.60722383e+11,
+  5.09242305e+09,  7.79843128e+10,  1.24078373e+09,
+  1.26084960e+10, -5.31861531e+10,  1.29709419e+10,
+  3.25720553e+11,  1.09654928e+12,  1.25558927e+11,
+  1.23894657e+10,  4.02203557e+11, -1.25992638e+11,
+ -4.81163047e+10, -2.03145182e+11,  1.24652000e+11,
+ -2.46273575e+11, -6.32348620e+11, -1.80580051e+11,
+  6.38089974e+10,  9.79869768e+10,  3.14800157e+10,
+  6.22561142e+10, -2.38293966e+10,  8.52080054e+10,
+ -5.73710641e+10,  4.92506284e+11, -2.94720961e+11,
+ -1.30115106e+11, -1.25472106e+12,  2.20182976e+11,
+  4.05530373e+10,  1.24078373e+09,  1.27489728e+11,
+ -4.24114682e+10,  1.29709419e+10, -6.74464625e+10,
+  3.62390508e+11,  1.25558927e+11,  1.03669910e+12,
+  8.94735240e+10, -1.25992638e+11,  4.11450418e+11,
+  1.60257602e+11,  1.24652000e+11, -3.17810955e+09,
+ -2.38131042e+11, -1.80580051e+11, -6.28819588e+11,
+  2.92728877e+10,  3.14800157e+10,  3.14543861e+10,
+ -3.62572653e+10,  8.52080054e+10, -1.29228969e+11,
+ -4.42540169e+09, -2.94720961e+11,  5.35392012e+11,
+ -3.60722383e+11,  2.20182976e+11, -1.31381251e+12,
+  9.25950209e+10,  3.01383081e+09,  4.41940539e+10,
+ -8.37120894e+10,  2.17101919e+10, -9.24436085e+08,
+  2.94017649e+11,  1.23894657e+10,  8.94735240e+10,
+  4.97528833e+11, -1.14626728e+10,  6.59882894e+10,
+  6.65491224e+10,  8.47757035e+09,  1.31257632e+10,
+  7.66331934e+10,  8.55959553e+10, -3.73685357e+07,
+ -3.56709943e+10, -2.76429617e+10, -6.19572817e+10,
+ -3.22925718e+11, -5.74029189e+09, -8.83327493e+10,
+  3.17445492e+11, -1.22169413e+11,  1.00263616e+11,
+ -9.02460510e+11,  3.58283248e+10, -1.61793411e+11,
+  3.01383081e+09,  1.26067202e+11, -2.62782048e+10,
+  2.17101919e+10, -1.52532444e+11,  1.00603438e+11,
+  1.23894657e+10,  4.02203557e+11, -1.25992638e+11,
+ -1.14626728e+10,  8.65931363e+11, -3.82661325e+11,
+  8.47757035e+09, -1.28217470e+10,  1.35369129e+10,
+  8.55959553e+10,  3.26503144e+10,  1.22944799e+11,
+ -2.76429617e+10, -3.20097931e+10, -5.88793091e+10,
+ -5.74029189e+09, -4.10305623e+11,  1.11266648e+11,
+ -1.22169413e+11,  7.48622075e+11, -4.24857358e+11,
+  3.58283248e+10, -1.56780490e+12,  6.70317037e+11,
+  4.41940539e+10, -2.62782048e+10,  1.51395370e+11,
+ -9.24436085e+08,  1.00603438e+11, -1.98419387e+11,
+  8.94735240e+10, -1.25992638e+11,  4.11450418e+11,
+  6.59882894e+10, -3.82661325e+11,  8.70711287e+11,
+  1.31257632e+10,  1.35369129e+10,  9.07016473e+10,
+ -3.73685357e+07,  1.22944799e+11, -5.25010034e+10,
+ -6.19572817e+10, -5.88793091e+10,  1.08121328e+10,
+ -8.83327493e+10,  1.11266648e+11, -5.16970075e+11,
+  1.00263616e+11, -4.24857358e+11,  7.55013813e+11,
+ -1.61793411e+11,  6.70317037e+11, -1.52219420e+12,
+  1.40659877e+11,  7.81646933e+09,  8.55770103e+10,
+ -2.46254169e+11, -4.29845346e+10, -4.41618213e+10,
+  1.34408493e+10, -4.81163047e+10,  1.60257602e+11,
+  6.65491224e+10,  8.47757035e+09,  1.31257632e+10,
+  1.16270901e+12,  1.84156516e+11,  1.94618725e+11,
+ -5.72995180e+11, -7.97684286e+10, -3.20409939e+11,
+  2.64947735e+10,  1.68329992e+10, -9.87964535e+09,
+ -2.49889410e+11, -3.10663177e+10, -7.33658238e+10,
+ -1.71088244e+11, -6.30056465e+10,  1.74314405e+11,
+ -1.69626626e+11,  4.76576773e+10, -1.80076276e+11,
+  7.81646933e+09,  1.18102474e+11,  2.96832254e+10,
+ -4.29845346e+10, -2.62321656e+11,  6.79528717e+10,
+ -4.81163047e+10, -2.03145182e+11,  1.24652000e+11,
+  8.47757035e+09, -1.28217470e+10,  1.35369129e+10,
+  1.84156516e+11,  1.16609381e+12, -2.28629589e+11,
+ -7.97684286e+10, -4.65673799e+11, -9.51163063e+10,
+  1.68329992e+10,  7.30677747e+10, -6.02206307e+10,
+ -3.10663177e+10, -2.30487506e+11,  7.81937180e+09,
+ -6.30056465e+10, -2.28430845e+11,  1.98763507e+11,
+  4.76576773e+10,  4.56166756e+10, -5.84413625e+10,
+  8.55770103e+10,  2.96832254e+10,  2.11321369e+11,
+ -4.41618213e+10,  6.79528717e+10, -3.98133382e+11,
+  1.60257602e+11,  1.24652000e+11, -3.17810955e+09,
+  1.31257632e+10,  1.35369129e+10,  9.07016473e+10,
+  1.94618725e+11, -2.28629589e+11,  1.70825144e+12,
+ -3.20409939e+11, -9.51163063e+10, -7.97801243e+11,
+ -9.87964535e+09, -6.02206307e+10,  7.70360435e+10,
+ -7.33658238e+10,  7.81937180e+09, -2.93644299e+11,
+  1.74314405e+11,  1.98763507e+11, -4.10328847e+11,
+ -1.80076276e+11, -5.84413625e+10, -1.84224621e+11,
+  7.55814313e+10,  1.00158408e+11, -5.39884553e+09,
+  3.69282312e+11,  1.07296224e+11,  1.48157570e+11,
+ -6.81749121e+11, -2.46273575e+11, -2.38131042e+11,
+  7.66331934e+10,  8.55959553e+10, -3.73685357e+07,
+ -5.72995180e+11, -7.97684286e+10, -3.20409939e+11,
+  2.45592464e+12,  8.72069906e+11,  7.29084849e+11,
+ -9.75215619e+11, -4.34128069e+11, -2.56910788e+11,
+ -5.51910015e+11, -3.31945132e+11, -1.04698326e+11,
+ -5.96253782e+11, -1.03426849e+11, -1.13624994e+11,
+  4.00702141e+11,  3.04215606e+10,  1.61968884e+11,
+  1.00158408e+11,  2.69890946e+10,  6.52474095e+10,
+  1.07296224e+11,  3.27288566e+11,  5.30178659e+10,
+ -2.46273575e+11, -6.32348620e+11, -1.80580051e+11,
+  8.55959553e+10,  3.26503144e+10,  1.22944799e+11,
+ -7.97684286e+10, -4.65673799e+11, -9.51163063e+10,
+  8.72069906e+11,  2.27130607e+12,  5.76476353e+11,
+ -4.34128069e+11, -7.36984695e+11, -2.23203143e+11,
+ -3.31945132e+11, -4.91827419e+11, -3.22783678e+11,
+ -1.03426849e+11, -7.11586437e+11,  1.31379586e+11,
+  3.04215606e+10,  3.80186919e+11, -1.27382836e+11,
+ -5.39884553e+09,  6.52474095e+10, -1.46463462e+11,
+  1.48157570e+11,  5.30178659e+10,  3.01368983e+11,
+ -2.38131042e+11, -1.80580051e+11, -6.28819588e+11,
+ -3.73685357e+07,  1.22944799e+11, -5.25010034e+10,
+ -3.20409939e+11, -9.51163063e+10, -7.97801243e+11,
+  7.29084849e+11,  5.76476353e+11,  2.14357815e+12,
+ -2.56910788e+11, -2.23203143e+11, -4.02976629e+11,
+ -1.04698326e+11, -3.22783678e+11, -2.22817271e+11,
+ -1.13624994e+11,  1.31379586e+11, -7.44361231e+11,
+  1.61968884e+11, -1.27382836e+11,  5.50793300e+11,
+ -7.04119227e+11, -2.55717104e+11, -3.23748072e+10,
+ -5.47553983e+11, -1.78849586e+11,  9.36194643e+10,
+  1.52813392e+11,  6.38089974e+10,  2.92728877e+10,
+ -3.56709943e+10, -2.76429617e+10, -6.19572817e+10,
+  2.64947735e+10,  1.68329992e+10, -9.87964535e+09,
+ -9.75215619e+11, -4.34128069e+11, -2.56910788e+11,
+  1.89896017e+12,  6.56740815e+11, -8.16178375e+10,
+  3.38393444e+11,  1.64966431e+11,  1.12967809e+11,
+ -3.12949675e+10,  2.44157356e+10,  1.92718403e+11,
+ -1.22806992e+11, -3.04272562e+10,  1.41617951e+10,
+ -2.55717104e+11, -5.58070068e+11, -2.09279922e+10,
+ -1.78849586e+11, -4.32757567e+11,  7.65998486e+10,
+  6.38089974e+10,  9.79869768e+10,  3.14800157e+10,
+ -2.76429617e+10, -3.20097931e+10, -5.88793091e+10,
+  1.68329992e+10,  7.30677747e+10, -6.02206307e+10,
+ -4.34128069e+11, -7.36984695e+11, -2.23203143e+11,
+  6.56740815e+11,  1.40195492e+12, -6.50991546e+10,
+  1.64966431e+11,  4.34421272e+11,  6.47670884e+10,
+  2.44157356e+10, -1.07992730e+11,  2.24564280e+11,
+ -3.04272562e+10, -1.39616091e+11,  3.09189976e+10,
+ -3.23748072e+10, -2.09279922e+10, -5.59853491e+11,
+  9.36194643e+10,  7.65998486e+10, -5.77601119e+11,
+  2.92728877e+10,  3.14800157e+10,  3.14543861e+10,
+ -6.19572817e+10, -5.88793091e+10,  1.08121328e+10,
+ -9.87964535e+09, -6.02206307e+10,  7.70360435e+10,
+ -2.56910788e+11, -2.23203143e+11, -4.02976629e+11,
+ -8.16178375e+10, -6.50991546e+10,  1.51957659e+12,
+  1.12967809e+11,  6.47670884e+10,  3.90219017e+11,
+  1.92718403e+11,  2.24564280e+11, -4.04297886e+11,
+  1.41617951e+10,  3.09189976e+10, -8.43690419e+10,
+ -3.27406977e+11, -3.58266405e+10, -1.14846242e+11,
+  7.95730371e+10, -7.67652780e+10,  4.79024142e+10,
+ -1.19071391e+10,  6.22561142e+10, -3.62572653e+10,
+ -3.22925718e+11, -5.74029189e+09, -8.83327493e+10,
+ -2.49889410e+11, -3.10663177e+10, -7.33658238e+10,
+ -5.51910015e+11, -3.31945132e+11, -1.04698326e+11,
+  3.38393444e+11,  1.64966431e+11,  1.12967809e+11,
+  1.31141204e+12,  1.23926458e+11,  3.32914096e+11,
+ -6.26226600e+11,  2.47475905e+11, -2.25050603e+11,
+  3.60887342e+11, -1.17281247e+11,  1.48766690e+11,
+ -3.58266405e+10, -4.64117178e+11,  6.84864638e+10,
+ -7.67652780e+10,  1.29553761e+11, -1.26591592e+11,
+  6.22561142e+10, -2.38293966e+10,  8.52080054e+10,
+ -5.74029189e+09, -4.10305623e+11,  1.11266648e+11,
+ -3.10663177e+10, -2.30487506e+11,  7.81937180e+09,
+ -3.31945132e+11, -4.91827419e+11, -3.22783678e+11,
+  1.64966431e+11,  4.34421272e+11,  6.47670884e+10,
+  1.23926458e+11,  1.60701662e+12, -2.64550313e+11,
+  2.47475905e+11, -9.92458260e+11,  6.53136619e+11,
+ -1.17281247e+11,  4.42033730e+11, -2.76758613e+11,
+ -1.14846242e+11,  6.84864638e+10, -5.09095160e+11,
+  4.79024142e+10, -1.26591592e+11,  1.94445962e+11,
+ -3.62572653e+10,  8.52080054e+10, -1.29228969e+11,
+ -8.83327493e+10,  1.11266648e+11, -5.16970075e+11,
+ -7.33658238e+10,  7.81937180e+09, -2.93644299e+11,
+ -1.04698326e+11, -3.22783678e+11, -2.22817271e+11,
+  1.12967809e+11,  6.47670884e+10,  3.90219017e+11,
+  3.32914096e+11, -2.64550313e+11,  1.69650893e+12,
+ -2.25050603e+11,  6.53136619e+11, -1.33623672e+12,
+  1.48766690e+11, -2.76758613e+11,  7.26818588e+11,
+  1.90099476e+11, -7.46675761e+10,  1.18407263e+10,
+ -2.15276680e+11,  8.00666055e+10, -1.77270676e+11,
+  2.38104621e+11, -5.73710641e+10, -4.42540169e+09,
+  3.17445492e+11, -1.22169413e+11,  1.00263616e+11,
+ -1.71088244e+11, -6.30056465e+10,  1.74314405e+11,
+ -5.96253782e+11, -1.03426849e+11, -1.13624994e+11,
+ -3.12949675e+10,  2.44157356e+10,  1.92718403e+11,
+ -6.26226600e+11,  2.47475905e+11, -2.25050603e+11,
+  1.97967373e+12, -2.24128696e+11,  2.63978666e+11,
+ -1.08518305e+12,  2.92810999e+11, -2.22744142e+11,
+ -7.46675761e+10,  3.28253126e+11, -2.44433188e+11,
+  8.00666055e+10, -3.89057716e+11,  1.34140735e+11,
+ -5.73710641e+10,  4.92506284e+11, -2.94720961e+11,
+ -1.22169413e+11,  7.48622075e+11, -4.24857358e+11,
+ -6.30056465e+10, -2.28430845e+11,  1.98763507e+11,
+ -1.03426849e+11, -7.11586437e+11,  1.31379586e+11,
+  2.44157356e+10, -1.07992730e+11,  2.24564280e+11,
+  2.47475905e+11, -9.92458260e+11,  6.53136619e+11,
+ -2.24128696e+11,  3.09010212e+12, -1.54522896e+12,
+  2.92810999e+11, -2.22995762e+12,  1.16725574e+12,
+  1.18407263e+10, -2.44433188e+11,  4.97279724e+11,
+ -1.77270676e+11,  1.34140735e+11, -2.74232321e+11,
+ -4.42540169e+09, -2.94720961e+11,  5.35392012e+11,
+  1.00263616e+11, -4.24857358e+11,  7.55013813e+11,
+  1.74314405e+11,  1.98763507e+11, -4.10328847e+11,
+ -1.13624994e+11,  1.31379586e+11, -7.44361231e+11,
+  1.92718403e+11,  2.24564280e+11, -4.04297886e+11,
+ -2.25050603e+11,  6.53136619e+11, -1.33623672e+12,
+  2.63978666e+11, -1.54522896e+12,  3.55709452e+12,
+ -2.22744142e+11,  1.16725574e+12, -2.17532306e+12,
+ -1.29665315e+11,  3.07330418e+10, -7.01133548e+10,
+  2.59728633e+11, -5.81352446e+10,  7.21969464e+10,
+ -1.11833868e+12, -1.30115106e+11, -3.60722383e+11,
+ -9.02460510e+11,  3.58283248e+10, -1.61793411e+11,
+ -1.69626626e+11,  4.76576773e+10, -1.80076276e+11,
+  4.00702141e+11,  3.04215606e+10,  1.61968884e+11,
+ -1.22806992e+11, -3.04272562e+10,  1.41617951e+10,
+  3.60887342e+11, -1.17281247e+11,  1.48766690e+11,
+ -1.08518305e+12,  2.92810999e+11, -2.22744142e+11,
+  2.50676306e+12, -1.01492749e+11,  5.98355251e+11,
+  3.07330418e+10, -1.44338150e+11,  8.31202909e+10,
+ -5.81352446e+10,  4.36495348e+11, -2.13317675e+11,
+ -1.30115106e+11, -1.25472106e+12,  2.20182976e+11,
+  3.58283248e+10, -1.56780490e+12,  6.70317037e+11,
+  4.76576773e+10,  4.56166756e+10, -5.84413625e+10,
+  3.04215606e+10,  3.80186919e+11, -1.27382836e+11,
+ -3.04272562e+10, -1.39616091e+11,  3.09189976e+10,
+ -1.17281247e+11,  4.42033730e+11, -2.76758613e+11,
+  2.92810999e+11, -2.22995762e+12,  1.16725574e+12,
+ -1.01492749e+11,  4.03210515e+12, -1.49589456e+12,
+ -7.01133548e+10,  8.31202909e+10, -2.60680607e+11,
+  7.21969464e+10, -2.13317675e+11,  4.57953800e+11,
+ -3.60722383e+11,  2.20182976e+11, -1.31381251e+12,
+ -1.61793411e+11,  6.70317037e+11, -1.52219420e+12,
+ -1.80076276e+11, -5.84413625e+10, -1.84224621e+11,
+  1.61968884e+11, -1.27382836e+11,  5.50793300e+11,
+  1.41617951e+10,  3.09189976e+10, -8.43690419e+10,
+  1.48766690e+11, -2.76758613e+11,  7.26818588e+11,
+ -2.22744142e+11,  1.16725574e+12, -2.17532306e+12,
+  5.98355251e+11, -1.49589456e+12,  3.80503835e+12,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::ElasticityImplicitLgDeformData3DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::~ElasticityImplicitLgDeformData3DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata3dquadratic_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformdata3dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformData3DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformData3DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformData3DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformdata3dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformGravData1DLinear.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_numVertices = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_numBasis = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_cells[] = {
+0,1,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_quadPts[] = {
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_quadWts[] = {
+  2.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_basis[] = {
+  5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_basisDerivRef[] = {
+ -5.00000000e-01,
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldTIncr[] = {
+  1.20000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldT[] = {
+  1.10000000e+00,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_valsResidual[] = {
+ -2.20770000e+11,
+ -3.41730000e+11,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_valsJacobian[] = {
+  9.76000000e+10,
+ -9.76000000e+10,
+ -9.76000000e+10,
+  9.76000000e+10,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::ElasticityImplicitLgDeformGravData1DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::~ElasticityImplicitLgDeformGravData1DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata1dlinear_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformgravdata1dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformGravData1DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformGravData1DLinear(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformGravData1DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformgravdata1dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformGravData1DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_spaceDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_cellDim = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_numQuadPts = 2;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_matType = "ElasticStrain1D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_matDBFilename = "data/elasticstrain1d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_matLabel = "elastic strain 1-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_gravityVec[] = {
+ -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_vertices[] = {
+ -2.50000000e-01,
+  2.00000000e+00,
+  8.75000000e-01,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_verticesRef[] = {
+ -1.00000000e+00,
+  1.00000000e+00,
+  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_quadPts[] = {
+ -5.77350269e-01,
+  5.77350269e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_quadWts[] = {
+  1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_basis[] = {
+  4.55341801e-01,
+ -1.22008468e-01,
+  6.66666667e-01,
+ -1.22008468e-01,
+  4.55341801e-01,
+  6.66666667e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_basisDerivRef[] = {
+ -1.07735027e+00,
+ -7.73502692e-02,
+  1.15470054e+00,
+  7.73502692e-02,
+  1.07735027e+00,
+ -1.15470054e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldTIncr[] = {
+  1.20000000e+00,
+  0.00000000e+00,
+  1.70000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldT[] = {
+  1.10000000e+00,
+  1.00000000e-01,
+  1.50000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldTmdt[] = {
+  1.00000000e+00,
+  1.00000000e-01,
+  1.30000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_valsResidual[] = {
+  2.60876283e+11,
+  2.37591344e+11,
+ -1.06096763e+12,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_valsJacobian[] = {
+  5.56003292e+11,
+  7.76230453e+10,
+ -6.33626337e+11,
+  7.76230453e+10,
+  5.30719342e+11,
+ -6.08342387e+11,
+ -6.33626337e+11,
+ -6.08342387e+11,
+  1.24196872e+12,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::ElasticityImplicitLgDeformGravData1DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::~ElasticityImplicitLgDeformGravData1DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata1dquadratic_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformgravdata1dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformGravData1DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformGravData1DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformGravData1DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformgravdata1dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,155 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformGravData2DLinear.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_numVertices = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_numBasis = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_vertices[] = {
+  2.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  5.00000000e-01,
+ -1.00000000e+00, -2.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_cells[] = {
+0,1,2,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_quadPts[] = {
+ -3.33333333e-01, -3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_quadWts[] = {
+  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_basis[] = {
+  3.33333333e-01,  3.33333333e-01,
+  3.33333333e-01,};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldTIncr[] = {
+  1.30000000e+00, -9.00000000e-01,
+  1.40000000e+00,  1.50000000e+00,
+  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldT[] = {
+  1.60000000e+00, -8.00000000e-01,
+  9.00000000e-01,  7.00000000e-01,
+ -2.00000000e-01, -1.10000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldTmdt[] = {
+  8.00000000e-01,  1.00000000e-01,
+  5.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsResidual[] = {
+ -3.65540787e+11,  1.04750079e+12,
+  9.00343192e+10, -1.10825548e+12,
+  2.75506468e+11,  2.63796904e+10,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsJacobian[] = {
+  4.36313261e+11, -1.48699027e+11,
+ -2.81223194e+11,  8.77736676e+10,
+ -1.55090067e+11,  6.09253592e+10,
+ -1.48699027e+11,  7.56519651e+11,
+  9.16706846e+10, -6.28762859e+11,
+  5.70283422e+10, -1.27756792e+11,
+ -2.81223194e+11,  9.16706846e+10,
+  2.80835568e+11, -2.94466026e+10,
+  3.87626315e+08, -6.22240820e+10,
+  8.77736676e+10, -6.28762859e+11,
+ -2.94466026e+10,  6.55682896e+11,
+ -5.83270649e+10, -2.69200376e+10,
+ -1.55090067e+11,  5.70283422e+10,
+  3.87626315e+08, -5.83270649e+10,
+  1.54702440e+11,  1.29872276e+09,
+  6.09253592e+10, -1.27756792e+11,
+ -6.22240820e+10, -2.69200376e+10,
+  1.29872276e+09,  1.54676830e+11,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::ElasticityImplicitLgDeformGravData2DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::~ElasticityImplicitLgDeformGravData2DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata2dlinear_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformgravdata2dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformGravData2DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformGravData2DLinear(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformGravData2DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformgravdata2dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,282 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformGravData2DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_spaceDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_cellDim = 2;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_numVertices = 6;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_numBasis = 6;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_numQuadPts = 6;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_matType = "ElasticPlaneStrain";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_matDBFilename = "data/elasticplanestrain.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_matLabel = "elastic strain 2-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_gravityVec[] = {
+  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_vertices[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00,  2.00000000e-01,
+ -1.50000000e+00,  5.00000000e-01,
+ -2.50000000e-01,  3.50000000e-01,
+ -1.25000000e+00, -2.50000000e-01,
+  0.00000000e+00, -4.00000000e-01,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_cells[] = {
+0,1,2,3,4,5,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_quadPts[] = {
+ -7.50000000e-01, -7.50000000e-01,
+  7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01,  7.50000000e-01,
+  0.00000000e+00, -7.50000000e-01,
+ -7.50000000e-01,  0.00000000e+00,
+  2.50000000e-01,  2.50000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_basis[] = {
+  3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02,  6.25000000e-02,
+  3.75000000e-01,  3.75000000e-01,
+  0.00000000e+00,  6.56250000e-01,
+ -9.37500000e-02,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+  0.00000000e+00, -9.37500000e-02,
+  6.56250000e-01,  4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+ -9.37500000e-02,  0.00000000e+00,
+ -9.37500000e-02,  2.50000000e-01,
+  1.87500000e-01,  7.50000000e-01,
+ -9.37500000e-02, -9.37500000e-02,
+  0.00000000e+00,  2.50000000e-01,
+  7.50000000e-01,  1.87500000e-01,
+  3.75000000e-01,  1.56250000e-01,
+  1.56250000e-01,  1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  2.50000000e-01,
+ -2.50000000e-01,  1.25000000e+00,
+  1.25000000e+00, -2.50000000e-01,
+  5.00000000e-01,  5.00000000e-01,
+  1.25000000e+00,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+  5.00000000e-01,  5.00000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  1.25000000e+00,
+  1.75000000e+00,  2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
+  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00, -2.50000000e-01,
+  2.50000000e-01,  1.00000000e+00,
+ -2.50000000e-01,  5.00000000e-01,
+ -2.50000000e-01, -1.00000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,
+  1.00000000e+00,  2.50000000e-01,
+ -1.00000000e+00, -2.50000000e-01,
+  5.00000000e-01, -2.50000000e-01,
+  1.00000000e+00,  1.00000000e+00,
+  7.50000000e-01,  0.00000000e+00,
+  0.00000000e+00,  7.50000000e-01,
+  1.25000000e+00,  1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldTIncr[] = {
+ -4.00000000e-01, -6.00000000e-01,
+  7.00000000e-01,  8.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,
+ -5.00000000e-01, -4.00000000e-01,
+  3.00000000e-01,  9.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldT[] = {
+ -3.00000000e-01, -4.00000000e-01,
+  5.00000000e-01,  6.00000000e-01,
+  0.00000000e+00,  1.00000000e-01,
+ -2.00000000e-01, -3.00000000e-01,
+  2.00000000e-01,  3.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldTmdt[] = {
+ -2.00000000e-01, -3.00000000e-01,
+  3.00000000e-01,  4.00000000e-01,
+  0.00000000e+00, -1.00000000e-01,
+ -3.00000000e-01, -2.00000000e-01,
+  1.00000000e-01,  4.00000000e-01,
+ -2.00000000e-01, -6.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_valsResidual[] = {
+  1.03829775e+12,  1.72143634e+12,
+ -7.52244241e+11, -8.67453311e+11,
+  8.03865887e+11,  1.02236991e+12,
+  1.48071362e+12,  5.42069459e+11,
+ -2.20475628e+12, -3.86234073e+12,
+ -3.65876743e+11,  9.93918331e+11,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_valsJacobian[] = {
+  1.18059576e+12,  5.56624427e+11,
+  2.17020537e+10,  2.82688919e+10,
+  7.03170548e+11,  3.46233237e+11,
+  9.30815156e+11,  3.73904122e+11,
+ -1.97360381e+12, -9.41768992e+11,
+ -8.62679703e+11, -3.63261686e+11,
+  5.56624427e+11,  1.72905310e+12,
+  2.55818801e+10,  7.57022146e+10,
+  3.45077232e+11,  7.84996129e+11,
+  3.77747140e+11,  6.31931179e+11,
+ -9.44649933e+11, -2.68111294e+12,
+ -3.60380746e+11, -5.40569680e+11,
+  2.17020537e+10,  2.55818801e+10,
+  5.70555199e+11,  2.59713039e+11,
+ -2.96119462e+10, -2.59165131e+10,
+ -4.24956826e+11, -1.36798725e+11,
+  1.42337474e+11,  6.73297341e+10,
+ -2.80025954e+11, -1.89909415e+11,
+  2.82688919e+10,  7.57022146e+10,
+  2.59713039e+11,  5.77356324e+11,
+ -2.66709077e+10, -5.44779112e+10,
+ -1.27273335e+11, -2.04209092e+11,
+  6.53971169e+10,  2.26338676e+11,
+ -1.99434806e+11, -6.20710212e+11,
+  7.03170548e+11,  3.45077232e+11,
+ -2.96119462e+10, -2.66709077e+10,
+  9.20384196e+11,  4.11776807e+11,
+  4.71950241e+11,  3.08031050e+11,
+ -1.68844719e+12, -8.05938575e+11,
+ -3.77445853e+11, -2.32275605e+11,
+  3.46233237e+11,  7.84996129e+11,
+ -2.59165131e+10, -5.44779112e+10,
+  4.11776807e+11,  9.45887355e+11,
+  3.13343794e+11,  3.21137311e+11,
+ -8.11251320e+11, -1.83366211e+12,
+ -2.34186006e+11, -1.63880774e+11,
+  9.30815156e+11,  3.77747140e+11,
+ -4.24956826e+11, -1.27273335e+11,
+  4.71950241e+11,  3.13343794e+11,
+  2.66933376e+12,  8.66541719e+11,
+ -1.81944099e+12, -9.28979272e+11,
+ -1.82770134e+12, -5.01380046e+11,
+  3.73904122e+11,  6.31931179e+11,
+ -1.36798725e+11, -2.04209092e+11,
+  3.08031050e+11,  3.21137311e+11,
+  8.66541719e+11,  2.75153025e+12,
+ -9.20742130e+11, -1.64708940e+12,
+ -4.90936036e+11, -1.85330024e+12,
+ -1.97360381e+12, -9.44649933e+11,
+  1.42337474e+11,  6.53971169e+10,
+ -1.68844719e+12, -8.11251320e+11,
+ -1.81944099e+12, -9.20742130e+11,
+  4.26074832e+12,  2.04726998e+12,
+  1.07840620e+12,  5.63976291e+11,
+ -9.41768992e+11, -2.68111294e+12,
+  6.73297341e+10,  2.26338676e+11,
+ -8.05938575e+11, -1.83366211e+12,
+ -9.28979272e+11, -1.64708940e+12,
+  2.04726998e+12,  5.76761534e+12,
+  5.62087130e+11,  1.67910439e+11,
+ -8.62679703e+11, -3.60380746e+11,
+ -2.80025954e+11, -1.99434806e+11,
+ -3.77445853e+11, -2.34186006e+11,
+ -1.82770134e+12, -4.90936036e+11,
+  1.07840620e+12,  5.62087130e+11,
+  2.26944665e+12,  7.22850462e+11,
+ -3.63261686e+11, -5.40569680e+11,
+ -1.89909415e+11, -6.20710212e+11,
+ -2.32275605e+11, -1.63880774e+11,
+ -5.01380046e+11, -1.85330024e+12,
+  5.63976291e+11,  1.67910439e+11,
+  7.22850462e+11,  3.01055047e+12,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::ElasticityImplicitLgDeformGravData2DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::~ElasticityImplicitLgDeformGravData2DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata2dquadratic_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformgravdata2dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformGravData2DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformGravData2DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformGravData2DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformgravdata2dquadratic_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,192 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformGravData3DLinear.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_numVertices = 4;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_numBasis = 4;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_numQuadPts = 1;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_vertices[] = {
+ -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
+  2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
+  1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_cells[] = {
+0,1,2,3,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_quadPts[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_quadWts[] = {
+  1.33333333e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_basis[] = {
+  2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
+  2.50000000e-01,};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_basisDerivRef[] = {
+ -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
+  5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldTIncr[] = {
+  3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
+ -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
+  2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
+ -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldT[] = {
+  8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
+  1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
+ -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldTmdt[] = {
+  1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
+ -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
+  2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
+ -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_valsResidual[] = {
+  2.79474210e+11,  1.80174876e+12,  1.23194350e+12,
+  6.44632598e+11,  4.29759382e+12,  2.85238668e+12,
+ -1.13174893e+12, -6.94850554e+12, -4.68862818e+12,
+  2.07642124e+11,  8.49162957e+11,  4.69797995e+11,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_valsJacobian[] = {
+  2.94874367e+11,  6.16951570e+10,  3.89461610e+10,
+  5.48150595e+11,  1.11804684e+11,  7.10898629e+10,
+ -9.45152856e+11, -2.08621385e+11, -1.32482083e+11,
+  1.02127894e+11,  3.51215443e+10,  2.24460592e+10,
+  6.16951570e+10,  6.57018660e+11,  2.71425583e+11,
+  1.11804684e+11,  1.23922444e+12,  4.97844328e+11,
+ -2.08621385e+11, -2.12462667e+12, -8.51891691e+11,
+  3.51215443e+10,  2.28383572e+11,  8.26217801e+10,
+  3.89461610e+10,  2.71425583e+11,  4.77828353e+11,
+  7.10898629e+10,  4.97844328e+11,  8.73012939e+11,
+ -1.32482083e+11, -8.51891691e+11, -1.49263907e+12,
+  2.24460592e+10,  8.26217801e+10,  1.41797778e+11,
+  5.48150595e+11,  1.11804684e+11,  7.10898629e+10,
+  1.41837229e+12,  2.89096417e+11,  1.70605497e+11,
+ -2.25396787e+12, -4.94966564e+11, -2.95400181e+11,
+  2.87444987e+11,  9.40654624e+10,  5.37048209e+10,
+  1.11804684e+11,  1.23922444e+12,  4.97844328e+11,
+  2.89096417e+11,  3.27225597e+12,  1.26969767e+12,
+ -4.94966564e+11, -5.16973245e+12, -1.99940566e+12,
+  9.40654624e+10,  6.58252043e+11,  2.31863658e+11,
+  7.10898629e+10,  4.97844328e+11,  8.73012939e+11,
+  1.70605497e+11,  1.26969767e+12,  2.20481950e+12,
+ -2.95400181e+11, -1.99940566e+12, -3.47904176e+12,
+  5.37048209e+10,  2.31863658e+11,  4.01209317e+11,
+ -9.45152856e+11, -2.08621385e+11, -1.32482083e+11,
+ -2.25396787e+12, -4.94966564e+11, -2.95400181e+11,
+  3.68810232e+12,  8.67069202e+11,  5.19506826e+11,
+ -4.88981593e+11, -1.63481253e+11, -9.16245619e+10,
+ -2.08621385e+11, -2.12462667e+12, -8.51891691e+11,
+ -4.94966564e+11, -5.16973245e+12, -1.99940566e+12,
+  8.67069202e+11,  8.39475093e+12,  3.23896409e+12,
+ -1.63481253e+11, -1.10039182e+12, -3.87666745e+11,
+ -1.32482083e+11, -8.51891691e+11, -1.49263907e+12,
+ -2.95400181e+11, -1.99940566e+12, -3.47904176e+12,
+  5.19506826e+11,  3.23896409e+12,  5.64558477e+12,
+ -9.16245619e+10, -3.87666745e+11, -6.73903937e+11,
+  1.02127894e+11,  3.51215443e+10,  2.24460592e+10,
+  2.87444987e+11,  9.40654624e+10,  5.37048209e+10,
+ -4.88981593e+11, -1.63481253e+11, -9.16245619e+10,
+  9.94087115e+10,  3.42942460e+10,  1.54736818e+10,
+  3.51215443e+10,  2.28383572e+11,  8.26217801e+10,
+  9.40654624e+10,  6.58252043e+11,  2.31863658e+11,
+ -1.63481253e+11, -1.10039182e+12, -3.87666745e+11,
+  3.42942460e+10,  2.13756204e+11,  7.31813067e+10,
+  2.24460592e+10,  8.26217801e+10,  1.41797778e+11,
+  5.37048209e+10,  2.31863658e+11,  4.01209317e+11,
+ -9.16245619e+10, -3.87666745e+11, -6.73903937e+11,
+  1.54736818e+10,  7.31813067e+10,  1.30896842e+11,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::ElasticityImplicitLgDeformGravData3DLinear(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::~ElasticityImplicitLgDeformGravData3DLinear(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata3dlinear_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformgravdata3dlinear_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformGravData3DLinear;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformGravData3DLinear(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformGravData3DLinear(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformgravdata3dlinear_hh
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,531 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#include "ElasticityImplicitLgDeformGravData3DQuadratic.hh"
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_spaceDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_cellDim = 3;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_numVertices = 10;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_numCells = 1;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_numBasis = 10;
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_numQuadPts = 4;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_matType = "ElasticIsotropic3D";
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_matDBFilename = "data/elasticisotropic3d.spatialdb";
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_matId = 0;
+
+const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_matLabel = "elastic isotropic 3-D";
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_dt =   1.00000000e-02;
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_gravityVec[] = {
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_vertices[] = {
+ -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
+  2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
+  1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  2.00000000e-01,  5.00000000e-01,  2.00000000e+00,
+  1.50000000e+00, -5.00000000e-01, -2.50000000e-01,
+  2.50000000e-01, -5.00000000e-01, -5.00000000e-01,
+  7.50000000e-01, -2.00000000e+00, -7.50000000e-01,
+ -1.50000000e-01, -7.50000000e-01,  5.00000000e-01,
+  1.10000000e+00, -7.50000000e-01,  7.50000000e-01,
+  6.00000000e-01,  7.50000000e-01,  1.00000000e+00,
+};
+
+const int pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_cells[] = {
+0,1,2,3,4,5,6,7,8,9,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_verticesRef[] = {
+ -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
+  0.00000000e+00, -1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -1.00000000e+00,  0.00000000e+00,
+ -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_quadPts[] = {
+ -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+  5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
+ -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_quadWts[] = {
+  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_basis[] = {
+  2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
+ -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
+  2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
+  4.00000000e-02, -4.50000000e-02,  3.75000000e-01,
+ -8.00000000e-02, -8.00000000e-02,  3.00000000e-01,
+  2.00000000e-02,  1.50000000e-01,  2.00000000e-02,
+  3.00000000e-01,  4.00000000e-02, -4.50000000e-02,
+ -8.00000000e-02,  3.75000000e-01, -8.00000000e-02,
+  3.00000000e-01,  1.50000000e-01,  2.00000000e-02,
+  2.00000000e-02,  4.00000000e-02,  3.00000000e-01,
+ -4.50000000e-02, -8.00000000e-02, -8.00000000e-02,
+  3.75000000e-01,  4.00000000e-02,  2.00000000e-02,
+  2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
+  3.00000000e-01,};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_basisDerivRef[] = {
+ -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01,  1.20000000e+00, -2.00000000e-01,
+  1.20000000e+00, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01,  1.20000000e+00,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+  1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  2.00000000e-01,  1.50000000e+00,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.40000000e+00, -1.50000000e+00, -1.50000000e+00,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  1.50000000e+00,
+  0.00000000e+00,  2.00000000e-01,  2.00000000e-01,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00, -3.00000000e-01,
+  1.50000000e+00,  2.00000000e-01,  0.00000000e+00,
+ -1.50000000e+00, -1.40000000e+00, -1.50000000e+00,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -2.00000000e-01, -2.00000000e-01, -1.00000000e-01,
+  2.00000000e-01,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  2.00000000e-01,  1.50000000e+00,
+  4.00000000e-01,  4.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
+  0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
+  0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
+  2.00000000e-01,  2.00000000e-01,  0.00000000e+00,
+ -2.00000000e-01, -1.00000000e-01, -2.00000000e-01,
+ -1.00000000e-01, -2.00000000e-01, -2.00000000e-01,
+ -1.50000000e+00, -1.50000000e+00, -1.40000000e+00,
+  1.50000000e+00,  0.00000000e+00,  2.00000000e-01,
+  0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldTIncr[] = {
+  3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
+ -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
+  5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
+ -7.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -6.00000000e-01, -3.00000000e-01,  8.00000000e-01,
+ -4.00000000e-01, -8.00000000e-01, -5.00000000e-01,
+  7.00000000e-01,  8.00000000e-01, -5.00000000e-01,
+ -5.00000000e-01, -5.00000000e-01, -7.00000000e-01,
+ -3.00000000e-01, -9.00000000e-01,  8.00000000e-01,
+ -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldT[] = {
+  1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
+ -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
+  6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
+ -8.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+ -0.00000000e+00, -2.00000000e-01,  6.00000000e-01,
+ -4.00000000e-01, -7.00000000e-01, -2.00000000e-01,
+  7.00000000e-01,  6.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01, -3.00000000e-01, -3.00000000e-01,
+ -7.00000000e-01, -6.00000000e-01,  1.00000000e-01,
+ -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldTmdt[] = {
+  2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
+ -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
+ -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
+ -3.00000000e-01, -8.00000000e-01, -3.00000000e-01,
+ -5.00000000e-01, -9.00000000e-01,  4.00000000e-01,
+ -3.00000000e-01, -6.00000000e-01, -8.00000000e-01,
+  9.00000000e-01,  5.00000000e-01, -2.00000000e-01,
+ -7.00000000e-01, -2.00000000e-01, -9.00000000e-01,
+ -5.00000000e-01, -8.00000000e-01,  4.00000000e-01,
+ -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_valsResidual[] = {
+  2.83531193e+11,  6.85360097e+11, -7.60839301e+11,
+  8.17609945e+11, -2.46059924e+11,  5.52982643e+11,
+ -1.61369461e+12, -3.33728123e+11, -2.00813431e+12,
+ -3.86612970e+11,  1.55209617e+12, -1.59708576e+12,
+ -8.25945978e+11, -2.06081757e+11, -9.32629697e+11,
+  2.39916408e+12,  1.36233180e+12,  2.35919362e+12,
+ -1.83049591e+12, -1.27565741e+12,  2.69052281e+11,
+  2.60556997e+11, -1.53217232e+12,  1.31884398e+12,
+ -8.95741060e+11,  3.53530714e+12, -4.30653354e+12,
+  1.79162831e+12, -3.54139567e+12,  4.39369174e+12,
+};
+
+const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_valsJacobian[] = {
+  4.65661925e+11,  1.45207670e+11,  8.48382894e+10,
+  1.24772472e+11,  7.41894782e+10, -4.42698676e+10,
+  7.18213188e+10,  5.09242305e+09,  4.05530373e+10,
+  9.25950209e+10,  3.01383081e+09,  4.41940539e+10,
+  1.40659877e+11,  7.81646933e+09,  8.55770103e+10,
+  7.55814313e+10,  1.00158408e+11, -5.39884553e+09,
+ -7.04119227e+11, -2.55717104e+11, -3.23748072e+10,
+ -3.27406977e+11, -3.58266405e+10, -1.14846242e+11,
+  1.90099476e+11, -7.46675761e+10,  1.18407263e+10,
+ -1.29665315e+11,  3.07330418e+10, -7.01133548e+10,
+  1.45207670e+11,  4.17879082e+11,  2.69285551e+10,
+  7.41894782e+10,  7.12501045e+10,  1.69326571e+10,
+  5.09242305e+09,  7.79843128e+10,  1.24078373e+09,
+  3.01383081e+09,  1.26067202e+11, -2.62782048e+10,
+  7.81646933e+09,  1.18102474e+11,  2.96832254e+10,
+  1.00158408e+11,  2.69890946e+10,  6.52474095e+10,
+ -2.55717104e+11, -5.58070068e+11, -2.09279922e+10,
+ -3.58266405e+10, -4.64117178e+11,  6.84864638e+10,
+ -7.46675761e+10,  3.28253126e+11, -2.44433188e+11,
+  3.07330418e+10, -1.44338150e+11,  8.31202909e+10,
+  8.48382894e+10,  2.69285551e+10,  4.15301734e+11,
+ -4.42698676e+10,  1.69326571e+10,  7.33047953e+10,
+  4.05530373e+10,  1.24078373e+09,  1.27489728e+11,
+  4.41940539e+10, -2.62782048e+10,  1.51395370e+11,
+  8.55770103e+10,  2.96832254e+10,  2.11321369e+11,
+ -5.39884553e+09,  6.52474095e+10, -1.46463462e+11,
+ -3.23748072e+10, -2.09279922e+10, -5.59853491e+11,
+ -1.14846242e+11,  6.84864638e+10, -5.09095160e+11,
+  1.18407263e+10, -2.44433188e+11,  4.97279724e+11,
+ -7.01133548e+10,  8.31202909e+10, -2.60680607e+11,
+  1.24772472e+11,  7.41894782e+10, -4.42698676e+10,
+  3.18994605e+11,  6.08636475e+10, -5.28381253e+10,
+ -5.95541375e+10,  1.26084960e+10, -4.24114682e+10,
+ -8.37120894e+10,  2.17101919e+10, -9.24436085e+08,
+ -2.46254169e+11, -4.29845346e+10, -4.41618213e+10,
+  3.69282312e+11,  1.07296224e+11,  1.48157570e+11,
+ -5.47553983e+11, -1.78849586e+11,  9.36194643e+10,
+  7.95730371e+10, -7.67652780e+10,  4.79024142e+10,
+ -2.15276680e+11,  8.00666055e+10, -1.77270676e+11,
+  2.59728633e+11, -5.81352446e+10,  7.21969464e+10,
+  7.41894782e+10,  7.12501045e+10,  1.69326571e+10,
+  6.08636475e+10,  3.25267756e+11, -1.22309091e+11,
+  1.26084960e+10, -5.31861531e+10,  1.29709419e+10,
+  2.17101919e+10, -1.52532444e+11,  1.00603438e+11,
+ -4.29845346e+10, -2.62321656e+11,  6.79528717e+10,
+  1.07296224e+11,  3.27288566e+11,  5.30178659e+10,
+ -1.78849586e+11, -4.32757567e+11,  7.65998486e+10,
+ -7.67652780e+10,  1.29553761e+11, -1.26591592e+11,
+  8.00666055e+10, -3.89057716e+11,  1.34140735e+11,
+ -5.81352446e+10,  4.36495348e+11, -2.13317675e+11,
+ -4.42698676e+10,  1.69326571e+10,  7.33047953e+10,
+ -5.28381253e+10, -1.22309091e+11,  4.88759132e+11,
+ -4.24114682e+10,  1.29709419e+10, -6.74464625e+10,
+ -9.24436085e+08,  1.00603438e+11, -1.98419387e+11,
+ -4.41618213e+10,  6.79528717e+10, -3.98133382e+11,
+  1.48157570e+11,  5.30178659e+10,  3.01368983e+11,
+  9.36194643e+10,  7.65998486e+10, -5.77601119e+11,
+  4.79024142e+10, -1.26591592e+11,  1.94445962e+11,
+ -1.77270676e+11,  1.34140735e+11, -2.74232321e+11,
+  7.21969464e+10, -2.13317675e+11,  4.57953800e+11,
+  7.18213188e+10,  5.09242305e+09,  4.05530373e+10,
+ -5.95541375e+10,  1.26084960e+10, -4.24114682e+10,
+  1.10135125e+12,  3.25720553e+11,  3.62390508e+11,
+  2.94017649e+11,  1.23894657e+10,  8.94735240e+10,
+  1.34408493e+10, -4.81163047e+10,  1.60257602e+11,
+ -6.81749121e+11, -2.46273575e+11, -2.38131042e+11,
+  1.52813392e+11,  6.38089974e+10,  2.92728877e+10,
+ -1.19071391e+10,  6.22561142e+10, -3.62572653e+10,
+  2.38104621e+11, -5.73710641e+10, -4.42540169e+09,
+ -1.11833868e+12, -1.30115106e+11, -3.60722383e+11,
+  5.09242305e+09,  7.79843128e+10,  1.24078373e+09,
+  1.26084960e+10, -5.31861531e+10,  1.29709419e+10,
+  3.25720553e+11,  1.09654928e+12,  1.25558927e+11,
+  1.23894657e+10,  4.02203557e+11, -1.25992638e+11,
+ -4.81163047e+10, -2.03145182e+11,  1.24652000e+11,
+ -2.46273575e+11, -6.32348620e+11, -1.80580051e+11,
+  6.38089974e+10,  9.79869768e+10,  3.14800157e+10,
+  6.22561142e+10, -2.38293966e+10,  8.52080054e+10,
+ -5.73710641e+10,  4.92506284e+11, -2.94720961e+11,
+ -1.30115106e+11, -1.25472106e+12,  2.20182976e+11,
+  4.05530373e+10,  1.24078373e+09,  1.27489728e+11,
+ -4.24114682e+10,  1.29709419e+10, -6.74464625e+10,
+  3.62390508e+11,  1.25558927e+11,  1.03669910e+12,
+  8.94735240e+10, -1.25992638e+11,  4.11450418e+11,
+  1.60257602e+11,  1.24652000e+11, -3.17810955e+09,
+ -2.38131042e+11, -1.80580051e+11, -6.28819588e+11,
+  2.92728877e+10,  3.14800157e+10,  3.14543861e+10,
+ -3.62572653e+10,  8.52080054e+10, -1.29228969e+11,
+ -4.42540169e+09, -2.94720961e+11,  5.35392012e+11,
+ -3.60722383e+11,  2.20182976e+11, -1.31381251e+12,
+  9.25950209e+10,  3.01383081e+09,  4.41940539e+10,
+ -8.37120894e+10,  2.17101919e+10, -9.24436085e+08,
+  2.94017649e+11,  1.23894657e+10,  8.94735240e+10,
+  4.97528833e+11, -1.14626728e+10,  6.59882894e+10,
+  6.65491224e+10,  8.47757035e+09,  1.31257632e+10,
+  7.66331934e+10,  8.55959553e+10, -3.73685357e+07,
+ -3.56709943e+10, -2.76429617e+10, -6.19572817e+10,
+ -3.22925718e+11, -5.74029189e+09, -8.83327493e+10,
+  3.17445492e+11, -1.22169413e+11,  1.00263616e+11,
+ -9.02460510e+11,  3.58283248e+10, -1.61793411e+11,
+  3.01383081e+09,  1.26067202e+11, -2.62782048e+10,
+  2.17101919e+10, -1.52532444e+11,  1.00603438e+11,
+  1.23894657e+10,  4.02203557e+11, -1.25992638e+11,
+ -1.14626728e+10,  8.65931363e+11, -3.82661325e+11,
+  8.47757035e+09, -1.28217470e+10,  1.35369129e+10,
+  8.55959553e+10,  3.26503144e+10,  1.22944799e+11,
+ -2.76429617e+10, -3.20097931e+10, -5.88793091e+10,
+ -5.74029189e+09, -4.10305623e+11,  1.11266648e+11,
+ -1.22169413e+11,  7.48622075e+11, -4.24857358e+11,
+  3.58283248e+10, -1.56780490e+12,  6.70317037e+11,
+  4.41940539e+10, -2.62782048e+10,  1.51395370e+11,
+ -9.24436085e+08,  1.00603438e+11, -1.98419387e+11,
+  8.94735240e+10, -1.25992638e+11,  4.11450418e+11,
+  6.59882894e+10, -3.82661325e+11,  8.70711287e+11,
+  1.31257632e+10,  1.35369129e+10,  9.07016473e+10,
+ -3.73685357e+07,  1.22944799e+11, -5.25010034e+10,
+ -6.19572817e+10, -5.88793091e+10,  1.08121328e+10,
+ -8.83327493e+10,  1.11266648e+11, -5.16970075e+11,
+  1.00263616e+11, -4.24857358e+11,  7.55013813e+11,
+ -1.61793411e+11,  6.70317037e+11, -1.52219420e+12,
+  1.40659877e+11,  7.81646933e+09,  8.55770103e+10,
+ -2.46254169e+11, -4.29845346e+10, -4.41618213e+10,
+  1.34408493e+10, -4.81163047e+10,  1.60257602e+11,
+  6.65491224e+10,  8.47757035e+09,  1.31257632e+10,
+  1.16270901e+12,  1.84156516e+11,  1.94618725e+11,
+ -5.72995180e+11, -7.97684286e+10, -3.20409939e+11,
+  2.64947735e+10,  1.68329992e+10, -9.87964535e+09,
+ -2.49889410e+11, -3.10663177e+10, -7.33658238e+10,
+ -1.71088244e+11, -6.30056465e+10,  1.74314405e+11,
+ -1.69626626e+11,  4.76576773e+10, -1.80076276e+11,
+  7.81646933e+09,  1.18102474e+11,  2.96832254e+10,
+ -4.29845346e+10, -2.62321656e+11,  6.79528717e+10,
+ -4.81163047e+10, -2.03145182e+11,  1.24652000e+11,
+  8.47757035e+09, -1.28217470e+10,  1.35369129e+10,
+  1.84156516e+11,  1.16609381e+12, -2.28629589e+11,
+ -7.97684286e+10, -4.65673799e+11, -9.51163063e+10,
+  1.68329992e+10,  7.30677747e+10, -6.02206307e+10,
+ -3.10663177e+10, -2.30487506e+11,  7.81937180e+09,
+ -6.30056465e+10, -2.28430845e+11,  1.98763507e+11,
+  4.76576773e+10,  4.56166756e+10, -5.84413625e+10,
+  8.55770103e+10,  2.96832254e+10,  2.11321369e+11,
+ -4.41618213e+10,  6.79528717e+10, -3.98133382e+11,
+  1.60257602e+11,  1.24652000e+11, -3.17810955e+09,
+  1.31257632e+10,  1.35369129e+10,  9.07016473e+10,
+  1.94618725e+11, -2.28629589e+11,  1.70825144e+12,
+ -3.20409939e+11, -9.51163063e+10, -7.97801243e+11,
+ -9.87964535e+09, -6.02206307e+10,  7.70360435e+10,
+ -7.33658238e+10,  7.81937180e+09, -2.93644299e+11,
+  1.74314405e+11,  1.98763507e+11, -4.10328847e+11,
+ -1.80076276e+11, -5.84413625e+10, -1.84224621e+11,
+  7.55814313e+10,  1.00158408e+11, -5.39884553e+09,
+  3.69282312e+11,  1.07296224e+11,  1.48157570e+11,
+ -6.81749121e+11, -2.46273575e+11, -2.38131042e+11,
+  7.66331934e+10,  8.55959553e+10, -3.73685357e+07,
+ -5.72995180e+11, -7.97684286e+10, -3.20409939e+11,
+  2.45592464e+12,  8.72069906e+11,  7.29084849e+11,
+ -9.75215619e+11, -4.34128069e+11, -2.56910788e+11,
+ -5.51910015e+11, -3.31945132e+11, -1.04698326e+11,
+ -5.96253782e+11, -1.03426849e+11, -1.13624994e+11,
+  4.00702141e+11,  3.04215606e+10,  1.61968884e+11,
+  1.00158408e+11,  2.69890946e+10,  6.52474095e+10,
+  1.07296224e+11,  3.27288566e+11,  5.30178659e+10,
+ -2.46273575e+11, -6.32348620e+11, -1.80580051e+11,
+  8.55959553e+10,  3.26503144e+10,  1.22944799e+11,
+ -7.97684286e+10, -4.65673799e+11, -9.51163063e+10,
+  8.72069906e+11,  2.27130607e+12,  5.76476353e+11,
+ -4.34128069e+11, -7.36984695e+11, -2.23203143e+11,
+ -3.31945132e+11, -4.91827419e+11, -3.22783678e+11,
+ -1.03426849e+11, -7.11586437e+11,  1.31379586e+11,
+  3.04215606e+10,  3.80186919e+11, -1.27382836e+11,
+ -5.39884553e+09,  6.52474095e+10, -1.46463462e+11,
+  1.48157570e+11,  5.30178659e+10,  3.01368983e+11,
+ -2.38131042e+11, -1.80580051e+11, -6.28819588e+11,
+ -3.73685357e+07,  1.22944799e+11, -5.25010034e+10,
+ -3.20409939e+11, -9.51163063e+10, -7.97801243e+11,
+  7.29084849e+11,  5.76476353e+11,  2.14357815e+12,
+ -2.56910788e+11, -2.23203143e+11, -4.02976629e+11,
+ -1.04698326e+11, -3.22783678e+11, -2.22817271e+11,
+ -1.13624994e+11,  1.31379586e+11, -7.44361231e+11,
+  1.61968884e+11, -1.27382836e+11,  5.50793300e+11,
+ -7.04119227e+11, -2.55717104e+11, -3.23748072e+10,
+ -5.47553983e+11, -1.78849586e+11,  9.36194643e+10,
+  1.52813392e+11,  6.38089974e+10,  2.92728877e+10,
+ -3.56709943e+10, -2.76429617e+10, -6.19572817e+10,
+  2.64947735e+10,  1.68329992e+10, -9.87964535e+09,
+ -9.75215619e+11, -4.34128069e+11, -2.56910788e+11,
+  1.89896017e+12,  6.56740815e+11, -8.16178375e+10,
+  3.38393444e+11,  1.64966431e+11,  1.12967809e+11,
+ -3.12949675e+10,  2.44157356e+10,  1.92718403e+11,
+ -1.22806992e+11, -3.04272562e+10,  1.41617951e+10,
+ -2.55717104e+11, -5.58070068e+11, -2.09279922e+10,
+ -1.78849586e+11, -4.32757567e+11,  7.65998486e+10,
+  6.38089974e+10,  9.79869768e+10,  3.14800157e+10,
+ -2.76429617e+10, -3.20097931e+10, -5.88793091e+10,
+  1.68329992e+10,  7.30677747e+10, -6.02206307e+10,
+ -4.34128069e+11, -7.36984695e+11, -2.23203143e+11,
+  6.56740815e+11,  1.40195492e+12, -6.50991546e+10,
+  1.64966431e+11,  4.34421272e+11,  6.47670884e+10,
+  2.44157356e+10, -1.07992730e+11,  2.24564280e+11,
+ -3.04272562e+10, -1.39616091e+11,  3.09189976e+10,
+ -3.23748072e+10, -2.09279922e+10, -5.59853491e+11,
+  9.36194643e+10,  7.65998486e+10, -5.77601119e+11,
+  2.92728877e+10,  3.14800157e+10,  3.14543861e+10,
+ -6.19572817e+10, -5.88793091e+10,  1.08121328e+10,
+ -9.87964535e+09, -6.02206307e+10,  7.70360435e+10,
+ -2.56910788e+11, -2.23203143e+11, -4.02976629e+11,
+ -8.16178375e+10, -6.50991546e+10,  1.51957659e+12,
+  1.12967809e+11,  6.47670884e+10,  3.90219017e+11,
+  1.92718403e+11,  2.24564280e+11, -4.04297886e+11,
+  1.41617951e+10,  3.09189976e+10, -8.43690419e+10,
+ -3.27406977e+11, -3.58266405e+10, -1.14846242e+11,
+  7.95730371e+10, -7.67652780e+10,  4.79024142e+10,
+ -1.19071391e+10,  6.22561142e+10, -3.62572653e+10,
+ -3.22925718e+11, -5.74029189e+09, -8.83327493e+10,
+ -2.49889410e+11, -3.10663177e+10, -7.33658238e+10,
+ -5.51910015e+11, -3.31945132e+11, -1.04698326e+11,
+  3.38393444e+11,  1.64966431e+11,  1.12967809e+11,
+  1.31141204e+12,  1.23926458e+11,  3.32914096e+11,
+ -6.26226600e+11,  2.47475905e+11, -2.25050603e+11,
+  3.60887342e+11, -1.17281247e+11,  1.48766690e+11,
+ -3.58266405e+10, -4.64117178e+11,  6.84864638e+10,
+ -7.67652780e+10,  1.29553761e+11, -1.26591592e+11,
+  6.22561142e+10, -2.38293966e+10,  8.52080054e+10,
+ -5.74029189e+09, -4.10305623e+11,  1.11266648e+11,
+ -3.10663177e+10, -2.30487506e+11,  7.81937180e+09,
+ -3.31945132e+11, -4.91827419e+11, -3.22783678e+11,
+  1.64966431e+11,  4.34421272e+11,  6.47670884e+10,
+  1.23926458e+11,  1.60701662e+12, -2.64550313e+11,
+  2.47475905e+11, -9.92458260e+11,  6.53136619e+11,
+ -1.17281247e+11,  4.42033730e+11, -2.76758613e+11,
+ -1.14846242e+11,  6.84864638e+10, -5.09095160e+11,
+  4.79024142e+10, -1.26591592e+11,  1.94445962e+11,
+ -3.62572653e+10,  8.52080054e+10, -1.29228969e+11,
+ -8.83327493e+10,  1.11266648e+11, -5.16970075e+11,
+ -7.33658238e+10,  7.81937180e+09, -2.93644299e+11,
+ -1.04698326e+11, -3.22783678e+11, -2.22817271e+11,
+  1.12967809e+11,  6.47670884e+10,  3.90219017e+11,
+  3.32914096e+11, -2.64550313e+11,  1.69650893e+12,
+ -2.25050603e+11,  6.53136619e+11, -1.33623672e+12,
+  1.48766690e+11, -2.76758613e+11,  7.26818588e+11,
+  1.90099476e+11, -7.46675761e+10,  1.18407263e+10,
+ -2.15276680e+11,  8.00666055e+10, -1.77270676e+11,
+  2.38104621e+11, -5.73710641e+10, -4.42540169e+09,
+  3.17445492e+11, -1.22169413e+11,  1.00263616e+11,
+ -1.71088244e+11, -6.30056465e+10,  1.74314405e+11,
+ -5.96253782e+11, -1.03426849e+11, -1.13624994e+11,
+ -3.12949675e+10,  2.44157356e+10,  1.92718403e+11,
+ -6.26226600e+11,  2.47475905e+11, -2.25050603e+11,
+  1.97967373e+12, -2.24128696e+11,  2.63978666e+11,
+ -1.08518305e+12,  2.92810999e+11, -2.22744142e+11,
+ -7.46675761e+10,  3.28253126e+11, -2.44433188e+11,
+  8.00666055e+10, -3.89057716e+11,  1.34140735e+11,
+ -5.73710641e+10,  4.92506284e+11, -2.94720961e+11,
+ -1.22169413e+11,  7.48622075e+11, -4.24857358e+11,
+ -6.30056465e+10, -2.28430845e+11,  1.98763507e+11,
+ -1.03426849e+11, -7.11586437e+11,  1.31379586e+11,
+  2.44157356e+10, -1.07992730e+11,  2.24564280e+11,
+  2.47475905e+11, -9.92458260e+11,  6.53136619e+11,
+ -2.24128696e+11,  3.09010212e+12, -1.54522896e+12,
+  2.92810999e+11, -2.22995762e+12,  1.16725574e+12,
+  1.18407263e+10, -2.44433188e+11,  4.97279724e+11,
+ -1.77270676e+11,  1.34140735e+11, -2.74232321e+11,
+ -4.42540169e+09, -2.94720961e+11,  5.35392012e+11,
+  1.00263616e+11, -4.24857358e+11,  7.55013813e+11,
+  1.74314405e+11,  1.98763507e+11, -4.10328847e+11,
+ -1.13624994e+11,  1.31379586e+11, -7.44361231e+11,
+  1.92718403e+11,  2.24564280e+11, -4.04297886e+11,
+ -2.25050603e+11,  6.53136619e+11, -1.33623672e+12,
+  2.63978666e+11, -1.54522896e+12,  3.55709452e+12,
+ -2.22744142e+11,  1.16725574e+12, -2.17532306e+12,
+ -1.29665315e+11,  3.07330418e+10, -7.01133548e+10,
+  2.59728633e+11, -5.81352446e+10,  7.21969464e+10,
+ -1.11833868e+12, -1.30115106e+11, -3.60722383e+11,
+ -9.02460510e+11,  3.58283248e+10, -1.61793411e+11,
+ -1.69626626e+11,  4.76576773e+10, -1.80076276e+11,
+  4.00702141e+11,  3.04215606e+10,  1.61968884e+11,
+ -1.22806992e+11, -3.04272562e+10,  1.41617951e+10,
+  3.60887342e+11, -1.17281247e+11,  1.48766690e+11,
+ -1.08518305e+12,  2.92810999e+11, -2.22744142e+11,
+  2.50676306e+12, -1.01492749e+11,  5.98355251e+11,
+  3.07330418e+10, -1.44338150e+11,  8.31202909e+10,
+ -5.81352446e+10,  4.36495348e+11, -2.13317675e+11,
+ -1.30115106e+11, -1.25472106e+12,  2.20182976e+11,
+  3.58283248e+10, -1.56780490e+12,  6.70317037e+11,
+  4.76576773e+10,  4.56166756e+10, -5.84413625e+10,
+  3.04215606e+10,  3.80186919e+11, -1.27382836e+11,
+ -3.04272562e+10, -1.39616091e+11,  3.09189976e+10,
+ -1.17281247e+11,  4.42033730e+11, -2.76758613e+11,
+  2.92810999e+11, -2.22995762e+12,  1.16725574e+12,
+ -1.01492749e+11,  4.03210515e+12, -1.49589456e+12,
+ -7.01133548e+10,  8.31202909e+10, -2.60680607e+11,
+  7.21969464e+10, -2.13317675e+11,  4.57953800e+11,
+ -3.60722383e+11,  2.20182976e+11, -1.31381251e+12,
+ -1.61793411e+11,  6.70317037e+11, -1.52219420e+12,
+ -1.80076276e+11, -5.84413625e+10, -1.84224621e+11,
+  1.61968884e+11, -1.27382836e+11,  5.50793300e+11,
+  1.41617951e+10,  3.09189976e+10, -8.43690419e+10,
+  1.48766690e+11, -2.76758613e+11,  7.26818588e+11,
+ -2.22744142e+11,  1.16725574e+12, -2.17532306e+12,
+  5.98355251e+11, -1.49589456e+12,  3.80503835e+12,
+};
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::ElasticityImplicitLgDeformGravData3DQuadratic(void)
+{ // constructor
+  spaceDim = _spaceDim;
+  cellDim = _cellDim;
+  numVertices = _numVertices;
+  numCells = _numCells;
+  numBasis = _numBasis;
+  numQuadPts = _numQuadPts;
+  matType = const_cast<char*>(_matType);
+  matDBFilename = const_cast<char*>(_matDBFilename);
+  matId = _matId;
+  matLabel = const_cast<char*>(_matLabel);
+  dt = _dt;
+  gravityVec = const_cast<double*>(_gravityVec);
+  vertices = const_cast<double*>(_vertices);
+  cells = const_cast<int*>(_cells);
+  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<double*>(_quadPts);
+  quadWts = const_cast<double*>(_quadWts);
+  basis = const_cast<double*>(_basis);
+  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  fieldTIncr = const_cast<double*>(_fieldTIncr);
+  fieldT = const_cast<double*>(_fieldT);
+  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  valsResidual = const_cast<double*>(_valsResidual);
+  valsJacobian = const_cast<double*>(_valsJacobian);
+} // constructor
+
+pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::~ElasticityImplicitLgDeformGravData3DQuadratic(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application integratorelasticitylgdeform.
+
+#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata3dquadratic_hh)
+#define pylith_feassemble_elasticityimplicitlgdeformgravdata3dquadratic_hh
+
+#include "IntegratorData.hh"
+
+namespace pylith {
+  namespace feassemble {
+     class ElasticityImplicitLgDeformGravData3DQuadratic;
+  } // pylith
+} // feassemble
+
+class pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic : public IntegratorData
+{
+
+public: 
+
+  /// Constructor
+  ElasticityImplicitLgDeformGravData3DQuadratic(void);
+
+  /// Destructor
+  ~ElasticityImplicitLgDeformGravData3DQuadratic(void);
+
+private:
+
+  static const int _spaceDim;
+
+  static const int _cellDim;
+
+  static const int _numVertices;
+
+  static const int _numCells;
+
+  static const int _numBasis;
+
+  static const int _numQuadPts;
+
+  static const char* _matType;
+
+  static const char* _matDBFilename;
+
+  static const int _matId;
+
+  static const char* _matLabel;
+
+  static const double _dt;
+
+  static const double _gravityVec[];
+
+  static const double _vertices[];
+
+  static const int _cells[];
+
+  static const double _verticesRef[];
+
+  static const double _quadPts[];
+
+  static const double _quadWts[];
+
+  static const double _basis[];
+
+  static const double _basisDerivRef[];
+
+  static const double _fieldTIncr[];
+
+  static const double _fieldT[];
+
+  static const double _fieldTmdt[];
+
+  static const double _valsResidual[];
+
+  static const double _valsJacobian[];
+
+};
+
+#endif // pylith_feassemble_elasticityimplicitlgdeformgravdata3dquadratic_hh
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticity.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -29,6 +29,32 @@
   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"):
@@ -46,6 +72,34 @@
 
   # 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.
@@ -99,6 +153,28 @@
     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.
@@ -200,4 +276,11 @@
     return B
 
 
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = IntegratorElasticity()
+  app.run()
+
+
 # End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/IntegratorElasticityLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,347 @@
+#!/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/Mesh1DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Mesh1DLinear.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Mesh1DLinear.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -44,7 +44,7 @@
     self.gravityVec = numpy.array( [-1.0e8], dtype=numpy.float64)
     self.vertices = numpy.array( [[-0.25], [2.0]], dtype=numpy.float64)
     self.cells = numpy.array( [[0, 1]], dtype=numpy.int32)
-    self.verticesRef = numpy.array( [[-1.0], [1.0]], dtype=numpy.float64)
+    self.verticesRef = numpy.array( [[-1.0], [+1.0]], dtype=numpy.float64)
     return
   
 

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DLinear.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -65,7 +65,8 @@
     """
     Component.__init__(self, name, facility="quadrature")
     
-    self.quadPtsRef = numpy.array( [[1.0/3.0, 1.0/3.0]], dtype=numpy.float64)
+    self.quadPtsRef = numpy.array( [[-1.0/3.0, -1.0/3.0]], dtype=numpy.float64)
+    #self.quadPtsRef = numpy.array( [[1.0/3.0, 1.0/3.0]], dtype=numpy.float64)
     self.quadWts = numpy.array([0.5], dtype=numpy.float64)
     self.numBasis = 3
     self.numQuadPts = 1

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature2DQuadratic.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -93,14 +93,24 @@
     Component.__init__(self, name, facility="quadrature")
     
     # These are just approximate points used to test the quadrature routine
-    self.quadPtsRef = numpy.array( [[-1.0+4.0/4.0, -1.0+1.0/4.0],
-                                    [-1.0+1.0/4.0, -1.0+4.0/4.0],
-                                    [-1.0+1.0/4.0, -1.0+1.0/4.0]],
+    self.quadPtsRef = numpy.array( [[-0.75,-0.75],
+                                    [0.75,-0.75],
+                                    [-0.75,0.75],
+                                    [0,-0.75],
+                                    [-0.75,0],
+                                    [0.25,0.25]],
                                    dtype=numpy.float64)
-    self.quadWts = numpy.array([2.0/3.0, 2.0/3.0, 2.0/3.0],
+    self.quadWts = numpy.array([1.0/3.0, 1.0/3.0, 1.0/3.0, 1.0/3.0, 1.0/3.0, 1.0/3.0],
                                dtype=numpy.float64)
+    #self.quadPtsRef = numpy.array( [[-0.64288254347276719, -0.68989794855663567],
+    #                                [-0.84993777955478378, 0.28989794855663559],
+    #                                [0.33278049202940285, -0.68989794855663567],
+    #                                [-0.43996016900185175, 0.28989794855663559]],
+    #                               dtype=numpy.float64)
+    #self.quadWts = numpy.array([0.63608276,  0.36391724,  0.63608276,  0.36391724],
+    #                           dtype=numpy.float64)
     self.numBasis = 6
-    self.numQuadPts = 3
+    self.numQuadPts = 6
     self.spaceDim = 2
     self.cellDim = 2
     return

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/Quadrature3DLinear.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -22,7 +22,7 @@
 
 # ----------------------------------------------------------------------
 def N0(p):
-  return 0.5*(1.0 + p[0] + p[1] + p[2])
+  return -0.5*(1.0 + p[0] + p[1] + p[2])
 
 def N0p(p):
   return -0.5

Modified: short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/feassemble/data/generate.sh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -136,7 +136,8 @@
 
   # 1-D ----------------------------------------------------------------
 
-  python ElasticityExplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData1DLinear \
     --data.parent=IntegratorData \
@@ -145,7 +146,8 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python ElasticityExplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData1DQuadratic \
     --data.parent=IntegratorData \
@@ -154,9 +156,32 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DQuadratic
 
+    python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicit \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitGravData1DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DLinear \
+    --quadrature=Quadrature1DLinear \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DLinear
+
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicit \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitGravData1DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DQuadratic \
+    --quadrature=Quadrature1DQuadratic \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DQuadratic
+
   # 2-D ----------------------------------------------------------------
 
-  python ElasticityExplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData2DLinear \
     --data.parent=IntegratorData \
@@ -165,7 +190,8 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python ElasticityExplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData2DQuadratic \
     --data.parent=IntegratorData \
@@ -174,10 +200,34 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DQuadratic
 
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicit \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitGravData2DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DLinear \
+    --quadrature=Quadrature2DLinear \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DLinear
 
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicit \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitGravData2DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DQuadratic \
+    --quadrature=Quadrature2DQuadratic \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DQuadratic
+
+
+
   # 3-D ----------------------------------------------------------------
 
-  python ElasticityExplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData3DLinear \
     --data.parent=IntegratorData \
@@ -186,7 +236,8 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python ElasticityExplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityExplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityExplicitData3DQuadratic \
     --data.parent=IntegratorData \
@@ -195,6 +246,27 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DQuadratic
 
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicit \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitGravData3DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DLinear \
+    --quadrature=Quadrature3DLinear \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DLinear
+
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicit \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitGravData3DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DQuadratic \
+    --quadrature=Quadrature3DQuadratic \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DQuadratic
 fi
 
 
@@ -203,7 +275,8 @@
 
   # 1-D ----------------------------------------------------------------
 
-  python ElasticityImplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData1DLinear \
     --data.parent=IntegratorData \
@@ -212,7 +285,8 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python ElasticityImplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData1DQuadratic \
     --data.parent=IntegratorData \
@@ -221,7 +295,9 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DQuadratic
 
-  python ElasticityImplicitGrav.py \
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitGravData1DLinear \
     --data.parent=IntegratorData \
@@ -230,7 +306,9 @@
     --material=MaterialElasticStrain1D \
     --solution=Solution1DLinear
 
-  python ElasticityImplicitGrav.py \
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitGravData1DQuadratic \
     --data.parent=IntegratorData \
@@ -241,7 +319,8 @@
 
   # 2-D ----------------------------------------------------------------
 
-  python ElasticityImplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData2DLinear \
     --data.parent=IntegratorData \
@@ -250,7 +329,8 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python ElasticityImplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData2DQuadratic \
     --data.parent=IntegratorData \
@@ -259,7 +339,9 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DQuadratic
 
-  python ElasticityImplicitGrav.py \
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitGravData2DLinear \
     --data.parent=IntegratorData \
@@ -268,7 +350,9 @@
     --material=ElasticPlaneStrain \
     --solution=Solution2DLinear
 
-  python ElasticityImplicitGrav.py \
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitGravData2DQuadratic \
     --data.parent=IntegratorData \
@@ -280,7 +364,8 @@
 
   # 3-D ----------------------------------------------------------------
 
-  python ElasticityImplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData3DLinear \
     --data.parent=IntegratorData \
@@ -289,7 +374,8 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python ElasticityImplicit.py \
+  python IntegratorElasticity.py \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitData3DQuadratic \
     --data.parent=IntegratorData \
@@ -298,7 +384,9 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DQuadratic
 
-  python ElasticityImplicitGrav.py \
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitGravData3DLinear \
     --data.parent=IntegratorData \
@@ -307,7 +395,9 @@
     --material=ElasticIsotropic3D \
     --solution=Solution3DLinear
 
-  python ElasticityImplicitGrav.py \
+  python IntegratorElasticity.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicit \
     --data.namespace=pylith,feassemble \
     --data.object=ElasticityImplicitGravData3DQuadratic \
     --data.parent=IntegratorData \
@@ -318,5 +408,284 @@
 
 fi
 
+# //////////////////////////////////////////////////////////////////////
+if [ $1 == "explicitlgdeform" ] || [ $1 == "all" ]; then
 
+  # 1-D ----------------------------------------------------------------
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformData1DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DLinear \
+    --quadrature=Quadrature1DLinear \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformData1DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DQuadratic \
+    --quadrature=Quadrature1DQuadratic \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DQuadratic
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformGravData1DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DLinear \
+    --quadrature=Quadrature1DLinear \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformGravData1DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DQuadratic \
+    --quadrature=Quadrature1DQuadratic \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DQuadratic
+
+
+  # 2-D ----------------------------------------------------------------
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformData2DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DLinear \
+    --quadrature=Quadrature2DLinear \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformData2DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DQuadratic \
+    --quadrature=Quadrature2DQuadratic \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DQuadratic
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformGravData2DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DLinear \
+    --quadrature=Quadrature2DLinear \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformGravData2DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DQuadratic \
+    --quadrature=Quadrature2DQuadratic \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DQuadratic
+
+
+  # 3-D ----------------------------------------------------------------
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformData3DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DLinear \
+    --quadrature=Quadrature3DLinear \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformData3DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DQuadratic \
+    --quadrature=Quadrature3DQuadratic \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DQuadratic
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformGravData3DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DLinear \
+    --quadrature=Quadrature3DLinear \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityExplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityExplicitLgDeformGravData3DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DQuadratic \
+    --quadrature=Quadrature3DQuadratic \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DQuadratic
+
+fi
+
+
+# //////////////////////////////////////////////////////////////////////
+if [ $1 == "implicitlgdeform" ] || [ $1 == "all" ]; then
+
+  # 1-D ----------------------------------------------------------------
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformData1DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DLinear \
+    --quadrature=Quadrature1DLinear \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformData1DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DQuadratic \
+    --quadrature=Quadrature1DQuadratic \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DQuadratic
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformGravData1DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DLinear \
+    --quadrature=Quadrature1DLinear \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformGravData1DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh1DQuadratic \
+    --quadrature=Quadrature1DQuadratic \
+    --material=MaterialElasticStrain1D \
+    --solution=Solution1DQuadratic
+
+
+  # 2-D ----------------------------------------------------------------
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformData2DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DLinear \
+    --quadrature=Quadrature2DLinear \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformData2DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DQuadratic \
+    --quadrature=Quadrature2DQuadratic \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DQuadratic
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformGravData2DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DLinear \
+    --quadrature=Quadrature2DLinear \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformGravData2DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh2DQuadratic \
+    --quadrature=Quadrature2DQuadratic \
+    --material=ElasticPlaneStrain \
+    --solution=Solution2DQuadratic
+
+
+  # 3-D ----------------------------------------------------------------
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformData3DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DLinear \
+    --quadrature=Quadrature3DLinear \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformData3DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DQuadratic \
+    --quadrature=Quadrature3DQuadratic \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DQuadratic
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformGravData3DLinear \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DLinear \
+    --quadrature=Quadrature3DLinear \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DLinear
+
+  python IntegratorElasticityLgDeform.py \
+    --use_gravity=True \
+    --formulation=ElasticityImplicitLgDeform \
+    --data.namespace=pylith,feassemble \
+    --data.object=ElasticityImplicitLgDeformGravData3DQuadratic \
+    --data.parent=IntegratorData \
+    --mesh=Mesh3DQuadratic \
+    --quadrature=Quadrature3DQuadratic \
+    --material=ElasticIsotropic3D \
+    --solution=Solution3DQuadratic
+
+fi
+
+
 # End of file 


Property changes on: short/3D/PyLith/trunk/unittests/libtests/materials
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/libtests/materials/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/libtests/meshio
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.cc	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.cc	2009-12-10 01:52:12 UTC (rev 16094)
@@ -82,7 +82,7 @@
   const char* format = "%4.1f";
   writer.timeFormat(format);
   CPPUNIT_ASSERT_EQUAL(std::string(format), writer._timeFormat);
-} // testInterpolate
+} // testTimeFormat
 
 // ----------------------------------------------------------------------
 // Test timeConstant()
@@ -94,9 +94,21 @@
   const double value = 4.5;
   writer.timeConstant(value);
   CPPUNIT_ASSERT_EQUAL(value, writer._timeConstant);
-} // testInterpolate
+} // testTimeConstant
 
 // ----------------------------------------------------------------------
+// Test precision()
+void
+pylith::meshio::TestDataWriterVTKMesh::testPrecision(void)
+{ // testPrecision
+  DataWriterVTK<topology::Mesh, MeshField> writer;
+
+  const int value = 4;
+  writer.precision(value);
+  CPPUNIT_ASSERT_EQUAL(value, writer._precision);
+} // testPrecision
+
+// ----------------------------------------------------------------------
 // Test openTimeStep() and closeTimeStep()
 void
 pylith::meshio::TestDataWriterVTKMesh::testTimeStep(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.hh	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/TestDataWriterVTKMesh.hh	2009-12-10 01:52:12 UTC (rev 16094)
@@ -43,6 +43,7 @@
   CPPUNIT_TEST( testFilename );
   CPPUNIT_TEST( testTimeFormat );
   CPPUNIT_TEST( testTimeConstant );
+  CPPUNIT_TEST( testPrecision );
   CPPUNIT_TEST( testVtkFilename );
 
   CPPUNIT_TEST_SUITE_END();
@@ -68,6 +69,9 @@
   /// Test timeConstant()
   void testTimeConstant(void);
 
+  /// Test precision()
+  void testPrecision(void);
+
   /// Test openTimeStep() and closeTimeStep()
   void testTimeStep(void);
 


Property changes on: short/3D/PyLith/trunk/unittests/libtests/meshio/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 10
 4  6 7 1 0
 4  4 5 3 2
@@ -19,13 +19,13 @@
 9
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 3.3
-4.4 5.5 6.6
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
-7.8 8.9 9 10.1 11.2 12.3
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 10
 4  6 7 1 0
 4  4 5 3 2

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 10
 4  6 7 1 0
 4  4 5 3 2
@@ -19,31 +19,31 @@
 9
 POINT_DATA 8
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
-10.1 11.2 12.3
-1.2 2.3 3.4
-4.5 5.6 6.7
-7.8 8.9 9
-10.2 11.3 12.4
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
-8.7
-9.8
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
+8.700000e+00
+9.800000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-1.3 2.4
-3.5 4.6
-5.7 6.8
-7.9 8
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+1.300000e+00 2.400000e+00
+3.500000e+00 4.600000e+00
+5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,22 +3,22 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 16 double
--1 -1 -1
--1 1 -1
-0 -1 -1
-0 1 -1
-1 -1 -1
-1 1 -1
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 -1.000000e+00
+-1.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+1.000000e+00 -1.000000e+00 -1.000000e+00
+1.000000e+00 1.000000e+00 -1.000000e+00
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 18
 8  0 12 13 1 6 14 15 7
 8  2 4 5 3 8 10 11 9
@@ -27,13 +27,13 @@
 12
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 3.3
-4.4 5.5 6.6
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
-1.1 2.2 3.3 4.4 5.5 6.6
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+1.100000e+00 2.200000e+00 3.300000e+00 4.400000e+00 5.500000e+00 6.600000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,20 +3,20 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 1 5
 4  2 3 1 0
 CELL_TYPES 1
 9
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 3.3
+1.100000e+00 2.200000e+00 3.300000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 1 5
 4  2 3 1 0
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,29 +3,29 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 1 5
 4  2 3 1 0
 CELL_TYPES 1
 9
 POINT_DATA 4
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
-10.1 11.2 12.3
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,32 +3,32 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 16 double
--1 -1 -1
--1 1 -1
-0 -1 -1
-0 1 -1
-1 -1 -1
-1 1 -1
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 -1.000000e+00
+-1.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+1.000000e+00 -1.000000e+00 -1.000000e+00
+1.000000e+00 1.000000e+00 -1.000000e+00
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 1 9
 8  2 4 5 3 8 10 11 9
 CELL_TYPES 1
 12
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 3.3
+1.100000e+00 2.200000e+00 3.300000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,22 +3,22 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 16 double
--1 -1 -1
--1 1 -1
-0 -1 -1
-0 1 -1
-1 -1 -1
-1 1 -1
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 -1.000000e+00
+-1.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+1.000000e+00 -1.000000e+00 -1.000000e+00
+1.000000e+00 1.000000e+00 -1.000000e+00
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 1 9
 8  2 4 5 3 8 10 11 9
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,77 +3,77 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 16 double
--1 -1 -1
--1 1 -1
-0 -1 -1
-0 1 -1
-1 -1 -1
-1 1 -1
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 -1.000000e+00
+-1.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+1.000000e+00 -1.000000e+00 -1.000000e+00
+1.000000e+00 1.000000e+00 -1.000000e+00
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 1 9
 8  2 4 5 3 8 10 11 9
 CELL_TYPES 1
 12
 POINT_DATA 16
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
-10.1 11.2 12.3
-1.2 2.3 3.4
-4.5 5.6 6.7
-7.8 8.9 9
-10.2 11.3 12.4
-1.3 2.4 3.5
-4.6 5.7 6.8
-7.9 8 9.1
-10.2 11.3 12.4
-13.5 14.6 15.7
-16.8 17.9 18.1
-19.2 20.3 21.4
-22.5 23.6 24.7
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.300000e+00 2.400000e+00 3.500000e+00
+4.600000e+00 5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00 9.100000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.350000e+01 1.460000e+01 1.570000e+01
+1.680000e+01 1.790000e+01 1.810000e+01
+1.920000e+01 2.030000e+01 2.140000e+01
+2.250000e+01 2.360000e+01 2.470000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
-8.7
-9.8
-10
-12.1
-11.1
-13.1
-14.1
-15.1
-16.1
-17.1
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
+8.700000e+00
+9.800000e+00
+1.000000e+01
+1.210000e+01
+1.110000e+01
+1.310000e+01
+1.410000e+01
+1.510000e+01
+1.610000e+01
+1.710000e+01
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-1.3 2.4
-3.5 4.6
-5.7 6.8
-7.9 8
-1.3 2.4
-3.5 4.6
-5.7 6.8
-8 1.4
-2.5 3.6
-4.8 1.5
-2.6 3.7
-4.8 5.9
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+1.300000e+00 2.400000e+00
+3.500000e+00 4.600000e+00
+5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00
+1.300000e+00 2.400000e+00
+3.500000e+00 4.600000e+00
+5.700000e+00 6.800000e+00
+8.000000e+00 1.400000e+00
+2.500000e+00 3.600000e+00
+4.800000e+00 1.500000e+00
+2.600000e+00 3.700000e+00
+4.800000e+00 5.900000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 10
 4  2 3 1 0
 4  4 5 3 2
@@ -17,13 +17,13 @@
 9
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 3.3
-4.4 5.5 6.6
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
-7.8 8.9 9 10.1 11.2 12.3
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 10
 4  2 3 1 0
 4  4 5 3 2

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 10
 4  2 3 1 0
 4  4 5 3 2
@@ -17,25 +17,25 @@
 9
 POINT_DATA 6
 VECTORS displacements double
-7.8 8.9 9
-10.2 11.3 12.4
-1.3 2.4 3.5
-4.6 5.7 6.8
-7.9 8.1 9.2
-10.3 11.4 12.5
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.300000e+00 2.400000e+00 3.500000e+00
+4.600000e+00 5.700000e+00 6.800000e+00
+7.900000e+00 8.100000e+00 9.200000e+00
+1.030000e+01 1.140000e+01 1.250000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-8.7
-9.8
-10.9
-11.8
-12.7
-13.6
+8.700000e+00
+9.800000e+00
+1.090000e+01
+1.180000e+01
+1.270000e+01
+1.360000e+01
 SCALARS other double 2
 LOOKUP_TABLE default
-5.7 6.8
-7.9 8
-8.1 8.2
-9.2 9.3
-10.4 10.5
-11.5 11.6
+5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00
+8.100000e+00 8.200000e+00
+9.200000e+00 9.300000e+00
+1.040000e+01 1.050000e+01
+1.150000e+01 1.160000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,22 +3,22 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 16 double
--1 -1 -1
--1 1 -1
-0 -1 -1
-0 1 -1
-1 -1 -1
-1 1 -1
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 -1.000000e+00
+-1.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+1.000000e+00 -1.000000e+00 -1.000000e+00
+1.000000e+00 1.000000e+00 -1.000000e+00
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 18
 8  0 12 13 1 6 14 15 7
 8  2 4 5 3 8 10 11 9

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/hex8_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,22 +3,22 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 16 double
--1 -1 -1
--1 1 -1
-0 -1 -1
-0 1 -1
-1 -1 -1
-1 1 -1
--1 -1 1
--1 1 1
-0 -1 1
-0 1 1
-1 -1 1
-1 1 1
-0 -1 -1
-0 1 -1
-0 -1 1
-0 1 1
+-1.000000e+00 -1.000000e+00 -1.000000e+00
+-1.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+1.000000e+00 -1.000000e+00 -1.000000e+00
+1.000000e+00 1.000000e+00 -1.000000e+00
+-1.000000e+00 -1.000000e+00 1.000000e+00
+-1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
+1.000000e+00 -1.000000e+00 1.000000e+00
+1.000000e+00 1.000000e+00 1.000000e+00
+0.000000e+00 -1.000000e+00 -1.000000e+00
+0.000000e+00 1.000000e+00 -1.000000e+00
+0.000000e+00 -1.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 1.000000e+00
 CELLS 2 18
 8  0 12 13 1 6 14 15 7
 8  2 4 5 3 8 10 11 9
@@ -27,55 +27,55 @@
 12
 POINT_DATA 16
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
-10.1 11.2 12.3
-1.2 2.3 3.4
-4.5 5.6 6.7
-7.8 8.9 9
-10.2 11.3 12.4
-1.3 2.4 3.5
-4.6 5.7 6.8
-7.9 8 9.1
-10.2 11.3 12.4
-13.5 14.6 15.7
-16.8 17.9 18.1
-19.2 20.3 21.4
-22.5 23.6 24.7
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.300000e+00 2.400000e+00 3.500000e+00
+4.600000e+00 5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00 9.100000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.350000e+01 1.460000e+01 1.570000e+01
+1.680000e+01 1.790000e+01 1.810000e+01
+1.920000e+01 2.030000e+01 2.140000e+01
+2.250000e+01 2.360000e+01 2.470000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
-8.7
-9.8
-10
-12.1
-11.1
-13.1
-14.1
-15.1
-16.1
-17.1
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
+8.700000e+00
+9.800000e+00
+1.000000e+01
+1.210000e+01
+1.110000e+01
+1.310000e+01
+1.410000e+01
+1.510000e+01
+1.610000e+01
+1.710000e+01
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-1.3 2.4
-3.5 4.6
-5.7 6.8
-7.9 8
-1.3 2.4
-3.5 4.6
-5.7 6.8
-8 1.4
-2.5 3.6
-4.8 1.5
-2.6 3.7
-4.8 5.9
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+1.300000e+00 2.400000e+00
+3.500000e+00 4.600000e+00
+5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00
+1.300000e+00 2.400000e+00
+3.500000e+00 4.600000e+00
+5.700000e+00 6.800000e+00
+8.000000e+00 1.400000e+00
+2.500000e+00 3.600000e+00
+4.800000e+00 1.500000e+00
+2.600000e+00 3.700000e+00
+4.800000e+00 5.900000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0.0 0.0
-0 0.0 0.0
-1 0.0 0.0
-0 0.0 0.0
+-1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
+1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
 CELLS 2 6
 2  0 3
 2  1 2
@@ -15,13 +15,13 @@
 3
 CELL_DATA 2
 VECTORS traction double
-1.1 0.0 0.0
-2.2 0.0 0.0
+1.100000e+00 0.0 0.0
+2.200000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-2.2
+2.100000e+00
+2.200000e+00
 SCALARS other double 1
 LOOKUP_TABLE default
-1.2
-2.3
+1.200000e+00
+2.300000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,20 +3,20 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0.0 0.0
-0 0.0 0.0
-1 0.0 0.0
-0 0.0 0.0
+-1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
+1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
 CELLS 1 3
 2  0 3
 CELL_TYPES 1
 3
 CELL_DATA 1
 VECTORS traction double
-1.1 0.0 0.0
+1.100000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 SCALARS other double 1
 LOOKUP_TABLE default
-1.2
+1.200000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0.0 0.0
-0 0.0 0.0
-1 0.0 0.0
-0 0.0 0.0
+-1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
+1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
 CELLS 1 3
 2  0 3
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,29 +3,29 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0.0 0.0
-0 0.0 0.0
-1 0.0 0.0
-0 0.0 0.0
+-1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
+1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
 CELLS 1 3
 2  0 3
 CELL_TYPES 1
 3
 POINT_DATA 4
 VECTORS displacements double
-1.1 0.0 0.0
-2.2 0.0 0.0
-3.3 0.0 0.0
-4.4 0.0 0.0
+1.100000e+00 0.0 0.0
+2.200000e+00 0.0 0.0
+3.300000e+00 0.0 0.0
+4.400000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,16 +3,16 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 1 double
--1 0.0 0.0
+-1.000000e+00 0.0 0.0
 CELLS 1 2
 1  0
 CELL_TYPES 1
 -1
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 VECTORS other double
-1.2 2.3 3.4
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,7 +3,7 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 1 double
--1 0.0 0.0
+-1.000000e+00 0.0 0.0
 CELLS 1 2
 1  0
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,17 +3,17 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 1 double
--1 0.0 0.0
+-1.000000e+00 0.0 0.0
 CELLS 1 2
 1  0
 CELL_TYPES 1
 -1
 POINT_DATA 1
 VECTORS displacements double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
+1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0.0 0.0
-0 0.0 0.0
-1 0.0 0.0
-0 0.0 0.0
+-1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
+1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
 CELLS 2 6
 2  0 3
 2  1 2

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/line2_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0.0 0.0
-0 0.0 0.0
-1 0.0 0.0
-0 0.0 0.0
+-1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
+1.000000e+00 0.0 0.0
+0.000000e+00 0.0 0.0
 CELLS 2 6
 2  0 3
 2  1 2
@@ -15,19 +15,19 @@
 3
 POINT_DATA 4
 VECTORS displacements double
-1.1 0.0 0.0
-2.2 0.0 0.0
-3.3 0.0 0.0
-4.4 0.0 0.0
+1.100000e+00 0.0 0.0
+2.200000e+00 0.0 0.0
+3.300000e+00 0.0 0.0
+4.400000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_filter_t12.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_filter_t12.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_filter_t12.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 2 8
 3  0 1 2
 3  1 3 2
@@ -16,5 +16,5 @@
 CELL_DATA 2
 SCALARS field data double 1
 LOOKUP_TABLE default
-1.125
-2.125
+1.125000e+00
+2.125000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_t12.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_t12.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_cell_t12.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 2 8
 3  0 1 2
 3  1 3 2
@@ -16,5 +16,5 @@
 CELL_DATA 2
 SCALARS field data double 2
 LOOKUP_TABLE default
-1.1 1.2
-2.1 2.2
+1.100000e+00 1.200000e+00
+2.100000e+00 2.200000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_t12.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_t12.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_t12.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 2 8
 3  0 1 2
 3  1 3 2

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_filter_t12.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_filter_t12.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_filter_t12.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 2 8
 3  0 1 2
 3  1 3 2
@@ -16,7 +16,7 @@
 POINT_DATA 4
 SCALARS field data double 1
 LOOKUP_TABLE default
-1.62788
-3.04138
-4.45533
-5.86941
+1.627882e+00
+3.041381e+00
+4.455334e+00
+5.869412e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_t12.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_t12.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/output_vertex_t12.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 2 8
 3  0 1 2
 3  1 3 2
@@ -15,7 +15,7 @@
 5
 POINT_DATA 4
 VECTORS field data double
-1.1 1.2 0.0
-2.1 2.2 0.0
-3.1 3.2 0.0
-4.1 4.2 0.0
+1.100000e+00 1.200000e+00 0.0
+2.100000e+00 2.200000e+00 0.0
+3.100000e+00 3.200000e+00 0.0
+4.100000e+00 4.200000e+00 0.0

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,9 +3,9 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
--1 -1 0.0
-0 -1 0.0
-1 -1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
 CELLS 2 6
 2  0 1
 2  1 2
@@ -14,12 +14,12 @@
 3
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 0.0
-3.3 4.4 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 VECTORS other double
-1.2 2.3 3.4
-4.5 5.6 6.7
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,9 +3,9 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
--1 -1 0.0
-0 -1 0.0
-1 -1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
 CELLS 2 6
 2  0 1
 2  1 2

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,9 +3,9 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
--1 -1 0.0
-0 -1 0.0
-1 -1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
 CELLS 2 6
 2  0 1
 2  1 2
@@ -14,16 +14,16 @@
 3
 POINT_DATA 3
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
-5.5 6.6 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
+2.100000e+00
+3.200000e+00
+4.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 0.0
--1 1 0.0
-0 -1 0.0
-0 1 0.0
-1 -1 0.0
-1 1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+-1.000000e+00 1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
+1.000000e+00 1.000000e+00 0.0
 CELLS 2 10
 4  0 2 3 1
 4  2 4 5 3
@@ -17,12 +17,12 @@
 9
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 0.0
-3.3 4.4 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-2.2
+2.100000e+00
+2.200000e+00
 VECTORS other double
-1.2 2.3 3.4
-4.5 5.6 6.7
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,17 +3,17 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-0 1 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 3
 2  1 0
 CELL_TYPES 1
 3
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 VECTORS other double
-1.2 2.3 3.4
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,8 +3,8 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-0 1 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 3
 2  1 0
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,21 +3,21 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-0 1 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 3
 2  1 0
 CELL_TYPES 1
 3
 POINT_DATA 2
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,21 +3,21 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 0.0
--1 1 0.0
-0 -1 0.0
-0 1 0.0
-1 -1 0.0
-1 1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+-1.000000e+00 1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
+1.000000e+00 1.000000e+00 0.0
 CELLS 1 5
 4  2 4 5 3
 CELL_TYPES 1
 9
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 VECTORS other double
-1.2 2.3 3.4
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 0.0
--1 1 0.0
-0 -1 0.0
-0 1 0.0
-1 -1 0.0
-1 1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+-1.000000e+00 1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
+1.000000e+00 1.000000e+00 0.0
 CELLS 1 5
 4  2 4 5 3
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,37 +3,37 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 0.0
--1 1 0.0
-0 -1 0.0
-0 1 0.0
-1 -1 0.0
-1 1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+-1.000000e+00 1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
+1.000000e+00 1.000000e+00 0.0
 CELLS 1 5
 4  2 4 5 3
 CELL_TYPES 1
 9
 POINT_DATA 6
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
-5.5 6.6 0.0
-7.7 8.8 0.0
-9.9 10.1 0.0
-11.2 12.3 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.010000e+01 0.0
+1.120000e+01 1.230000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-9.8 7.6
-6.5 5.4
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+9.800000e+00 7.600000e+00
+6.500000e+00 5.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,9 +3,9 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
--1 -1 0.0
-0 -1 0.0
-1 -1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
 CELLS 2 6
 2  0 1
 2  1 2
@@ -14,12 +14,12 @@
 3
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 0.0
-3.3 4.4 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 VECTORS other double
-1.2 2.3 3.4
-4.5 5.6 6.7
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,9 +3,9 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
--1 -1 0.0
-0 -1 0.0
-1 -1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
 CELLS 2 6
 2  0 1
 2  1 2

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,9 +3,9 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
--1 -1 0.0
-0 -1 0.0
-1 -1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
 CELLS 2 6
 2  0 1
 2  1 2
@@ -14,16 +14,16 @@
 3
 POINT_DATA 3
 VECTORS displacements double
-1.1 2.2 0.0
-5.5 6.6 0.0
-9.9 10 0.0
+1.100000e+00 2.200000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+9.900000e+00 1.000000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-4.3
-6.5
+2.100000e+00
+4.300000e+00
+6.500000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-5.6 6.7
-9.1 10.2
+1.200000e+00 2.300000e+00
+5.600000e+00 6.700000e+00
+9.100000e+00 1.020000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 0.0
--1 1 0.0
-0 -1 0.0
-0 1 0.0
-1 -1 0.0
-1 1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+-1.000000e+00 1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
+1.000000e+00 1.000000e+00 0.0
 CELLS 2 10
 4  0 2 3 1
 4  2 4 5 3

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/quad4_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 -1 0.0
--1 1 0.0
-0 -1 0.0
-0 1 0.0
-1 -1 0.0
-1 1 0.0
+-1.000000e+00 -1.000000e+00 0.0
+-1.000000e+00 1.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 -1.000000e+00 0.0
+1.000000e+00 1.000000e+00 0.0
 CELLS 2 10
 4  0 2 3 1
 4  2 4 5 3
@@ -17,25 +17,25 @@
 9
 POINT_DATA 6
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
-5.5 6.6 0.0
-7.7 8.8 0.0
-9.9 10.1 0.0
-11.2 12.3 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.010000e+01 0.0
+1.120000e+01 1.230000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-9.8 7.6
-6.5 5.4
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+9.800000e+00 7.600000e+00
+6.500000e+00 5.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0
-0 -1 0
-0 1 0
-1 0 0
-0 -1 0
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 8
 3  0 2 1
 3  4 5 3
@@ -17,13 +17,13 @@
 5
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 3.3
-4.4 5.5 6.6
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
-7.8 8.9 9 10.1 11.2 12.3
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0
-0 -1 0
-0 1 0
-1 0 0
-0 -1 0
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 8
 3  0 2 1
 3  4 5 3

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0
-0 -1 0
-0 1 0
-1 0 0
-0 -1 0
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 8
 3  0 2 1
 3  4 5 3
@@ -17,25 +17,25 @@
 5
 POINT_DATA 6
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
-10 11.1 12.2
-13.3 14.4 15.5
-16.6 17.7 18.8
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
+1.660000e+01 1.770000e+01 1.880000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-9 10.1
-11.2 12.3
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+9.000000e+00 1.010000e+01
+1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 0 0
-0 -1 0
-0 0 1
-0 1 0
-1 0 0
-0 -1 0
-0 0 1
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 10
 4  1 2 3 0
 4  5 7 6 4
@@ -19,13 +19,13 @@
 10
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 3.3
-4.4 5.5 6.6
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
-7.8 8.9 9 10.1 11.2 12.3
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,19 +3,19 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
-0 -1 0
-0 0 1
-0 1 0
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 1 4
 3  1 0 2
 CELL_TYPES 1
 5
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 3.3
+1.100000e+00 2.200000e+00 3.300000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,9 +3,9 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
-0 -1 0
-0 0 1
-0 1 0
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 1 4
 3  1 0 2
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,25 +3,25 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 3 double
-0 -1 0
-0 0 1
-0 1 0
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 1 4
 3  1 0 2
 CELL_TYPES 1
 5
 POINT_DATA 3
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
+2.100000e+00
+3.200000e+00
+4.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 0 0
-0 -1 0
-0 0 1
-0 1 0
-1 0 0
-0 -1 0
-0 0 1
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 10
 4  1 2 3 0
 4  5 7 6 4
@@ -19,13 +19,13 @@
 10
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 3.3
-4.4 5.5 6.6
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
-7.8 8.9 9 10.1 11.2 12.3
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 0 0
-0 -1 0
-0 0 1
-0 1 0
-1 0 0
-0 -1 0
-0 0 1
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 10
 4  1 2 3 0
 4  5 7 6 4

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 0 0
-0 -1 0
-0 0 1
-0 1 0
-1 0 0
-0 -1 0
-0 0 1
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 10
 4  1 2 3 0
 4  5 7 6 4
@@ -19,31 +19,31 @@
 10
 POINT_DATA 8
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
-10 11.1 12.2
-13.3 14.4 15.5
-16.6 17.7 18.8
-19.9 20 21.1
-22.2 23.3 24.4
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
+1.660000e+01 1.770000e+01 1.880000e+01
+1.990000e+01 2.000000e+01 2.110000e+01
+2.220000e+01 2.330000e+01 2.440000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
-8.7
-9.8
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
+8.700000e+00
+9.800000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-9 10.1
-11.2 12.3
-13.4 14.5
-15.6 16.7
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+9.000000e+00 1.010000e+01
+1.120000e+01 1.230000e+01
+1.340000e+01 1.450000e+01
+1.560000e+01 1.670000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0
-0 -1 0
-0 1 0
-1 0 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
 CELLS 2 8
 3  0 2 1
 3  1 2 3
@@ -15,13 +15,13 @@
 5
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 3.3
-4.4 5.5 6.6
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 6
 LOOKUP_TABLE default
-1.2 2.3 3.4 4.5 5.6 6.7
-7.8 8.9 9 10.1 11.2 12.3
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0
-0 -1 0
-0 1 0
-1 0 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
 CELLS 2 8
 3  0 2 1
 3  1 2 3

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,10 +3,10 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 4 double
--1 0 0
-0 -1 0
-0 1 0
-1 0 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
 CELLS 2 8
 3  0 2 1
 3  1 2 3
@@ -15,19 +15,19 @@
 5
 POINT_DATA 4
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-10 11.1 12.2
-13.3 14.4 15.5
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-5.4
-6.5
+2.100000e+00
+3.200000e+00
+5.400000e+00
+6.500000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-7.8 8.9
-9 10.1
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+7.800000e+00 8.900000e+00
+9.000000e+00 1.010000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 0 0
-0 -1 0
-0 0 1
-0 1 0
-1 0 0
-0 -1 0
-0 0 1
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 10
 4  1 2 3 0
 4  5 7 6 4

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tet4_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,14 +3,14 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 8 double
--1 0 0
-0 -1 0
-0 0 1
-0 1 0
-1 0 0
-0 -1 0
-0 0 1
-0 1 0
+-1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
+1.000000e+00 0.000000e+00 0.000000e+00
+0.000000e+00 -1.000000e+00 0.000000e+00
+0.000000e+00 0.000000e+00 1.000000e+00
+0.000000e+00 1.000000e+00 0.000000e+00
 CELLS 2 10
 4  1 2 3 0
 4  5 7 6 4
@@ -19,31 +19,31 @@
 10
 POINT_DATA 8
 VECTORS displacements double
-1.1 2.2 3.3
-4.4 5.5 6.6
-7.7 8.8 9.9
-10 11.1 12.2
-13.3 14.4 15.5
-16.6 17.7 18.8
-19.9 20 21.1
-22.2 23.3 24.4
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
+1.660000e+01 1.770000e+01 1.880000e+01
+1.990000e+01 2.000000e+01 2.110000e+01
+2.220000e+01 2.330000e+01 2.440000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
-8.7
-9.8
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
+8.700000e+00
+9.800000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-9 10.1
-11.2 12.3
-13.4 14.5
-15.6 16.7
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+9.000000e+00 1.010000e+01
+1.120000e+01 1.230000e+01
+1.340000e+01 1.450000e+01
+1.560000e+01 1.670000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,17 +3,17 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-1 0 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 1 3
 2  0 1
 CELL_TYPES 1
 3
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 VECTORS other double
-1.2 2.3 3.4
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,8 +3,8 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-1 0 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 1 3
 2  0 1
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,21 +3,21 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-1 0 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 1 3
 2  0 1
 CELL_TYPES 1
 3
 POINT_DATA 2
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
-0 -1 0.0
-0 1 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 2 8
 3  0 4 5
 3  1 3 2
@@ -17,12 +17,12 @@
 5
 CELL_DATA 2
 VECTORS traction double
-1.1 2.2 0.0
-3.3 4.4 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-2.2
+2.100000e+00
+2.200000e+00
 VECTORS other double
-1.2 2.3 3.4
-4.5 5.6 6.7
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,17 +3,17 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-0 1 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 3
 2  1 0
 CELL_TYPES 1
 3
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 VECTORS other double
-1.2 2.3 3.4
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,8 +3,8 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-0 1 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 3
 2  1 0
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,21 +3,21 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-0 1 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 3
 2  1 0
 CELL_TYPES 1
 3
 POINT_DATA 2
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
+2.100000e+00
+3.200000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,21 +3,21 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
-0 -1 0.0
-0 1 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 4
 3  1 3 2
 CELL_TYPES 1
 5
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 VECTORS other double
-1.2 2.3 3.4
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
-0 -1 0.0
-0 1 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 4
 3  1 3 2
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,37 +3,37 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
-0 -1 0.0
-0 1 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 1 4
 3  1 3 2
 CELL_TYPES 1
 5
 POINT_DATA 6
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
-5.5 6.6 0.0
-7.7 8.8 0.0
-9.9 10 0.0
-11.1 12.2 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.000000e+01 0.0
+1.110000e+01 1.220000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-9 10.1
-11.2 12.3
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+9.000000e+00 1.010000e+01
+1.120000e+01 1.230000e+01

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,17 +3,17 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-1 0 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 1 3
 2  0 1
 CELL_TYPES 1
 3
 CELL_DATA 1
 VECTORS traction double
-1.1 2.2 0.0
+1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
+2.100000e+00
 VECTORS other double
-1.2 2.3 3.4
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,8 +3,8 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-1 0 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 1 3
 2  0 1
 CELL_TYPES 1

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,21 +3,21 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 2 double
-0 -1 0.0
-1 0 0.0
+0.000000e+00 -1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
 CELLS 1 3
 2  0 1
 CELL_TYPES 1
 3
 POINT_DATA 2
 VECTORS displacements double
-3.3 4.4 0.0
-7.7 8.8 0.0
+3.300000e+00 4.400000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-3.2
-5.4
+3.200000e+00
+5.400000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-3.4 4.5
-7.8 8.9
+3.400000e+00 4.500000e+00
+7.800000e+00 8.900000e+00

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
-0 -1 0.0
-0 1 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 2 8
 3  0 4 5
 3  1 3 2

Modified: short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_vertex_t10.vtk	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/libtests/meshio/data/tri3_vertex_t10.vtk	2009-12-10 01:52:12 UTC (rev 16094)
@@ -3,12 +3,12 @@
 ASCII
 DATASET UNSTRUCTURED_GRID
 POINTS 6 double
--1 0 0.0
-0 -1 0.0
-0 1 0.0
-1 0 0.0
-0 -1 0.0
-0 1 0.0
+-1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
+1.000000e+00 0.000000e+00 0.0
+0.000000e+00 -1.000000e+00 0.0
+0.000000e+00 1.000000e+00 0.0
 CELLS 2 8
 3  0 4 5
 3  1 3 2
@@ -17,25 +17,25 @@
 5
 POINT_DATA 6
 VECTORS displacements double
-1.1 2.2 0.0
-3.3 4.4 0.0
-5.5 6.6 0.0
-7.7 8.8 0.0
-9.9 10 0.0
-11.1 12.2 0.0
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.000000e+01 0.0
+1.110000e+01 1.220000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.1
-3.2
-4.3
-5.4
-6.5
-7.6
+2.100000e+00
+3.200000e+00
+4.300000e+00
+5.400000e+00
+6.500000e+00
+7.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
-1.2 2.3
-3.4 4.5
-5.6 6.7
-7.8 8.9
-9 10.1
-11.2 12.3
+1.200000e+00 2.300000e+00
+3.400000e+00 4.500000e+00
+5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00
+9.000000e+00 1.010000e+01
+1.120000e+01 1.230000e+01


Property changes on: short/3D/PyLith/trunk/unittests/libtests/topology
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/libtests/topology/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/libtests/utils
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/bc
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/bc/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/faults
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/pytests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/faults/Makefile.am	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/pytests/faults/Makefile.am	2009-12-10 01:52:12 UTC (rev 16094)
@@ -27,7 +27,8 @@
 	TestFaultCohesiveKin.py \
 	TestLiuCosSlipFn.py \
 	TestSingleRupture.py \
-	TestStepSlipFn.py
+	TestStepSlipFn.py \
+	TestTimeHistorySlipFn.py
 
 
 # End of file 

Copied: short/3D/PyLith/trunk/unittests/pytests/faults/TestTimeHistorySlipFn.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/TestTimeHistorySlipFn.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/faults/TestTimeHistorySlipFn.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/pytests/faults/TestTimeHistorySlipFn.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/faults/TestTimeHistorySlipFn.py
+
+## @brief Unit testing of TimeHistorySlipFn object.
+
+import unittest
+
+from pylith.faults.TimeHistorySlipFn import TimeHistorySlipFn
+
+# ----------------------------------------------------------------------
+class TestTimeHistorySlipFn(unittest.TestCase):
+  """
+  Unit testing of TimeHistorySlipFn object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    slipFn = TimeHistorySlipFn()
+    return
+
+
+  def test_configure(self):
+    """
+    Test constructor.
+    """
+    slipFn = TimeHistorySlipFn()
+    slipFn._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test initialize().
+    """
+    from spatialdata.spatialdb.SimpleDB import SimpleDB
+    from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii
+    from spatialdata.spatialdb.TimeHistory import TimeHistory
+
+    ioFinalSlip = SimpleIOAscii()
+    ioFinalSlip.inventory.filename = "finalslip.spatialdb"
+    ioFinalSlip._configure()
+    dbFinalSlip = SimpleDB()
+    dbFinalSlip.inventory.iohandler = ioFinalSlip
+    dbFinalSlip.inventory.label = "slip amplitude"
+    dbFinalSlip._configure()
+    
+    ioSlipTime = SimpleIOAscii()
+    ioSlipTime.inventory.filename = "sliptime.spatialdb"
+    ioSlipTime._configure()
+    dbSlipTime = SimpleDB()
+    dbSlipTime.inventory.iohandler = ioSlipTime
+    dbSlipTime.inventory.label = "slip time"
+    dbSlipTime._configure()
+    
+    dbTimeHistory = TimeHistory()
+    dbTimeHistory.inventory.filename = "slipfn.timedb"
+    dbTimeHistory.inventory.label = "time history"
+    dbTimeHistory._configure()
+    
+    slipFn = TimeHistorySlipFn()
+    slipFn.inventory.dbslip = dbFinalSlip
+    slipFn.inventory.dbSlipTime = dbSlipTime
+    slipFn.inventory.dbTimeHistory = dbTimeHistory
+    slipFn._configure()
+    slipFn.preinitialize()
+    slipFn.verifyConfiguration()
+    slipFn.initialize()
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.faults.TimeHistorySlipFn import slip_time_fn
+    fn = slip_time_fn()
+    return
+
+
+# End of file 


Property changes on: short/3D/PyLith/trunk/unittests/pytests/faults/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Copied: short/3D/PyLith/trunk/unittests/pytests/faults/data/slipfn.timedb (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/data/slipfn.timedb)
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/faults/data/slipfn.timedb	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/pytests/faults/data/slipfn.timedb	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,10 @@
+#TIME HISTORY ascii
+TimeHistory {
+  num-points = 5
+  time-units = second
+}
+ 0.0  0.0
+ 1.0  0.5
+ 4.0  0.8
+ 8.0  1.0
+10.0  1.0

Modified: short/3D/PyLith/trunk/unittests/pytests/faults/testfaults.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/faults/testfaults.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/pytests/faults/testfaults.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -68,6 +68,9 @@
     from TestLiuCosSlipFn import TestLiuCosSlipFn
     suite.addTest(unittest.makeSuite(TestLiuCosSlipFn))
 
+    from TestTimeHistorySlipFn import TestTimeHistorySlipFn
+    suite.addTest(unittest.makeSuite(TestTimeHistorySlipFn))
+
     from TestEqKinSrc import TestEqKinSrc
     suite.addTest(unittest.makeSuite(TestEqKinSrc))
 


Property changes on: short/3D/PyLith/trunk/unittests/pytests/feassemble
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Copied: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,300 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py
+
+## @brief Unit testing of Python ElasticityExplicitLgDeform object.
+
+import unittest
+from pylith.feassemble.ElasticityExplicitLgDeform import ElasticityExplicitLgDeform
+
+from spatialdata.geocoords.CSCart import CSCart
+
+# ----------------------------------------------------------------------
+class TestElasticityExplicitLgDeform(unittest.TestCase):
+  """
+  Unit testing of Python ElasticityExplicitLgDeform object.
+  """
+
+  def test_implementsIntegrator(self):
+    """
+    Test to make sure ElasticityExplicitLgDeform satisfies integrator requirements.
+    """
+    integrator = ElasticityExplicitLgDeform()
+    from pylith.feassemble.Integrator import implementsIntegrator
+    self.failUnless(implementsIntegrator(integrator))
+    return
+    
+
+  def test_preinitialize(self):
+    """
+    Test preiniitlaize().
+
+    WARNING: This is not a rigorous test of preinitialize() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+
+    # No test of result.
+    return
+
+
+  def test_verifyConfiguration(self):
+    """
+    Test verifyConfiguration().
+
+    WARNING: This is not a rigorous test of verifyConfiguration()
+    because we neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    integrator.verifyConfiguration()
+
+    # No test of result.
+    return
+
+
+  def test_initialize(self):
+    """
+    Test initialize().
+
+    WARNING: This is not a rigorous test of initialize() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    # No test of result.
+    return
+
+
+  def test_timeStep(self):
+    """
+    Test timeStep().
+
+    WARNING: This is not a rigorous test of timeStep() because we
+    neither set the input fields or verify the results.
+    """
+    dt = 2.3
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+    integrator.timeStep(dt)
+
+    # No test of result.
+    return
+
+
+  def test_stableTimeStep(self):
+    """
+    Test stableTimeStep().
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    self.assertEqual(1.0e+30, integrator.stableTimeStep(mesh))
+    return
+
+
+  def test_needNewJacobian(self):
+    """
+    Test needNewJacobian().
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    self.assertEqual(True, integrator.needNewJacobian())
+    return
+
+
+  def test_useSolnIncr(self):
+    """
+    Test useSolnIncr().
+
+    WARNING: This is not a rigorous test of useSolnIncr() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    try:
+      integrator.useSolnIncr(True)
+      self.failIf(True)
+    except:
+      self.failIf(False)
+
+    # No test of result.
+    return
+
+
+  def test_integrateResidual(self):
+    """
+    Test integrateResidual().
+
+    WARNING: This is not a rigorous test of integrateResidual()
+    because we neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    residual = fields.get("residual")
+    t = 3.4
+    integrator.integrateResidual(residual, t, fields)
+
+    # No test of result.
+    return
+
+
+  def test_integrateJacobian(self):
+    """
+    Test integrateJacobian().
+
+    WARNING: This is not a rigorous test of integrateJacobian()
+    because we neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    from pylith.topology.Jacobian import Jacobian
+    jacobian = Jacobian(fields)
+    jacobian.zero()
+    t = 7.3
+    self.assertEqual(True, integrator.needNewJacobian())
+    integrator.integrateJacobian(jacobian, t, fields)
+    self.assertEqual(False, integrator.needNewJacobian())
+    
+    # No test of result.
+    return
+
+
+  def test_poststep(self):
+    """
+    Test poststep().
+
+    WARNING: This is not a rigorous test of poststep() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    t = 7.3
+    dt = 0.1
+    totalTime = 23.0
+    integrator.poststep(t, dt, totalTime, fields)
+
+    # No test of result
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.feassemble.ElasticityExplicitLgDeform import integrator
+    i = integrator()
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _preinitialize(self):
+    """
+    Setup mesh and integrator and preinitialize integrator.
+    """
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    normalizer._configure()
+
+    # Setup mesh
+    cs = CSCart()
+    cs.inventory.spaceDim = 2
+    cs._configure()
+    from pylith.meshio.MeshIOAscii import MeshIOAscii
+    importer = MeshIOAscii()
+    importer.inventory.filename = "data/tri3.mesh"
+    importer.inventory.coordsys = cs
+    importer._configure()
+    mesh = importer.read(normalizer, debug=False, interpolate=False)
+
+    # Setup material
+    from pylith.feassemble.FIATSimplex import FIATSimplex
+    cell = FIATSimplex()
+    cell.inventory.shape = "triangle"
+    cell.inventory.degree = 1
+    cell.inventory.order = 1
+    cell._configure()
+    from pylith.feassemble.Quadrature import MeshQuadrature
+    quadrature = MeshQuadrature()
+    quadrature.inventory.cell = cell
+    quadrature._configure()
+    
+    from spatialdata.spatialdb.SimpleDB import SimpleDB
+    from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii
+    iohandler = SimpleIOAscii()
+    iohandler.inventory.filename = "data/elasticplanestrain.spatialdb"
+    iohandler._configure()
+    db = SimpleDB()
+    db.inventory.label = "elastic plane strain"
+    db.inventory.iohandler = iohandler
+    db._configure()
+
+    from pylith.materials.ElasticPlaneStrain import ElasticPlaneStrain
+    material = ElasticPlaneStrain()
+    material.inventory.label = "elastic plane strain"
+    material.inventory.id = 0
+    material.inventory.dbProperties = db
+    material.inventory.quadrature = quadrature
+    material._configure()
+    
+    from pylith.meshio.OutputMatElastic import OutputMatElastic
+    material.output = OutputMatElastic()
+    material.output._configure()
+    material.output.writer._configure()
+
+    # Setup integrator
+    integrator = ElasticityExplicitLgDeform()
+    integrator.preinitialize(mesh, material)
+    return (mesh, integrator)
+
+
+  def _initialize(self, mesh, integrator):
+    """
+    Initialize integrator.
+    """
+    dt = 2.3
+    
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    normalizer._configure()
+
+    from pyre.units.time import s
+    integrator.initialize(totalTime=0.0*s, numTimeSteps=1,
+                          normalizer=normalizer)
+    integrator.timeStep(dt)
+
+    # Setup fields
+    from pylith.topology.SolutionFields import SolutionFields
+    fields = SolutionFields(mesh)
+    fields.add("residual", "residual")
+    fields.add("disp(t+dt)", "displacement")
+    fields.add("disp(t)", "displacement")
+    fields.add("disp(t-dt)", "displacement")
+    fields.solutionName("disp(t+dt)")
+
+    residual = fields.get("residual")
+    residual.newSection(residual.VERTICES_FIELD, mesh.coordsys().spaceDim())
+    residual.allocate()
+    fields.copyLayout("residual")
+
+    residual.zero()
+    return fields
+
+
+# End of file 

Copied: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py (from rev 16093, short/3D/PyLith/branches/pylith-friction/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py)
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -0,0 +1,295 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py
+
+## @brief Unit testing of Python ElasticityImplicitLgDeform object.
+
+import unittest
+from pylith.feassemble.ElasticityImplicitLgDeform import ElasticityImplicitLgDeform
+
+from spatialdata.geocoords.CSCart import CSCart
+
+# ----------------------------------------------------------------------
+class TestElasticityImplicitLgDeform(unittest.TestCase):
+  """
+  Unit testing of Python ElasticityImplicitLgDeform object.
+  """
+
+  def test_implementsIntegrator(self):
+    """
+    Test to make sure ElasticityImplicitLgDeform satisfies integrator requirements.
+    """
+    integrator = ElasticityImplicitLgDeform()
+    from pylith.feassemble.Integrator import implementsIntegrator
+    self.failUnless(implementsIntegrator(integrator))
+    return
+    
+
+  def test_preinitialize(self):
+    """
+    Test preiniitlaize().
+
+    WARNING: This is not a rigorous test of preinitialize() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+
+    # No test of result.
+    return
+
+
+  def test_verifyConfiguration(self):
+    """
+    Test verifyConfiguration().
+
+    WARNING: This is not a rigorous test of verifyConfiguration()
+    because we neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    integrator.verifyConfiguration()
+
+    # No test of result.
+    return
+
+
+  def test_initialize(self):
+    """
+    Test initialize().
+
+    WARNING: This is not a rigorous test of initialize() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    # No test of result.
+    return
+
+
+  def test_timeStep(self):
+    """
+    Test timeStep().
+
+    WARNING: This is not a rigorous test of timeStep() because we
+    neither set the input fields or verify the results.
+    """
+    dt = 2.3
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+    integrator.timeStep(dt)
+
+    # No test of result.
+    return
+
+
+  def test_stableTimeStep(self):
+    """
+    Test stableTimeStep().
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    self.assertEqual(1.0e+30, integrator.stableTimeStep(mesh))
+    return
+
+
+  def test_needNewJacobian(self):
+    """
+    Test needNewJacobian().
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    self.assertEqual(True, integrator.needNewJacobian())
+    return
+
+
+  def test_useSolnIncr(self):
+    """
+    Test useSolnIncr().
+
+    WARNING: This is not a rigorous test of useSolnIncr() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    integrator.useSolnIncr(True)
+
+    # No test of result.
+    return
+
+
+  def test_integrateResidual(self):
+    """
+    Test integrateResidual().
+
+    WARNING: This is not a rigorous test of integrateResidual()
+    because we neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    residual = fields.get("residual")
+    t = 3.4
+    integrator.integrateResidual(residual, t, fields)
+
+    # No test of result.
+    return
+
+
+  def test_integrateJacobian(self):
+    """
+    Test integrateJacobian().
+
+    WARNING: This is not a rigorous test of integrateJacobian()
+    because we neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    from pylith.topology.Jacobian import Jacobian
+    jacobian = Jacobian(fields)
+    jacobian.zero()
+    t = 7.3
+    self.assertEqual(True, integrator.needNewJacobian())
+    integrator.integrateJacobian(jacobian, t, fields)
+    self.assertEqual(False, integrator.needNewJacobian())
+    
+    # No test of result.
+    return
+
+
+  def test_poststep(self):
+    """
+    Test poststep().
+
+    WARNING: This is not a rigorous test of poststep() because we
+    neither set the input fields or verify the results.
+    """
+    (mesh, integrator) = self._preinitialize()
+    fields = self._initialize(mesh, integrator)
+
+    t = 7.3
+    dt = 0.1
+    totalTime = 23.0
+    integrator.poststep(t, dt, totalTime, fields)
+
+    # No test of result
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.feassemble.ElasticityImplicitLgDeform import integrator
+    i = integrator()
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _preinitialize(self):
+    """
+    Setup mesh and integrator and preinitialize integrator.
+    """
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    normalizer._configure()
+
+    # Setup mesh
+    cs = CSCart()
+    cs.inventory.spaceDim = 2
+    cs._configure()
+    from pylith.meshio.MeshIOAscii import MeshIOAscii
+    importer = MeshIOAscii()
+    importer.inventory.filename = "data/tri3.mesh"
+    importer.inventory.coordsys = cs
+    importer._configure()
+    mesh = importer.read(normalizer, debug=False, interpolate=False)
+
+    # Setup material
+    from pylith.feassemble.FIATSimplex import FIATSimplex
+    cell = FIATSimplex()
+    cell.inventory.shape = "triangle"
+    cell.inventory.degree = 1
+    cell.inventory.order = 1
+    cell._configure()
+    from pylith.feassemble.Quadrature import MeshQuadrature
+    quadrature = MeshQuadrature()
+    quadrature.inventory.cell = cell
+    quadrature._configure()
+    
+    from spatialdata.spatialdb.SimpleDB import SimpleDB
+    from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii
+    iohandler = SimpleIOAscii()
+    iohandler.inventory.filename = "data/elasticplanestrain.spatialdb"
+    iohandler._configure()
+    db = SimpleDB()
+    db.inventory.label = "elastic plane strain"
+    db.inventory.iohandler = iohandler
+    db._configure()
+
+    from pylith.materials.ElasticPlaneStrain import ElasticPlaneStrain
+    material = ElasticPlaneStrain()
+    material.inventory.label = "elastic plane strain"
+    material.inventory.id = 0
+    material.inventory.dbProperties = db
+    material.inventory.quadrature = quadrature
+    material._configure()
+    
+    from pylith.meshio.OutputMatElastic import OutputMatElastic
+    material.output = OutputMatElastic()
+    material.output._configure()
+    material.output.writer._configure()
+
+    # Setup integrator
+    integrator = ElasticityImplicitLgDeform()
+    integrator.preinitialize(mesh, material)
+    return (mesh, integrator)
+
+
+  def _initialize(self, mesh, integrator):
+    """
+    Initialize integrator.
+    """
+    dt = 2.3
+    
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    normalizer._configure()
+
+    from pyre.units.time import s
+    integrator.initialize(totalTime=0.0*s, numTimeSteps=1,
+                          normalizer=normalizer)
+    integrator.timeStep(dt)
+
+    # Setup fields
+    from pylith.topology.SolutionFields import SolutionFields
+    fields = SolutionFields(mesh)
+    fields.add("residual", "residual")
+    fields.add("disp(t)", "displacement")
+    fields.add("dispIncr(t->t+dt)", "displacement_increment")
+    fields.solutionName("dispIncr(t->t+dt)")
+
+    residual = fields.get("residual")
+    residual.newSection(residual.VERTICES_FIELD, mesh.coordsys().spaceDim())
+    residual.allocate()
+    fields.copyLayout("residual")
+
+    residual.zero()
+    return fields
+
+
+# End of file 


Property changes on: short/3D/PyLith/trunk/unittests/pytests/feassemble/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in


Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.py	2009-12-09 20:49:26 UTC (rev 16093)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/testfeassemble.py	2009-12-10 01:52:12 UTC (rev 16094)
@@ -75,6 +75,12 @@
     from TestElasticityExplicit import TestElasticityExplicit
     suite.addTest(unittest.makeSuite(TestElasticityExplicit))
 
+    from TestElasticityImplicitLgDeform import TestElasticityImplicitLgDeform
+    suite.addTest(unittest.makeSuite(TestElasticityImplicitLgDeform))
+
+    from TestElasticityExplicitLgDeform import TestElasticityExplicitLgDeform
+    suite.addTest(unittest.makeSuite(TestElasticityExplicitLgDeform))
+
     return suite
 
 


Property changes on: short/3D/PyLith/trunk/unittests/pytests/materials
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/materials/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/meshio
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/meshio/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/mpi
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/problems
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/problems/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/topology
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/topology/data
___________________________________________________________________
Name: svn:ignore
   + Makefile.in



Property changes on: short/3D/PyLith/trunk/unittests/pytests/utils
___________________________________________________________________
Name: svn:ignore
   + Makefile.in




More information about the CIG-COMMITS mailing list