[cig-commits] r16999 - in short/3D/PyLith/branches/pylith-scecdynrup: . applications/utilities doc doc/install doc/install/Cluster_CIT-garuda doc/presentations doc/releasenotes doc/userguide doc/userguide/benchmarks doc/userguide/boundaryconditions doc/userguide/cover doc/userguide/extending doc/userguide/governingeqns doc/userguide/install doc/userguide/intro doc/userguide/materials doc/userguide/materials/figs doc/userguide/runpylith doc/userguide/tutorials doc/userguide/tutorials/3dhex8 doc/userguide/tutorials/3dhex8/figs doc/userguide/tutorials/shearwave doc/userguide/tutorials/shearwave/figs doc/userguide/tutorials/twohex8 doc/userguide/tutorials/twohex8/figs doc/userguide/tutorials/twoquad4 doc/userguide/tutorials/twoquad4/figs doc/userguide/tutorials/twotet4 doc/userguide/tutorials/twotet4/figs doc/userguide/tutorials/twotet4-geoproj doc/userguide/tutorials/twotet4-geoproj/figs doc/userguide/tutorials/twotri3 doc/userguide/tutorials/twotri3/figs examples examples/3d/hex8 examples/3d/hex8/spatialdb examples/3d/hex8/spatialdb/powerlaw examples/bar_shearwave/quad4 examples/twocells/twoquad4 examples/twocells/twotet4 examples/twocells/twotet4-geoproj libsrc/faults libsrc/feassemble libsrc/friction libsrc/meshio libsrc/problems libsrc/topology modulesrc/faults modulesrc/problems playpen/faultpc pylith/faults pylith/feassemble pylith/friction pylith/meshio pylith/problems pylith/topology templates/materials tests tests/2d tests/2d/maxwell tests/3d tests_auto/1d/line2 tests_auto/2d/quad4 tests_auto/2d/tri3 tests_auto/petsc unittests/libtests/faults unittests/libtests/faults/data unittests/libtests/friction unittests/libtests/topology unittests/pytests/faults unittests/pytests/faults/data unittests/pytests/feassemble

brad at geodynamics.org brad at geodynamics.org
Fri Jun 11 16:01:22 PDT 2010


Author: brad
Date: 2010-06-11 16:01:21 -0700 (Fri, 11 Jun 2010)
New Revision: 16999

Added:
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu/
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.sh
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/presentations/pylith1.5/
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover_small.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/friction/
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/gravity/
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/quasistatic/
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/static/
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/bar.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/bar.svg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/hex8deform30.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/hex8mesh.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4kinematic30.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4mesh.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4ratestateageing30.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4slipweakening30.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4staticfriction30.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tet4deform30.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tet4mesh.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tri3deform30.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tri3mesh.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/shearwave.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/output/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step13.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step14.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step15.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step16.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step17.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/meshing/
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/maxwell/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/slipdir/
   short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/matprops/
   short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/slipdir/
Removed:
   short/3D/PyLith/branches/pylith-scecdynrup/applications/utilities/pylith_vtktohdf5
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_Rocks-4.3-Intel64.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/uml/
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/qstatic-smalldef.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq1.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq10.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq11.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq12.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq13.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq14.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq15.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq16.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq17.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq18.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq19.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq2.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq20.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq21.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq22.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq23.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq24.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq25.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq26.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq3.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq4.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq5.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq6.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq7.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq8.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq9.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-inlineeq1.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-inlineeq2.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/pylith_cover.pdf
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/axialdisp.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/dislocation.eps
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/sheardisp.eps
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/dislocation.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/dislocation.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/figures/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity_istress.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/hex8-gravity.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/hex8-gravity_istress.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/hex8-mesh.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/savageprescott-t100.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/savageprescott.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/shear.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw_properties.spatialdb
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step02/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step13/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step14/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step15/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step16/
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step17/
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/TestAxialPlaneStrain.py
Modified:
   short/3D/PyLith/branches/pylith-scecdynrup/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/README
   short/3D/PyLith/branches/pylith-scecdynrup/TODO
   short/3D/PyLith/branches/pylith-scecdynrup/configure.ac
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda/sample.bash.tools
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/doc/install/README
   short/3D/PyLith/branches/pylith-scecdynrup/doc/presentations/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/components.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover.pdf
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover.svg.gz
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/materials.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/3dhex8.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/figs/hex8-mesh.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/hex8.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/quad4.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tet4.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tri3.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/figs/axialdisp.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/figs/dislocation.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/figs/sheardisp.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/twohex8.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/axialdisp.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/axialtract.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/dislocation.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/sheardispl.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/twoquad4.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4-geoproj/figs/dislocation.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/figs/axialdisp.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/figs/dislocation.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/twotet4.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/axialdisp.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/dislocation.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/sheardisp.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/twotri3.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/README
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_powerlaw.spatialdb
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw/powerlaw_gendb.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh
   short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/axialtract.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/twoquad4.mesh
   short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4-geoproj/twotet4.mesh
   short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4/twotet4.mesh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/BruneSlipFn.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/Fault.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Explicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Implicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Field.cc
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py
   short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/TimeHistorySlipFn.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/IntegratorElasticity.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLgDeform.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitLgDeform.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/topology/Distributor.py
   short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc
   short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.hh
   short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.i
   short/3D/PyLith/branches/pylith-scecdynrup/tests/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/1d/line2/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/petsc/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/data/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/Makefile.am
Log:
Merge from trunk (v1.5.0).

Modified: short/3D/PyLith/branches/pylith-scecdynrup/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -26,7 +26,10 @@
 	tests_auto
 endif
 
-DIST_SUBDIRS = $(SUBDIRS) examples tests_auto tests doc
+DIST_SUBDIRS = $(SUBDIRS) \
+	examples \
+	tests \
+	doc
 
 if ENABLE_DOCUMENTATION
   SUBDIRS += doc

Modified: short/3D/PyLith/branches/pylith-scecdynrup/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/README	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/README	2010-06-11 23:01:21 UTC (rev 16999)
@@ -32,9 +32,8 @@
 
 PyLith is under active development and we expect a number of additions
 and improvements in the near future. Likely enhancements will include
-additional constitutive models for both volume elements and cohesive
-(fault) elements and the generation of Green's functions to be used in
-inversions.
+additional bulk and fault constitutive models and the generation of
+Green's functions to be used in inversions.
 
 ======================================================================
 TIPS
@@ -47,63 +46,84 @@
       - Command line arguments
 
         --petsc.pc_type=asm
-        --petsc.ksp_max_it=100
-        --petsc.ksp_gmres_restart=50
+        --petsc.ksp_max_it=400
+        --petsc.ksp_gmres_restart=100
         --petsc.ksp_rtol=1.0e-08
 
       - pylithapp.cfg (or your other favorite .cfg file)
 
         [pylithapp.petsc]
         pc_type = asm
-        ksp_max_it = 200
-        ksp_gmres_restart = 50
+        ksp_max_it = 400
+        ksp_gmres_restart = 100
         ksp_rtol = 1.0e-08
 
-  * If the solve takes more than a few hundred iterations for a
-    large problem (use the --petsc.ksp_monitor=1 and
-    --petsc.ksp_view=1 to see diagnostic information for the
-    solver), this is an indication that something is wrong. Either
-    the preconditioner is inappropriate for the type of problem you
-    are solving or there is an error in the problem setup.
+  * If the solve takes more than a few hundred iterations for a large
+    problem (use the --petsc.ksp_monitor=1 and --petsc.ksp_view=1 to
+    see diagnostic information for the solver), this is usually an
+    indication that something is wrong. Either the preconditioner is
+    inappropriate for the type of problem you are solving or there is
+    an error in the problem setup.
 
 
 ======================================================================
 MIGRATING FROM VERSION 1.4 TO 1.5
 ======================================================================
 
-Two changes to the code require updating old parameters settings for use
+Three changes to the code require updating old parameters settings for use
 with version 1.5.
 
 (1) Recent releases of CUBIT include nodeset names in the Exodus file
 and PyLith now uses them to associate vertices with boundary
-conditions and faults. Use the netcdf utility ncdump to examine the
+conditions and faults. Use the NetCDF utility ncdump to examine the
 contents of the Exodus (.exo) file to see it it includes the variable
-ns_names. If it does use nodeset names rather than nodeset ids for
-boundary condition label properties. If your Exodus file does not
+ns_names. If it does, then use nodeset names rather than nodeset ids
+for boundary condition label properties. If your Exodus file does not
 contain nodeset names, then set the MeshIOCubit property
 use_nodeset_names to False to continue to use nodeset id values for
 boundary condition labels.
 
-(2) The power-law constitutive parameters have been changed in order
-to facilitate nondimensionalization. [CHARLES ADD SOME FURTHER
-EXPLANATION]
+(2) The power-law constitutive parameters have been changed so that the
+parameter units are no longer dependent on the power-law exponent. This
+is a more logical implementation and allows (among other things) users to
+vary power-law parameters using a spatial database. Previously, it was not
+possible to vary power-law parameters unless everything used the same
+power-law exponent. The new implementation uses reference-strain-rate,
+reference-stress, and power-law-exponent to describe the material. This is
+described in the 'Material Models' section of the manual.
 
+(3) The fault property 'normal_dir' is obsolete. Only the property
+'up_dir' is required to enforce that positive slip is left-lateral,
+reverse, and fault-opening for dipping faults in 2-D and horizontal
+fault surfaces in 3-D. Previously, in 2-D positive slip was always
+left-lateral, but now the up-direction is used to enforce positive
+slip corresponds to reverse motion for dipping faults. For horizontal
+fault surfaces in 3-D a normal of (0,0,1) is assumed in determining
+the up-dip direction.
+
 ----------------------------------------------------------------------
 Version 1.5.0
 ----------------------------------------------------------------------
 
   * Fault constitutive models
 
-    Added fault friction interface conditions with static
-    friction, linear slip-weakening friction, and rate- and
-    state-friction with the ageing law. The implementation can be used
-    in static, quasi-static, or dynamic problems.
+    Added fault friction interface conditions with static friction,
+    linear slip-weakening friction, and rate- and state-friction with
+    the ageing law. The implementation can be used in static,
+    quasi-static, and dynamic problems.
 
   * Drucker-Prager elastoplastic bulk rheology
 
-    Added a Drucker-Prager elastoplastic bulk rheology. [NEED SOME
-    WORDS FROM CHARLES]
+    Added a Drucker-Prager elastoplastic bulk rheology. This is a
+    perfect plasticity implementation (no hardening). This is a
+    nonlinear constitutive model, so the nonlinear solver is required
+    when this rheology is used. Refer to the 'Material Models' section
+    of the manual.
 
+  * Plane strain Maxwell viscoelastic bulk rheology
+
+    Linear Maxwell viscoelastic rheology for plane strain problems.
+
   * Finite-deformation formulation
 
     Added a finite-deformation (rigid body motion and small strains)
@@ -123,9 +143,8 @@
     Added optimized elasticity objects for the most popular cell types
     and basis functions (linear polynomials). For tri3 and tet4 cells
     with one quadrature point, the optimized implementations do not
-    use mapped cells to reduce the number of operations. For quad4 and
-    hex8 cells the optimized objects provide hardwired loop bounds
-    which can lead to faster performance for some compilers.
+    use reference (mapped) cells in order to reduce the number of
+    operations. 
 
   * Scientific notation for ASCII VTK files
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/TODO
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/TODO	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/TODO	2010-06-11 23:01:21 UTC (rev 16999)
@@ -2,130 +2,16 @@
 CURRENT ISSUES/PRIORITIES
 ======================================================================
 
-BINBOTS
-
-  need cygwin binbot
-
-  Add ML to petsc on all binbots (requires fortran compiler)
-
-top-level README [add fault preconditioner when done]
-  Need Charles to add some additional description
-
-release announcement [add fault preconditioner when done]
-
-DOC/INSTALL
-  Update MacBookPro
-    development, easy to switch among different versions of MPI and
-    test compatibility of newer versions of various package
-  Update linux
-  Add garuda, pangu
-    Clusters - dependencies and multiple versions of PyLith
-      (development and stable)
-
-MANUAL
-
-  Governing equations [Brad]
-
-  Mesher parameters [Charles]
-    Need outline of parameters to MeshImporter like other objects
-
-    MeshIOAscii
-    MeshIOLaGriT
-    MeshIOCubit
-      use_nodeset_names Flag for using nodeset names of ids.
-    reorder_mesh
-    distribution
-      partitioner
-
-  Small strain formulation [Brad]
-
-  Fault
-    governing equations [Brad]
-    dynamic rupture parameters [Brad]
-    fault constitutive models [Surendra]
-
-  Tutorials
-    3d/hex8 [Charles]
-    bar_shearwave [Brad]
-      kinematic
-      friction
-        static (stick, sliding)
-        dynamic (static, slip-weakening, rate-and-state)
-    meshgeneration [Charles]
-
-  Benchmarks
-    Update performance?
-    SCEC dynamic rupture benchmarks [Surendra]        
-    Savage-Prescott
-      change .cfg file to output velocities, update post-processing
-
-  Materials [Charles]
-    Are material models consistent with governing equations discussion?
-
-TUTORIALS/EXAMPLES
-  
-  3d/hex8
-    directory structure
-    1. Dirichlet BC (static)
-       simple shear w/axial compression (max horiz at 45 degrees)
-    2. Neumann BC (static)
-       remove Dirichlet BC on two sides and replace w/tractions
-    3. Earthquake rupture (static)
-       add fault slip w/greater slip at depth
-    4. Dirichlet BC (quasi-static)
-       constant velocity BC + MaxwellIsotropic3D (lower crust)
-    5. Dirichlet + Neumann (quasi-static)
-       constant velocity + time-dependent traction BC
-    6. Multiple earthquake rupture + creep (quasi-static)
-       fixed boundaries, w/multiple eq ruptures
-    7. Earthquake rupture + creep + Dirichlet BC (quasi-static)
-       mini savage-prescott
-    8. Add power-law rheology (quasi-static)
-       nonlinear solver
-    9. Replace power-law with Drucker-Prager elastoplastic
-       nonlinear solver
-   10. Static friction + Dirichlet BC (static)
-       stick, simple shear w/axial compression
-   11. Static friction + Dirichlet BC (static)
-       slip, simple shear w/axial compression
-   12. Static friction + Dirichlet BC (quasi-static)
-       slip, simple shear w/axial compression
-   13. Slip-weakening friction + Dirichlet BC (quasi-static)
-       slip, simple shear w/axial compression
-   14. Rate- and state-friction + Dirichlet BC (quasi-static)
-       slip, simple shear w/axial compression
-   15. Gravity
-   16. Gravity w/prestress
-   17. Gravity w/small strain
-
-  meshgeneration
-
-
-OTHER
-
-  Write up description of Savage and Prescott (1978) benchmark and
-  distribute to Greg Lyzenga and Jay Parker
-
-    Add time step information
-
-CODE
-
-  * Better preconditioning [Matt/Brad]
-
-    Diagonal preconditioner does not work very well. It looks like the
-    preconditioner needs off-diagonal terms consistent with the
-    coupling of the Lagrange multiplier constraints (sparsity pattern
-    matches the union of the matrices associated with the fault
-    meshes).
-
-    Need field split working for both SolverLinear and SolverNonlinear.
-
 ----------------------------------------------------------------------
 SECONDARY PRIORITIES
 ----------------------------------------------------------------------
 
-* Output to VTK XML files w/data values as binary
+* Better preconditioning [Matt/Brad]
 
+  Need field split working for both SolverLinear and SolverNonlinear.
+
+* Output to HDF5 files.
+
 * Uniform global refinement for tets with faults
 
 * Cleanup
@@ -179,6 +65,12 @@
   Make fault nucleation (initial tractions) modular (allow space/time
   variation).
 
+* Lumped elasticity formulation for large deformations
+
+* Manual
+
+  Are material models consistent with governing equations discussion?
+
 ----------------------------------------------------------------------
 CLEANUP
 ----------------------------------------------------------------------

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/applications/utilities/pylith_vtktohdf5
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/applications/utilities/pylith_vtktohdf5	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/applications/utilities/pylith_vtktohdf5	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,142 +0,0 @@
-#!/usr/bin/env nemesis
-#
-# ======================================================================
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-#
-
-# This script combines VTK files written by PyLith into a single HDF5
-# file. The filenames must be of the pattern [name]_t[number].vtk and
-# follow the usual VTK conventions for files with time slices.  Usage:
-# pylith_vtktohdf5 [--verbose] [--filename=FILE]
-
-__requires__ = "PyLith"
-
-
-# ======================================================================
-class ConvertApp(object):
-  """
-  Application for combining VTK files into a single HDF5 file.
-  """
-
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="pylith_vtktohdf5"):
-    """
-    Constructor.
-    """
-    self.verbose = False
-    self.filename = ""
-    return
-
-
-  def main(self, *args, **kwds):
-    """
-    Main entry point for application.
-    """
-
-    reader = VTKDataReader()
-    filenames = self._getFilenames()
-    self.h5 = ()
-
-    nsteps = len(filenames)
-    assert(nsteps > 0)
-
-    # Initial time step
-    if self.verbose:
-      print "Reading data from VTK file '%s'." % filenames[0]
-    data = reader.read(filenames[0])
-    self._writeVertices(data['vertices'])
-    self._writeCells(data['cells'])
-    self._setupGroups(nsteps, data['vertex_fields'], data['cell_fields'])
-    self._writeVertexFields(data['vertex_fields'])
-    self._writeVellFields(data['cell_fields'])
-
-    # Time steps
-    for istep in xrange(nsteps):
-      if self.verbose:
-        print "Reading data from VTK file '%s'." % filenames[0]
-      data = reader.read(filenames[istep])
-      self._writeVertexFields(data['vertex_fields'])
-      self._writeCellFields(data['cell_fields'])
-      
-    h5.close()
-   
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _getFilenames(self):
-    """
-    Get filenames with same pattern as provided filename but different time stamps.
-    """
-    filenames = []
-    return filenames
-
-
-  def _setupGroups(self, data):
-    """
-    Setup groups in HDF5 file.
-    """
-    return
-
-
-  def _writeVertices(self, data):
-    """
-    Write vertices to HDF5 file.
-    """
-    return
-
-
-  def _writeCells(self, data):
-    """
-    Write cells to HDF5 file.
-    """
-    return
-
-
-  def _writeVertexFields(self, data):
-    """
-    Add vertex fields at current time slice to HDF5 file.
-    """
-    return
-
-
-  def _writeCellFields(self, data):
-    """
-    Add cell fields at current time slice to HDF5 file.
-    """
-    return
-
-
-# ----------------------------------------------------------------------
-if __name__ == "__main__":
-
-  usage = "%prog [--verbose] [--file=FILE]"
-  from optparse import OptionParser
-  parser = OptionParser(usage=usage)
-  parser.add_option("-v", "--verbose", dest="verbose",
-                    action="store_true", default=False,
-                    help="Print verbose output.")
-  parser.add_option("-o", "--file", dest="filename",
-                    type="string", metavar="FILE",
-                    help="Read data file files matching FILE.",
-                    default="")
-  (options, args) = parser.parse_args()
-  if options.filename == "":
-    raise IOError("No input provided. Specify a file using the --file command "
-                  "line argument.")
-
-  app = ConvertApp()
-  app.verbose = options.verbose
-  app.filename = options.filename
-  app.main()
-
-
-# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/configure.ac
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/configure.ac	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/configure.ac	2010-06-11 23:01:21 UTC (rev 16999)
@@ -290,10 +290,14 @@
 		tests_auto/2d/Makefile
 		tests_auto/2d/tri3/Makefile
 		tests_auto/2d/quad4/Makefile
-		tests_auto/3dnew/hex8/Makefile
 		tests_auto/petsc/Makefile
 		tests/Makefile
-		playpen/closure/Makefile
+		tests/2d/Makefile
+		tests/2d/maxwell/Makefile
+		tests/2d/slipdir/Makefile
+		tests/3d/Makefile
+		tests/3d/matprops/Makefile
+		tests/3d/slipdir/Makefile
                 doc/Makefile
 		doc/developer/Makefile
 		doc/install/Makefile
@@ -307,6 +311,7 @@
 		examples/twocells/Makefile
 		examples/3d/tet4/Makefile
 		examples/3d/hex8/Makefile
+		examples/3d/hex8/output/Makefile
 		examples/bar_shearwave/hex8/Makefile
 		examples/bar_shearwave/hex8/output/Makefile
 		examples/bar_shearwave/quad4/Makefile
@@ -324,6 +329,13 @@
 		examples/twocells/twotet4/Makefile
 		examples/twocells/twotet4-geoproj/Makefile
 		examples/twocells/twotri3/Makefile
+		examples/meshing/Makefile
+		examples/meshing/surface_nurbs/Makefile
+		examples/meshing/surface_nurbs/contours/Makefile
+		examples/meshing/surface_nurbs/contours/journal/Makefile
+		examples/meshing/surface_nurbs/dem/Makefile
+		examples/meshing/surface_nurbs/dem/ulines/Makefile
+		examples/meshing/surface_nurbs/dem/vlines/Makefile
 		templates/Makefile
 		share/Makefile
 		])

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda/sample.bash.tools
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda/sample.bash.tools	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda/sample.bash.tools	2010-06-11 23:01:21 UTC (rev 16999)
@@ -44,7 +44,7 @@
 export PETSC_ARCH=${TOOLS_FORMAT}_opt
 
 # PyLith development version
-export PYLITHDEV_DIR=/home/baagaard/pylith-dev/${TOOLS_FORMAT}
-export LD_LIBRARY_PATH=${PYLITHDEV_DIR}/lib:${LD_LIBRARY_PATH}
-export PYTHONPATH=${PYLITHDEV_DIR}/lib/python${PYTHON_VERSION}/site-packages:${PYTHONPATH}
-PATH=${PYLITHDEV_DIR}/bin:${PATH}
+export PYLITH_DIR=/home/baagaard/pylith-dev/${TOOLS_FORMAT}
+export LD_LIBRARY_PATH=${PYLITH_DIR}/lib:${LD_LIBRARY_PATH}
+export PYTHONPATH=${PYLITH_DIR}/lib/python${PYTHON_VERSION}/site-packages:${PYTHONPATH}
+PATH=${PYLITH_DIR}/bin:${PATH}

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,29 +1,317 @@
-Python
-  http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz
+======================================================================
+INSTRUCTIONS FOR INSTALLING PYLITH ON THE CALTECH LINUX CLUSTER GARUDA
+ ======================================================================
 
-cppunit
+These installation instructions assume suitable C/C++ and Fortran
+compilers have been installed along with MPI. MPI on clusters is often
+hardware dependent and should be installed by system
+administrators. We also assume that GNU autoconf tools and subversion
+have been installed.
 
-proj.4
+We install development versions of the CIG software. Installing using
+source tarballs is easy, simply replace downloading from the source
+repository and running autoreconf with downloading and unpacking the
+tarball.
 
-FIAT
+To make things easier, I create environment variables TOOLS_DIR,
+PYLITH_DIR, TOOLS_FORMAT, and PYTHON_VERSION. The TOOLS_FORMAT variable
+makes it easier to maintain multiple copies of packages built with
+different options (e.g., different compilers and different levels of
+optimization). Note that the python version should match the version
+of Python you will be using. If you don't know the version of python,
+run "python --version".
 
-swig
+See the files in the Cluster_CIT-garduda directory for the settings
+used to setup the environment variables using the bash shell. The
+$TOOLS_FORMAT environment variable is used to differentiate between
+packages built with different compilers and/or different optimization
+settings. In this case, TOOLS_FORMAT is intel-10.1. Because this is a
+cluster the tools are built for production runs using
+high-optimization level. You should setup your environment BEFORE
+building the packages.
 
-pythia
+Source files
 
-netcdf
+  Source files are placed under $HOME/src/PACKAGE.
 
-numpy
+Build directories
 
-spatialdata
+  Packages supporting building in separate directories are built in
+  $HOME/scratch/build/$TOOLS_FORMAT.
 
-mercurial
+Install directorires
 
-PETSc
+  Packages are installed in $HOME/tools/$TOOLS_FORMAT. PyLith is
+  installed in $HOME/pylith-dev/$TOOLS_FORMAT since we may want both
+  the development version and stable releases of PyLith installed.
 
-nemesis
 
-PyLith
+1. Python (http://www.python.org)
 
+  Download and unpack the tarball.
+    cd $HOME/src/python-2.6.5
+    wget http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz
+    tar -zxvf Python-2.6.5.tgz
 
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/python-2.6
+    $HOME/src/python-2.6/Python-2.6.5/configure --prefix=${TOOLS_DIR} --enable-shared CC=icc CXX=icpc CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC"
 
+  Run "make" and "make install".
+    make
+    make install
+
+  Test Python
+    python
+
+  You should get the Python prompt and see the correct version and
+  time of the build.
+
+
+2. cppunit
+
+  Download and unpack the tarball.
+    cd $HOME/src/cppunit-1.12.1
+    wget http://downloads.sourceforge.net/cppunit/cppunit-1.12.1.tar.gz
+    tar -zxvf cppunit-1.12.1.tar.gz
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/cppunit-1.12.1
+    $HOME/src/cppunit-1.12.1/cppunit-1.12.1/configure --prefix=${TOOLS_DIR} CC=icc CXX=icpc
+  
+  Run "make" and "make install"
+    make
+    make install
+
+
+3. proj.4
+
+  Download and unpack the tarball and horizontal datum files.
+    cd $HOME/src/proj-4.7.0
+    wget   http://download.osgeo.org/proj/proj-4.7.0.tar.gz
+    wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip
+    tar -zxvf proj-4.7.0.tar.gz
+    cd proj-4.7.0/nad
+    unzip ../../proj-datumgrid-1.5.zip
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/proj-4.7.0
+    $HOME/src/proj-4.7.0/proj-4.7.0/configure --prefix=${TOOLS_DIR} CC=icc CFLAGS="-O3 -fPIC"
+
+  Unpack the datum files in the nad directory of the build.
+    cd nad
+    unzip $HOME/src/proj-4.7.0/proj-datumgrid-1.5.zip
+
+  Run "make" and "make install".
+    make
+    make install
+
+  Make sure the $HOME/tools/$TOOLS_FORMAT/share/proj contrains
+  "conus", "alaska", "nad27", and "nad83" among the other files.
+
+
+4. FIAT (version 0.3.5 is the most recent version known to work)
+
+  Depends on Python.
+
+  Download and unpack the tarball.
+    cd $HOME/src/fiat-0.3.5
+    wget http://www.fenics.org/pub/software/fiat/FIAT-0.3.5.tar.gz
+
+  Install using python.
+    cd FIAT-0.3.5
+    python setup.py install --prefix=$TOOLS_DIR
+
+  Test
+    python
+    import FIAT
+
+
+5. swig
+
+  Depends on Python.
+
+  Download and unpack the tarball.
+    cd $HOME/src/swig-1.3.40
+    wget http://downloads.sourceforge.net/project/swig/swig/swig-1.3.40/swig-1.3.40.tar.gz
+    tar -zxvf swig-1.3.40.tar.gz
+
+  Run configure in the build directory.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/swig-1.3.40
+    $HOME/src/swig-1.3.40/swig-1.3.40/configure --prefix=${TOOLS_DIR} --with-python=`which python` --without-python3 CC=icc CXX=icpc CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC"
+
+  Run "make" and "make install".
+    make
+    make install
+
+
+6. netcdf
+
+  Download and unpack the tarball.
+    cd $HOME/src/netcdf-4.1.1
+    wget http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.1.tar.gz
+    tar -zxvf netcdf-4.1.1.tar.gz
+
+  Run configure in the build directory.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/netcdf-4.1.1
+    $HOME/src/netcdf-4.1.1/netcdf-4.1.1/configure --prefix=${TOOLS_DIR} --enable-shared CC=icc CXX=icpc FC=ifort F77=ifort CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" FFLAGS="-O2 -fPIC" FCFLAGS="-O2 -fPIC"
+
+  Run "make" and "make install".
+    make
+    make install
+
+
+7. pythia
+
+  Depends on Python.
+
+  Check out pythia from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/cs/pythia/trunk pythia
+
+  Install using python.
+    cd pythia
+    python setup.py install --prefix=$TOOLS_DIR
+
+  Test
+    python
+    import pyre
+
+
+8. numpy
+
+  Depends on Python and math libraries.
+
+  Download and unpack the tarball.
+    cd $HOME/src/numpy-1.4.1
+    wget http://downloads.sourceforge.net/project/numpy/NumPy/1.4.1/numpy-1.4.1.tar.gz
+    
+  Edit the site.cfg file to use the Intel MKL library. If you don't
+  have the Intel MKL library, then use the system BLAS/LAPACK. These
+  settings differ among MKL releases.
+    [mkl]
+    library_dirs = /opt/intel/mkl/10.0.1.014/lib/em64t/
+    lapack_libs = mkl_lapack
+    mkl_libs = mkl, guide
+
+  Install using python.
+    cd numpy-1.4.1
+    python setup.py install --prefix=$TOOLS_DIR
+
+  Test
+    python
+    import numpy
+    import numpy.linalg
+
+  Note: If the build or install fails and you change the site.cfg
+  file, then you may need to remove the build directory in
+  $HOME/src/numpy-1.4.1/numpy-1.4.1 before rebuilding to insure the
+  old build files are not used.
+
+
+9. spatialdata
+
+  Depends on Python, SWIG, numpy, pythia, proj.4.
+
+  Check out spatialdata from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/cs/spatialdata-0.1/trunk spatialdata-dev
+    cd spatialdata-dev
+    autoreconf -if
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/spatialdata-dev
+    ${HOME}/src/spatialdata/configure  --config-cache  --enable-swig --enable-testing --enable-pythia  --prefix=${TOOLS_DIR}  CPPFLAGS="-I${TOOLS_DIR}/include -DNDEBUG"  LDFLAGS="-L${TOOLS_DIR}/lib " CC=icc CXX=icpc CFLAGS="-O3 -fPIC" CXXFLAGS="-O3 -fPIC"
+
+  Edit libtool to fix Intel build issue.
+    Comment out setting postdep_objects.
+
+  Run "make" and "make install".
+    make
+    make install
+
+  Test
+    make check
+
+
+10. mercurial
+
+  Depends on Python.
+
+  Download and unpack the mercurial tarball.
+    cd $HOME/src/mercurial-1.5.2
+    wget http://mercurial.selenic.com/release/mercurial-1.5.2.tar.gz
+    tar -zxvf mercurial-1.5.2.tar.gz
+
+  Install using python.
+    cd mercurial-1.5.2
+    python setup.py install --prefix=$TOOLS_DIR
+  
+
+11. PETSc
+
+  Depends on MPI, Python, math libraries.
+
+  Checkout the development version of PETSc.
+    cd $HOME/src
+    hg clone http://petsc.cs.iit.edu/petsc/petsc-dev
+    cd petsc-dev/config
+    hg clone http://petsc.cs.iit.edu/petsc/BuildSystem BuildSystem
+
+  Run configure in the *source* directory.
+    cd $HOME/src/petsc-dev
+    config/configure.py --PETSC_ARCH=${TOOLS_FORMAT}_opt --with-debugging=0 --with-clanguage=c++ --with-mpi-compilers=1 --with-shared=1 --with-dynamic=1 --with-64-bit-points=1 --with-large-file-io=1 --with-blas-lib=[/opt/intel/mkl/10.0.1.014/lib/em64t/libmkl.so,/opt/intel/mkl/10.0.1.014/lib/em64t/libguide.so] --with-lapack-lib=/opt/intel/mkl/10.0.1.014/lib/em64t/libmkl_lapack.so --with-lgrind=0 --with-chaco=1 --download-chaco=1 --with-parmetis=1 --download-parmetis=1 --with-sieve=1 --with-boost=1 --download-boost=1 --with-ml=1 --download-ml=1
+
+  Run "make" and "make test"
+    make
+
+  "make test" may fail if the cluster is not setup to run MPI jobs on
+  the login node. However, the code test examples should build.
+
+
+12. nemesis
+
+  Depends on Python, MPI, pythia.
+
+  Check out nemesis from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/cs/nemesis/trunk nemesis-dev
+    cd nemesis-dev
+    autoreconf -if
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/nemesis-dev
+    $HOME/src/nemesis-dev/configure --prefix=${TOOLS_DIR}
+
+ Run "make" and "make install".
+    make
+    make install
+
+  Test
+    nemesis
+    import mpi
+
+  Running nemesis should startup Python. Nemesis is an MPI wrapper around Python.
+  
+ 
+13. PyLith (finally!)
+
+    Depends on all of the above.
+
+    Check out PyLith from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/short/3D/PyLith/trunk pylith-dev
+    cd pylith-dev
+    autoreconf -if
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/pylith-dev
+    ${HOME}/src/pylith-dev/configure  --config-cache  --enable-swig --enable-testing --enable-cubit --prefix=${PYLITH_DIR}  CPPFLAGS="-I${TOOLS_DIR}/include -NDEBUG"  LDFLAGS="-L${TOOLS_DIR}/lib "  CC=mpicc CXX=mpiCC  CFLAGS="-O3 -fPIC" CXXFLAGS="-O3 -fPIC"
+
+ Run "make" and "make install".
+    make
+    make install
+
+  Test
+    make check
+

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu (from rev 16998, short/3D/PyLith/trunk/doc/install/Cluster_CIT-pangu)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt	2010-06-11 23:01:21 UTC (rev 16999)
@@ -2,354 +2,44 @@
 INSTRUCTIONS FOR INSTALLING PYLITH ON THE CALTECH LINUX CLUSTER PANGU
 ======================================================================
 
-/opt/openmpi/1.4.2/intel
-/opt/intel/Compiler/11.1/072/
-/opt/intel/Compiler/11.1/072/mkl/lib
+These instructions are nearly identical to those in
+Cluster_CIT-garuda.txt. As a result, we only mention those settings
+which differ.
+ 
+See the files in the Cluster_CIT-pangu directory for the settings used
+to setup the environment variables using the bash shell. The
+$TOOLS_FORMAT environment variable is used to differentiate between
+packages built with different compilers and/or different optimization
+settings. In this case, TOOLS_FORMAT is intel-11.1. Because this is a
+cluster the tools are built for production runs using
+high-optimization level. You should setup your environment BEFORE
+building the packages.
 
-Python
-  http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz
+We use the Intel 11.1 compiler and MKL math libraries. These are in
+  /opt/intel/Compiler/11.1/072/
+  /opt/intel/Compiler/11.1/072/mkl/lib
 
-cppunit
-  http://downloads.sourceforge.net/cppunit/cppunit-1.12.1.tar.gz
+We use OpenMPI version 1.4.2 installed in
+  /opt/openmpi/1.4.2/intel
 
-proj.4
-  http://download.osgeo.org/proj/proj-4.7.0.tar.gz
-  http://download.osgeo.org/proj/proj-datumgrid-1.5.zip
 
-FIAT
-  http://www.fenics.org/pub/software/fiat/FIAT-0.3.5.tar.gz
+netcdf
 
-swig
-  http://downloads.sourceforge.net/project/swig/swig/swig-1.3.40/swig-1.3.40.tar.gz?use_mirror=voxel
+  Run configure w/netcdf-4 disabled.
 
-pythia
-  svn co http://geodynamics.org/svn/cig/cs/pythia/trunk pythia
+    $HOME/src/netcdf-4.1.1/netcdf-4.1.1/configure --prefix=${TOOLS_DIR} --enable-shared --disable-netcdf-4 CC=icc CXX=icpc FC=ifort F77=ifort CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" FFLAGS="-O2 -fPIC" FCFLAGS="-O2 -fPIC"
 
-netcdf
-  http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.1.tar.gz
 
 numpy
-  http://downloads.sourceforge.net/project/numpy/NumPy/1.4.1/numpy-1.4.1.tar.gz?use_mirror=hivelocity
 
-spatialdata
-  svn co http://geodynamics.org/svn/cig/cs/spatialdata-0.1/trunk spatialdata-dev
-  Comment out postdep_objects (bug in ifort)
+  Edit site.cfg to use the Intel KML library version 11.1.
+    [mkl]
+    library_dirs = /opt/intel/Compiler/11.1/072/mkl/lib/em64t
+    lapack_libs = mkl_lapack
+    mkl_libs = mkl_core, mkl_intel_thread, guide
 
-mercurial
-  http://mercurial.selenic.com/release/mercurial-1.5.2.tar.gz
-
 PETSc
-  hg clone http://petsc.cs.iit.edu/petsc/petsc-dev
-  cd petsc-dev/config
-  hg clone http://petsc.cs.iit.edu/petsc/BuildSystem BuildSystem
 
-nemesis
-  svn co http://geodynamics.org/svn/cig/cs/nemesis/trunk nemesis-dev  
+  Run configure and use Intel MKL library version 11.1.
 
-PyLith
-  svn co http://geodynamics.org/svn/cig/short/3D/PyLith/trunk pylith-dev
-
-I place applications that are rarely updated in $HOME/tools. For CIG
-source code, I separate the source code, build directories, and
-installed code. The source code sits in $HOME/src/cig, I build the
-packages under $HOME/scratch/build/cig, and install the packages to
-$HOME/tools/cig.
-
-I use the bash shell and place all software package environment
-variables in a .bash.tools file that is read by the .bashrc file.
-
-On an x86_64 system it is important to keep files associated with a
-32-bit architecture separate from those associated with a 64-bit
-architecture. Some architecture independent files are put in
-$PREFIX/lib with 64-bit architecture files in $PREFIX/lib64. In most
-cases when a library with versions for both architectures is
-available, the linker will use the one compatible with the requested
-architecture (the default is usually the 64-bit architecture).
-
-To make things easier, I create environment variables TOOLS_DIR,
-CIG_DIR, TOOLS_FORMAT, and PYTHON_VERSION. The TOOLS_FORMAT variable
-makes it easier to maintain multiple copies of packages built with
-different options (e.g., different compilers and different levels of
-optimization). Note that the python version should match the version
-of Python you will be using. If you don't know the version of python,
-run "python --version".
-
-  export TOOLS_DIR=${HOME}/tools
-  export TOOLS_FORMAT=gcc-3.4_64
-  export PYTHON_VERSION=2.5
-
-  export CIG_DIR=${HOME}/tools/cig/${TOOLS_FORMAT}
-  export CIG_INCDIR=${CIG_DIR}/include
-  export CIG_LIBDIR=${CIG_DIR}/lib
-  export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CIG_LIBDIR}
-  export PYTHONPATH=${PYTHONPATH}:${CIG_DIR}/lib64/python${PYTHON_VERSION}/site-packages:${CIG_DIR}/lib/python${PYTHON_VERSION}/site-packages
-  PATH=${CIG_DIR}/bin:$PATH
-
-2. Adjust your environment to use Python 2.5 instead of Python 2.3.
-
-  Python 2.3 contains bugs that prevent its full functionality on a
-  x86_64 system.
-
-  a. Create directory $TOOLS_DIR/python2.5.
-
-  b. Create a bin subdirectory.
-
-  c. Create a symbolic link for the python2.5 executable.
-
-     ln -s /usr/bin/python2.5 $TOOLS_DIR/python2.5/bin/python
-
-  d. Create symbolic links for the other python2.5 directories.
-
-     ln -s /usr/lib/python2.5 $TOOLS_DIR/python2.5/lib
-     ln -s /usr/lib64/python2.5 $TOOLS_DIR/python2.5/lib64
-     ln -s /usr/include/python2.5 $TOOLS_DIR/python2.5/include
-
-  e. Setup environment variables.
-
-  PATH=${TOOLS_DIR}/python$PYTHON_VERSION/bin:${PATH}
-  export PYTHON_DIR=${TOOLS_DIR}/python$PYTHON_VERSION/lib
-  export PYTHON_LIBDIR=${TOOLS_DIR}/python$PYTHON_VERSION/lib64
-  export PYTHON_INCDIR=${TOOLS_DIR}/python$PYTHON_VERSION/include
-
-3. Install mercurial (http://www.selenic.com/mercurial/wiki/)
-
-  a. Untar the source code.
-
-  b. Install the package.
-
-    python setup.py install --prefix=$TOOLS_DIR/mercurial-1.4.3/${TOOLS_FORMAT}
-
-  c. Set environment variables.
-
-    MERCURIAL_DIR=${TOOLS_DIR}/mercurial-1.4.3/${TOOLS_FORMAT}
-    PATH=${PATH}:${MERCURIAL_DIR}/bin
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MERCURIAL_DIR}/lib
-    export PYTHONPATH=${PYTHONPATH}:${MERCURIAL_DIR}/lib/python${PYTHON_VERSION}/site-packages
-
-4. Setup environment variables for MPICH2 (http://www.mcs.anl.gov/research/projects/mpich2/)
- 
- b. Set environment variables.
-
-    export RSHCOMMAND=ssh
-    export MPI_DIR=/opt/mpich/myrinet/gnu
-    PATH=$MPI_DIR/bin:$PATH
-    export MANPATH=$MPI_DIR/man:$MANPATH
-    export MPI_INCDIR=$MPI_DIR/include
-    export MPI_LIBDIR=$MPI_DIR/lib
-    export LD_LIBRARY_PATH=${MPI_LIBDIR}:${LD_LIBRARY_PATH}
-    export MPI_VERSION=2
-
-5. Install ParMetis (http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview)
-
-  a. Untar the source and edit the Makefile.
-  b. Set the CC, COPTIONS, INCDIR, LD, and LIBDIR variables.
-
-    CC = gcc
-    COPTIONS = -fPIC
-    INCDIR = -I${MPI_INCDIR}
-    LD = gcc
-    LIBDIR = -L${MPI_LIBDIR} -lmpich -lpthread -lrt
-
-  c. Run make. Make sure libraries are created libmetis.a and
-  libparmetis.a. Don't worry about errors when attempting to create
-  any executables.
-
-  d. Create library and include directories by hand.
-
-    mkdir -p ${TOOLS_DIR}/parmetis-3.1/$TOOLS_FORMAT/lib ${TOOLS_DIR}/parmetis-3.1/$TOOLS_FORMAT/include
-
-  e. Create shared libraries by hand.
-
-    cd ${TOOLS_DIR}/parmetis-3.1/${TOOLS_FORMAT}/lib
-    mkdir tmp
-    cd tmp
-    ar -x ../libmetis.a
-    gcc -o ../libmetis.so -shared *.o
-    rm *.o
-    ar -x ../libparmetis.a
-    gcc -o ../libparmetis.so -shared *.o
-    rm *.o
-    cd ..
-    rmdir tmp
-
-  d. Copy parmetis.h to the install location.
-
-    cp parmetis.h ${TOOLS_DIR}/parmetis-3.1/${TOOLS_FORMAT}/include/
-
-  e. Set environment variables.
-
-    PARMETIS_DIR=$TOOLS_DIR/parmetis-3.1/${TOOLS_FORMAT}
-    export PARMETIS_INCDIR=$PARMETIS_DIR/include
-    export PARMETIS_LIBDIR=$PARMETIS_DIR/lib
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PARMETIS_LIBDIR}
-
-6. Install cppunit (http://cppunit.sourceforge.net/cppunit-wiki)
-
-  a. Untar the source and run configure, build, and install.
-
-    ./configure --prefix=${TOOLS_DIR}/cppunit-1.10.2/${TOOLS_FORMAT}
-    make
-    make install
-
-  b. Set environment variables.
-
-    CPPUNIT_DIR=${TOOLS_DIR}/cppunit-1.10.2/${TOOLS_FORMAT}
-    PATH=${PATH}:${CPPUNIT_DIR}/bin
-    export CPPUNIT_LIBDIR=${CPPUNIT_DIR}/lib
-    export CPPUNIT_INCDIR=${CPPUNIT_DIR}/include
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CPPUNIT_LIBDIR}
-
-7. Install FIAT (http://www.fenics.org/wiki/FIAT)
-
-  a. Install FIAT.
-
-    python setup.py install --prefix=$TOOLS_DIR/fiat-0.3.1/${TOOLS_FORMAT}
-
-  b. Set environment variables.
-
-    FIAT_DIR=${TOOLS_DIR}/fiat-0.3.3/${TOOLS_FORMAT}
-    export PYTHONPATH=${PYTHONPATH}:${FIAT_DIR}/lib/python${PYTHON_VERSION}/site-packages
-
-8. Install the development version of PETSc
-  (http://www-unix.mcs.anl.gov/petsc/petsc-as/)
-
-  a. Clone the source repository.
-
-    hg clone http://petsc.cs.iit.edu/petsc/petsc-dev
-    cd petsc-dev/config
-    hg clone http://petsc.cs.iit.edu/petsc/BuildSystem BuildSystem
- 
-  b. Set PETSC_ARCH and PETSC_DIR environment variables.
-
-    export PETSC_DIR=${TOOLS_DIR}/petsc-dev
-    export PETSC_ARCH=linux_${TOOLS_FORMAT}_opt
-
-  c. Configure PETSc, build, and test.
-
-    ARCH_FLAGS="--PETSC_ARCH=linux_${TOOLS_FORMAT}_opt --with-debugging=no"
-    LANG_FLAGS="--with-clanguage=c++"
-    BUILD_FLAGS="--with-mpi-compilers=0 --with-gnu-compilers=1 --with-shared=1 --with-dynamic=1 --with-64-bit-points=1 --with-large-file-io=1 --CC=gcc --CXX=g++ --FC=g77 --F77=g77"
-    MPI_FLAGS="--with-mpi-dir=${TOOLS_DIR}/mpich2-1.0.4p1/gcc-3.4_64 --with-mpi-shared=0"
-    LIBS=""
-    OPTIONS="--with-lgrind=0 --download-tetgen"
-    PART_FLAGS="--with-chaco=1 --download-chaco=1 --with-parmetis=1 --with-parmetis-dir=${TOOLS_DIR}/parmetis-3.1/gcc-3.4_64"
-    SIEVE_FLAGS="--with-sieve=1 --with-boost=1 --download-boost=1"
-    config/configure.py ${ARCH_FLAGS} ${LANG_FLAGS} ${BUILD_FLAGS} --with-blas-lapack-lib="-L${ACML_LIBDIR} -lacml -lacml_mv" ${MPI_FLAGS} --LIBS="" ${OPTIONS} ${PART_FLAGS} ${SIEVE_FLAGS}
-    make
-    make test
-
-9. Install SWIG (http://www.swig.org/)
-
-  a. Untar and install.
-
-    tar -zxvf swig.1.3.39.tgz
-    configure --prefix=${TOOLS_DIR}/swig-1.3.39/${TOOLS_FORMAT}
-    make
-    make install
-
-  b. Update environment variables.
-
-    SWIG_DIR=${TOOLS_DIR}/swig-1.3.39/${TOOLS_FORMAT}
-    PATH=${PATH}:${SWIG_DIR}/bin
-
-10. Install pythia.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/cs/pythia/trunk pythia
-
-  b. Install the software.
-
-    python setup.py install --prefix=${CIG_DIR}
-
-  c. Set environment variables.
-
-    export PYTHIA_INCDIR=${CIG_INCDIR}/pythia-0.8
-
-11. Install nemesis.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/cs/nemesis/trunk nemesis
-
-  b. Create the configure script.
-
-    autoreconf -if
-
-  c. Run configure, build, and install.
-
-    ./configure  --prefix=${CIG_DIR} CPPFLAGS="-I${CIG_INCDIR} -I${MPI_INCDIR}"  LDFLAGS="-L${CIG_LIBDIR} -L${MPI_LIBDIR} -L${PVFS2_LIBDIR}"  LIBS="-lpvfs2 -lssl -lpthread -lrt"  CC=gcc CXX=g++ FC=g77 F77=g77
-    make
-    make install
-
-12. Install PROJ.4 (http://trac.osgeo.org/proj/)
-
-  a. Download the source code AND the datum shifts (proj-datumgrid-1.3.zip).
-
-  b. Untar the source code and unzip the datum shifts in the nad directory.
-
-  c. Run configure and build.
-
-    ./configure  --prefix=${TOOLS_DIR}/proj-4.5.0/${TOOLS_FORMAT}  CC=gcc CXX=g++ FC=g77 F77=f77
-    make
-    make install
-
-  d. Set environment variables.
-
-    PROJ4_DIR=${TOOLS_DIR}/proj-4.5.0/${TOOLS_FORMAT}
-    PATH=${PATH}:${PROJ4_DIR}/bin
-    export PROJ4_INCDIR=${PROJ4_DIR}/include
-    export PROJ4_LIBDIR=${PROJ4_DIR}/lib
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PROJ4_LIBDIR}
-    export MANPATH=${MANPATH}:${PROJ4_DIR}/man
-
-13. Install netcdf (http://www.unidata.ucar.edu/software/netcdf/).
-
-  a. Untar the source code.
-
-  b. Run configure and build.
-
-    ./configure --prefix=${TOOLS_DIR}/netcdf-3.6.2/${TOOLS_FORMAT} --disable-f90 --enable-shared CC=gcc CXX=g++ F77=g77 CFLAGS=-fPIC FFLAGS=-fPIC
-    make
-    make install
-
-  c. Set environment variables.
-
-    NETCDF_DIR=${TOOLS_DIR}/netcdf-3.6.2/${TOOLS_FORMAT}
-    export NETCDF_INCDIR=${NETCDF_DIR}/include
-    export NETCDF_LIBDIR=${NETCDF_DIR}/lib
-
-
-14. Install spatialdata.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/cs/spatialdata-0.1/trunk spatialdata
-
-  b. Create the configure script.
-
-    autoreconf -if
-
-  c. Run configure, build, install, and the unit tests.
-
-    ./configure  --enable-pythia --enable-testing  --prefix=${CIG_DIR} CPPFLAGS="-I${PROJ4_INCDIR} -I${CPPUNIT_INCDIR} -I${CIG_INCDIR}"  LDFLAGS="-L${PROJ4_LIBDIR} -L${CPPUNIT_LIBDIR} -L${CIG_LIBDIR} "  LIBS=""  CC=gcc CXX=g++ FC=g77 F77=f77
-    make
-    make install
-    make check
-
-15. Install PyLith.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/short/3D/PyLith/trunk pylith
-
-  b. Create the configure script.
-
-    autoreconf -if
-
-  c. Run configure, build, install, and the unit tests.
-
-    ./configure  --enable-testing --enable-tetgen --enable-cubit --prefix=${CIG_DIR}  CPPFLAGS="-I${PROJ4_INCDIR} -I${CPPUNIT_INCDIR} -I${CIG_INCDIR} -I${PYTHIA_INCDIR} -I${NETCDF_INCDIR}"  LDFLAGS="-L${PROJ4_LIBDIR} -L${CPPUNIT_LIBDIR} -L${CIG_LIBDIR} -L${NETCDF_LIBDIR}"  LIBS=""  CC=gcc CXX=g++ FC=g77 F77=f77
-    make
-    make install
-    make check
+    config/configure.py --PETSC_ARCH=${TOOLS_FORMAT}_opt --with-debugging=0 --with-clanguage=c++ --with-mpi-compilers=1 --with-shared=1 --with-dynamic=1 --with-64-bit-points=1 --with-large-file-io=1 --with-blas-lapack-dir=/opt/intel/Compiler/11.1/072/mkl/lib/em64t --with-lgrind=0 -with-chaco=1 --download-chaco=1 --with-parmetis=1 --download-parmetis=1 --with-sieve=1 --with-boost=1 --download-boost=1 --with-ml=1 --download-ml=1

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_Rocks-4.3-Intel64.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_Rocks-4.3-Intel64.txt	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_Rocks-4.3-Intel64.txt	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,363 +0,0 @@
-======================================================================
-INSTRUCTIONS FOR INSTALLING PYLITH ON AN INTEL LINUX CLUSTER RUNNING ROCKS-4.3
-======================================================================
-
-I place applications that are rarely updated in $HOME/tools. For CIG
-source code, I separate the source code, build directories, and
-installed code. The source code sits in $HOME/src/cig, I build the
-packages under $HOME/scratch/build/cig, and install the packages to
-$HOME/tools/cig.
-
-I use the bash shell and place all software package environment
-variables in a .bash.tools file that is read by the .bashrc file.
-
-On an x86_64 system it is important to keep files associated with a
-32-bit architecture separate from those associated with a 64-bit
-architecture. Some architecture independent files are put in
-$PREFIX/lib with 64-bit architecture files in $PREFIX/lib64. In most
-cases when a library with versions for both architectures is
-available, the linker will use the one compatible with the requested
-architecture (the default is usually the 64-bit architecture).
-
-To make things easier, I create environment variables TOOLS_DIR,
-CIG_DIR, TOOLS_FORMAT, and PYTHON_VERSION. The TOOLS_FORMAT variable
-makes it easier to maintain multiple copies of packages built with
-different options (e.g., different compilers and different levels of
-optimization). Note that the python version should match the version
-of Python you will be using. If you don't know the version of python,
-run "python --version".
-
-  export TOOLS_DIR=${HOME}/tools
-  export TOOLS_FORMAT=gcc-3.4_64
-  export PYTHON_VERSION=2.4
-
-  export CIG_DIR=${HOME}/tools/cig/${TOOLS_FORMAT}
-  export CIG_INCDIR=${CIG_DIR}/include
-  export CIG_LIBDIR=${CIG_DIR}/lib
-  export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CIG_LIBDIR}
-  export PYTHONPATH=${PYTHONPATH}:${CIG_DIR}/lib64/python${PYTHON_VERSION}/site-packages:${CIG_DIR}/lib/python${PYTHON_VERSION}/site-packages
-  PATH=${CIG_DIR}/bin:$PATH
-
-1. Install additional CentOS packages (must be root). **NOT NEEDED??**
-
-  Make sure the Rocks installation procedure installs the following
-  packages (these are not usually installed by default).
-
-  These can be installed by running
-
-    rpm -Uvh /home/install/rocks-dist/lan/x86_64/RedHat/RPMS/PACKAGE_FILE.rpm
-
-    gdb
-    libtool
-
-2. Adjust your environment to use Python 2.4 instead of Python 2.3.
-
-  Python 2.3 contains bugs that prevent its full functionality on a
-  x86_64 system. Rocks installs Python 2.4 in /opt/rocks.
-
-  PATH=/opt/rocks/bin:${PATH}
-  export PYTHON_DIR=/opt/rocks/lib/python$PYTHON_VERSION
-  export PYTHON_LIBDIR=/opt/rocks/lib/python$PYTHON_VERSION
-  export PYTHON_INCDIR=/opt/rocks/include/python$PYTHON_VERSION
-
-3. Install BLAS/LAPACK (needed by numpy and PETSc).
-
- a. Untar the source code.
-
- b. Edit the Makefile and make.inc files accordingly.
-
- c. Run make and make install.
-
- d. Set environment variables.
-
-    LAPACK_DIR=${TOOLS_DIR}/lapack/${TOOLS_FORMAT}
-    export LAPACK_LIBDIR=${LAPACK_DIR}/lib
-    export LD_LIBRARY_PATH=${LAPACK_LIBDIR}:${LD_LIBRARY_PATH}
-
-4. Install numpy (http://numpy.scipy.org/).
-
-  PyLith requires numpy >= 1.0 (the version that comes with Rocks 4.3
-  is 0.9).
-
-  a. Untar the source code.
-
-  b. Create a site.cfg file.
-
-    cp site.cfg.example site.cfg.
-
-    Set the library_dirs and libraries 
-
-  b. Install the software.
-
-    python setup.py install --prefix=${TOOLS_DIR}/numpy-1.3.0/${TOOLS_FORMAT}
-
-  c. Set environment variables.
-
-    NUMPY_DIR=${TOOLS_DIR}/numpy-1.3.0/${TOOLS_FORMAT}
-    export PYTHONPATH=${PYTHONPATH}:${NUMPY_DIR}/lib/python${PYTHON_VERSION}/site-packages
-
-
-5. Install mercurial (http://www.selenic.com/mercurial/wiki/)
-
-  a. Untar the source code.
-
-  b. Install the package.
-
-    python setup.py install --prefix=$TOOLS_DIR/mercurial-1.4.3/${TOOLS_FORMAT}
-
-  c. Set environment variables.
-
-    MERCURIAL_DIR=${TOOLS_DIR}/mercurial-1.4.3/${TOOLS_FORMAT}
-    PATH=${PATH}:${MERCURIAL_DIR}/bin
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MERCURIAL_DIR}/lib
-    export PYTHONPATH=${PYTHONPATH}:${MERCURIAL_DIR}/lib/python${PYTHON_VERSION}/site-packages
-
-6. Install MPICH2 (http://www.mcs.anl.gov/research/projects/mpich2/)
- 
- a. Untar the source and then run configure, build, and install.
-
-    export CC=gcc
-    export CXX=g++
-    export F77=g77
-    export FC=g77
-    export CFLAGS="-fPIC"
-    export CXXFLAGS=-fPIC
-    export F77FLAGS=-fPIC
-    export LIBS="-lpthread -lrt"
-
-    ./configure --with-arch=LINUX --disable-f90 --enable-sharedlibs=gcc --enable-cxx --prefix=${TOOLS_DIR}/mpich2-1.0.4p1/${TOOLS_FORMAT} --enable-g=none
-    make
-    make install
-
-  b. Set environment variables.
-
-    export RSHCOMMAND=ssh
-    export MPI_DIR=${TOOLS_DIR}/mpich2-1.0.4p1/${TOOLS_FORMAT}
-    PATH=$MPI_DIR/bin:$PATH
-    export MANPATH=$MPI_DIR/man:$MANPATH
-    export MPI_INCDIR=$MPI_DIR/include
-    export MPI_LIBDIR=$MPI_DIR/lib
-    export LD_LIBRARY_PATH=${MPI_LIBDIR}:${LD_LIBRARY_PATH}
-    export MPI_VERSION=2
-
-7. Install ParMetis (http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview)
-
-  a. Untar the source and edit the Makefile.
-  b. Set the CC, COPTIONS, INCDIR, LD, and LIBDIR variables.
-
-    CC = gcc
-    COPTIONS = -fPIC
-    INCDIR = -I${MPI_INCDIR}
-    LD = gcc
-    LIBDIR = -L${MPI_LIBDIR} -lmpich -lpthread -lrt
-
-  c. Run make. Make sure libraries are created libmetis.a and
-  libparmetis.a. Don't worry about errors when attempting to create
-  any executables.
-
-  d. Create library and include directories by hand.
-
-    mkdir -p ${TOOLS_DIR}/parmetis-3.1/$TOOLS_FORMAT/lib ${TOOLS_DIR}/parmetis-3.1/$TOOLS_FORMAT/include
-
-  e. Create shared libraries by hand.
-
-    cd ${TOOLS_DIR}/parmetis-3.1/${TOOLS_FORMAT}/lib
-    mkdir tmp
-    cd tmp
-    ar -x ../libmetis.a
-    gcc -o ../libmetis.so -shared *.o
-    rm *.o
-    ar -x ../libparmetis.a
-    gcc -o ../libparmetis.so -shared *.o
-    rm *.o
-    cd ..
-    rmdir tmp
-
-  d. Copy parmetis.h to the install location.
-
-    cp parmetis.h ${TOOLS_DIR}/parmetis-3.1/${TOOLS_FORMAT}/include/
-
-  e. Set environment variables.
-
-    PARMETIS_DIR=$TOOLS_DIR/parmetis-3.1/${TOOLS_FORMAT}
-    export PARMETIS_INCDIR=$PARMETIS_DIR/include
-    export PARMETIS_LIBDIR=$PARMETIS_DIR/lib
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PARMETIS_LIBDIR}
-
-8. Install cppunit (http://cppunit.sourceforge.net/cppunit-wiki)
-
-  a. Untar the source and run configure, build, and install.
-
-    ./configure --prefix=${TOOLS_DIR}/cppunit-1.10.2/${TOOLS_FORMAT}
-    make
-    make install
-
-  b. Set environment variables.
-
-    CPPUNIT_DIR=${TOOLS_DIR}/cppunit-1.10.2/${TOOLS_FORMAT}
-    PATH=${PATH}:${CPPUNIT_DIR}/bin
-    export CPPUNIT_LIBDIR=${CPPUNIT_DIR}/lib
-    export CPPUNIT_INCDIR=${CPPUNIT_DIR}/include
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CPPUNIT_LIBDIR}
-
-9. Install FIAT (http://www.fenics.org/wiki/FIAT)
-
-  a. Install FIAT. Versions 0.3.x are known to work.
-
-    python setup.py install --prefix=$TOOLS_DIR/fiat-0.3.5/${TOOLS_FORMAT}
-
-  b. Set environment variables.
-
-    FIAT_DIR=${TOOLS_DIR}/fiat-0.3.5/${TOOLS_FORMAT}
-    export PYTHONPATH=${PYTHONPATH}:${FIAT_DIR}/lib/python${PYTHON_VERSION}/site-packages
-
-10. Install the development version of PETSc
-  (http://www-unix.mcs.anl.gov/petsc/petsc-as/)
-
-  These instructions cover installing the development version of
-  PETSc. Use mercurial to download the repository rather than
-  downloading a tarball.
-
-  a. Clone the source repository.
-
-    cd $TOOLS_DIR/petsc
-    hg clone http://petsc.cs.iit.edu/petsc/petsc-dev
-    cd petsc-dev/config
-    hg clone http://petsc.cs.iit.edu/petsc/BuildSystem BuildSystem
- 
-  b. Set PETSC_ARCH and PETSC_DIR environment variables.
-
-    export PETSC_DIR=${TOOLS_DIR}/petsc-dev
-    export PETSC_ARCH=linux_${TOOLS_FORMAT}_opt
-
-  c. Configure PETSc, build, and test.
-
-    ARCH_FLAGS="--PETSC_ARCH=linux_${TOOLS_FORMAT}_opt --with-debugging=no"
-    LANG_FLAGS="--with-clanguage=c++"
-    BUILD_FLAGS="--with-mpi-compilers=0 --with-gnu-compilers=1 --with-shared=1 --with-dynamic=1 --with-64-bit-points=1 --with-large-file-io=1 --CC=gcc --CXX=g++"
-    MPI_FLAGS="--with-mpi-dir=${TOOLS_DIR}/mpich2-1.0.4p1/gcc-3.4_64 --with-mpi-shared=0"
-    LIBS="-L${PVFS2_LIBDIR} -lpvfs2 -lssl -lpthread -lrt"
-    OPTIONS="--with-lgrind=0 --download-tetgen"
-    PART_FLAGS="--with-chaco=1 --download-chaco=1 --with-parmetis=1 --with-parmetis-dir=${TOOLS_DIR}/parmetis-3.1/gcc-3.4_64"
-    SIEVE_FLAGS="--with-sieve=1 --with-boost=1 --download-boost=1"
-    config/configure.py ${ARCH_FLAGS} ${LANG_FLAGS} ${BUILD_FLAGS} --with-blas-lapack-lib="-L${ACML_LIBDIR} -lacml -lacml_mv" ${MPI_FLAGS} --LIBS="-L${PVFS2_LIBDIR} -lpvfs2 -lssl" ${OPTIONS} ${PART_FLAGS} ${SIEVE_FLAGS}
-    make
-    make test
-
-11. Install SWIG (http://www.swig.org/)
-
-  a. Untar and install.
-
-    tar -zxvf swig.1.3.39.tgz
-    configure --prefix=${TOOLS_DIR}/swig-1.3.39/${TOOLS_FORMAT}
-    make
-    make install
-
-  b. Update environment variables.
-
-    SWIG_DIR=${TOOLS_DIR}/swig-1.3.39/${TOOLS_FORMAT}
-    PATH=${PATH}:${SWIG_DIR}/bin
-
-12. Install pythia.
-
-  I place all CIG source code in src/cig.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/cs/pythia/trunk pythia
-
-  b. Install the software.
-
-    python setup.py install --prefix=${CIG_DIR}
-
-  c. Set environment variables.
-
-    export PYTHIA_INCDIR=${CIG_INCDIR}/pythia-0.8
-
-13. Install nemesis.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/cs/nemesis/trunk nemesis
-
-  b. Create the configure script.
-
-    autoreconf -if
-
-  c. Run configure, build, and install.
-
-    ./configure  --prefix=${CIG_DIR} CPPFLAGS="-I${CIG_INCDIR} -I${MPI_INCDIR}"  LDFLAGS="-L${CIG_LIBDIR} -L${MPI_LIBDIR} -L${PVFS2_LIBDIR}"  LIBS="-lpvfs2 -lssl -lpthread -lrt"  CC=gcc CXX=g++ FC=g77 F77=g77
-    make
-    make install
-
-14. Install PROJ.4 (http://trac.osgeo.org/proj/)
-
-  a. Download the source code AND the datum shifts (proj-datumgrid-1.3.zip).
-
-  b. Untar the source code and unzip the datum shifts in the nad directory.
-
-  c. Run configure and build.
-
-    ./configure  --prefix=${TOOLS_DIR}/proj-4.5.0/${TOOLS_FORMAT}  CC=gcc CXX=g++ FC=g77 F77=f77
-    make
-    make install
-
-  d. Set environment variables.
-
-    PROJ4_DIR=${TOOLS_DIR}/proj-4.5.0/${TOOLS_FORMAT}
-    PATH=${PATH}:${PROJ4_DIR}/bin
-    export PROJ4_INCDIR=${PROJ4_DIR}/include
-    export PROJ4_LIBDIR=${PROJ4_DIR}/lib
-    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PROJ4_LIBDIR}
-    export MANPATH=${MANPATH}:${PROJ4_DIR}/man
-
-15. Install netcdf (http://www.unidata.ucar.edu/software/netcdf/).
-
-  a. Untar the source code.
-
-  b. Run configure and build.
-
-    ./configure --prefix=${TOOLS_DIR}/netcdf-3.6.2/${TOOLS_FORMAT} --disable-f90 --enable-shared CC=gcc CXX=g++ F77=g77 CFLAGS=-fPIC FFLAGS=-fPIC
-    make
-    make install
-
-  c. Set environment variables.
-
-    NETCDF_DIR=${TOOLS_DIR}/netcdf-3.6.2/${TOOLS_FORMAT}
-    export NETCDF_INCDIR=${NETCDF_DIR}/include
-    export NETCDF_LIBDIR=${NETCDF_DIR}/lib
-
-
-16. Install spatialdata.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/cs/spatialdata-0.1/trunk spatialdata
-
-  b. Create the configure script.
-
-    autoreconf -if
-
-  c. Run configure, build, install, and the unit tests.
-
-    ./configure  --enable-pythia --enable-swig --enable-testing  --prefix=${CIG_DIR} CPPFLAGS="-I${PROJ4_INCDIR} -I${CPPUNIT_INCDIR} -I${CIG_INCDIR}"  LDFLAGS="-L${PROJ4_LIBDIR} -L${CPPUNIT_LIBDIR} -L${CIG_LIBDIR} "  LIBS=""  CC=gcc CXX=g++ FC=g77 F77=f77
-    make
-    make install
-    make check
-
-17. Install PyLith.
-
-  a. Download the source code from the SVN repository.
-
-    svn co http://geodynamics.org/svn/cig/short/3D/PyLith/trunk pylith
-
-  b. Create the configure script.
-
-    autoreconf -if
-
-  c. Run configure, build, install, and the unit tests.
-
-    ./configure  --enable-testing --enable-swig --enable-tetgen --enable-cubit --prefix=${CIG_DIR}  CPPFLAGS="-I${PROJ4_INCDIR} -I${CPPUNIT_INCDIR} -I${CIG_INCDIR} -I${PYTHIA_INCDIR} -I${NETCDF_INCDIR}"  LDFLAGS="-L${PROJ4_LIBDIR} -L${CPPUNIT_LIBDIR} -L${CIG_LIBDIR} -L${NETCDF_LIBDIR}"  LIBS=""  CC=gcc CXX=g++ FC=g77 F77=f77
-    make
-    make install
-    make check

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.sh (from rev 16998, short/3D/PyLith/trunk/doc/install/Linux_ubuntu-AMD64_Aagaard.sh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.sh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.sh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,39 @@
+#!/bin/bash                                                                                                              
+
+#
+if [ "$TOOLS_FORMAT" == "" ]; then
+  export TOOLS_FORMAT=gcc-4.4.1_64
+fi                                
+
+# Store pre-tools info so we can reread this file after changing settings
+if (($READTOOLS)); then                                                  
+  PATH=${path_notools}                                                   
+  export LD_LIBRARY_PATH=${ld_library_path_notools}                      
+  export MANPATH=${manpath_notools}                                      
+  export PYTHONPATH=${pythonpath_notools}                                
+else                                                                     
+  export path_notools=${PATH}                                            
+  export ld_library_path_notools=${LD_LIBRARY_PATH}                      
+  export manpath_notools=${MANPATH}                                      
+  export pythonpath=${PYTHONPATH}                                        
+  export READTOOLS=1                                                     
+fi                                                                       
+
+PYTHON_VERSION=2.6
+
+export TOOLS_DIR=$HOME/tools/${TOOLS_FORMAT}
+if [ "$LD_LIBRARY_PATH" == "" ]; then                
+  export LD_LIBRARY_PATH=${TOOLS_DIR}/lib            
+else                                                 
+  export LD_LIBRARY_PATH=${TOOLS_DIR}/lib:${LD_LIBRARY_PATH}
+fi                                                          
+if [ "${PYTHON_PATH}" == "" ]; then                         
+  export PYTHONPATH=${TOOLS_DIR}/lib/python${PYTHON_VERSION}/site-packages
+else                                                                      
+  export PYTHONPATH=${TOOLS_DIR}/lib/python${PYTHON_VERSION}/site-packages:${PYTHONPATH}
+fi
+PATH=${TOOLS_DIR}/bin:${PATH}
+
+# PETSC
+export PETSC_DIR=$HOME/src/petsc-dev
+export PETSC_ARCH=${TOOLS_FORMAT}

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.txt (from rev 16998, short/3D/PyLith/trunk/doc/install/Linux_ubuntu-AMD64_Aagaard.txt)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.txt	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Linux_ubuntu-AMD64_Aagaard.txt	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,205 @@
+======================================================================
+INSTRUCTIONS FOR INSTALLING PYLITH ON LINUX x86_64 RUNNING UBUNTU 9.10
+======================================================================
+
+These installation instructions use as many Ubuntu packages as
+possible. This reduces the number of packages that must be built from
+source. We do not use the Ubuntu openmpi-1.3.2-3 because it appears to
+contain bugs that cause PyLith to hang when running in
+parallel. Instead, we build openmpi-1.4.2 from source.
+
+We install development versions of the CIG software. Installing using
+source tarballs is easy, simply replace downloading from the source
+repository and running autoreconf with downloading and unpacking the
+tarball.
+
+To make things easier, I create environment variables TOOLS_DIR,
+TOOLS_FORMAT, and PYTHON_VERSION. The TOOLS_FORMAT variable
+makes it easier to maintain multiple copies of packages built with
+different options (e.g., different compilers and different levels of
+optimization). Note that the python version should match the version
+of Python you will be using. If you don't know the version of python,
+run "python --version".
+
+See the Linux_ubuntu-AMD64_Aagaard.sh file for the settings used to
+setup the environment variables using the bash shell. The
+$TOOLS_FORMAT environment variable is used to differentiate between
+packages built with different compilers and/or different optimization
+settings. In this case, TOOLS_FORMAT is gcc-4.4.1_64. We use a medium
+level of optimization and do not strip out error checking code. You
+should setup your environment BEFORE building the packages.
+
+Source files
+
+  Source files are placed under $HOME/src/PACKAGE.
+
+Build directories
+
+  Packages supporting building in separate directories are built in
+  $HOME/scratch/build/$TOOLS_FORMAT.
+
+Install directorires
+
+  Packages are installed in $HOME/tools/$TOOLS_FORMAT.
+
+
+1. When installing Ubuntu, include the development tools (gcc,
+gfortran, etc). in the installation.
+
+2. Install additional packages.
+
+  libcppunit
+  libcppunit-dev
+  proj
+  proj-data
+  libproj-dev
+  swig-1.3.36
+  python-numpy
+  netcdf-bin
+  libnetcdf-dev
+  libnetcdf4
+  mercurial
+  subversion
+  autoconf
+  automake
+  
+3. Install OpenMPI
+ 
+  Download and unpack the tarball.
+    cd $src/openmpi-1.4.2
+    wget http://www.open-mpi.org/software/ompi/v1.4/downloads/openmpi-1.4.2.tar.gz
+    tar -zxvf openmpi-1.4.2.tar.gz
+
+  Run configure in the build directory.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/openmpi-1.4.2
+    ${TOOLS_DIR}/openmpi-1.4.2/src/openmpi-1.4.2/configure --config-cache --prefix=${TOOLS_DIR} CC=gcc CXX=g++ FC=gfortran F77=gfortran CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" FFLAGS="-O2 -fPIC"
+
+  Run "make" and "make install".
+    make
+    make install
+
+  Test
+    mpicc -show
+
+    You should see the gcc compiler being used with the appropriate
+    flags to include the OpenMPI headers and libraries.
+
+
+4. FIAT (version 0.3.5 is the most recent version known to work)
+
+  Depends on Python.
+
+  Download and unpack the tarball.
+    cd $HOME/src/fiat-0.3.5
+    wget http://www.fenics.org/pub/software/fiat/FIAT-0.3.5.tar.gz
+
+  Install using python.
+    cd FIAT-0.3.5
+    python setup.py install --prefix=$TOOLS_DIR
+
+  Test
+    python
+    import FIAT
+
+
+5. pythia
+
+  Depends on Python.
+
+  Check out pythia from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/cs/pythia/trunk pythia
+
+  Install using python.
+    cd pythia
+    python setup.py install --prefix=$TOOLS_DIR
+
+  Test
+    python
+    import pyre
+
+
+6. spatialdata
+
+  Depends on pythia.
+
+  Check out spatialdata from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/cs/spatialdata-0.1/trunk spatialdata-dev
+    cd spatialdata-dev
+    autoreconf -if
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/spatialdata-dev
+    ${HOME}/src/spatialdata/configure  --config-cache  --enable-swig --enable-testing --enable-pythia  --prefix=${TOOLS_DIR}  CPPFLAGS="-I${TOOLS_DIR}/include "  LDFLAGS="-L${TOOLS_DIR}/lib " CC=icc CXX=icpc CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC"
+
+  Run "make" and "make install".
+    make
+    make install
+
+  Test
+    make check
+
+
+7. PETSc
+
+  Checkout the development version of PETSc.
+    cd $HOME/src
+    hg clone http://petsc.cs.iit.edu/petsc/petsc-dev
+    cd petsc-dev/config
+    hg clone http://petsc.cs.iit.edu/petsc/BuildSystem BuildSystem
+
+  Run configure in the *source* directory.
+    cd $HOME/src/petsc-dev
+    config/configure.py --PETSC_ARCH=linux_${TOOLS_FORMAT} --with-debugging=0 --with-clanguage=c++ --with-mpi-compilers=1 --with-shared=1 --with-dynamic=1 --with-64-bit-points=1 --with-large-file-io=1 --with-blas-lapack-lib="-L/usr/lib/atlas -llapack_atlas -llapack -latlas -lblas" --with-lgrind=0 --with-chaco=1 --download-chaco=1 --with-parmetis=1 --download-parmetis=1 --with-sieve=1 --with-boost=1 --download-boost=1 --with-ml=1 --download-ml=1
+
+  Run "make" and "make test"
+    make
+    make test
+
+
+8. nemesis
+
+  Depends on Python, MPI, pythia.
+
+  Check out nemesis from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/cs/nemesis/trunk nemesis-dev
+    cd nemesis-dev
+    autoreconf -if
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/nemesis-dev
+    $HOME/src/nemesis-dev/configure --prefix=${TOOLS_DIR}
+
+ Run "make" and "make install".
+    make
+    make install
+
+  Test
+    nemesis
+    import mpi
+
+    Running nemesis should startup Python. Nemesis is an MPI wrapper
+    around Python.
+  
+ 
+9. PyLith
+
+    Check out PyLith from the publicly accessible CIG SVN repository.
+    cd $HOME/src
+    svn co http://geodynamics.org/svn/cig/short/3D/PyLith/trunk pylith-dev
+    cd pylith-dev
+    autoreconf -if
+
+  Run configure in the build dir.
+    cd $HOME/scratch/build/$TOOLS_FORMAT/pylith-dev
+    ${HOME}/src/pylith-dev/configure  --config-cache  --enable-swig --enable-testing --enable-cubit --prefix=${TOOLS_DIR}  CPPFLAGS="-I${TOOLS_DIR}/include "  LDFLAGS="-L${TOOLS_DIR}/lib "  CC=mpicc CXX=mpiCC  CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC"
+
+ Run "make" and "make install".
+    make
+    make install
+
+  Test
+    make check
+

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -12,8 +12,20 @@
 
 EXTRA_DIST = \
 	README \
+	Cluster_CIT-garuda.txt \
+	Cluster_CIT-garuda/PyLith.README \
+	Cluster_CIT-garuda/sample.bashrc \
+	Cluster_CIT-garuda/sample.bash.tools \
+	Cluster_CIT-garuda/sample.pylithapp.cfg \
+	Cluster_CIT-pangu.txt \
+	Cluster_CIT-pangu/PyLith.README \
+	Cluster_CIT-pangu/sample.bashrc \
+	Cluster_CIT-pangu/sample.bash.tools \
+	Cluster_CIT-pangu/sample.pylithapp.cfg \
 	Cluster_Rocks-4.3-AMD64.txt \
 	Cluster_Rocks-4.3-AMD64_bash.sh \
+	Linux_ubuntu-AMD64_Aagaard.txt \
+	Linux_ubuntu-AMD64_Aagaard.sh \
 	Linux_Fedora8-AMD64_Aagaard.txt \
 	Linux_Fedora8-AMD64_Aagaard_bash.sh \
 	MacBookPro_Aagaard.txt \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/README	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/README	2010-06-11 23:01:21 UTC (rev 16999)
@@ -17,7 +17,9 @@
 managers do a poor job of maintaining compatibility across
 packages. For example, some Fink packages use Apple gcc while others
 use Fink gcc (these two versions of gcc are not necessarily
-compatible).
+compatible). On Darwin systems, we recommend using MacPorts as your
+package manager. It builds everything from source and generally does a
+better job of maintaining consistency than Fink.
 
 The particular versions of several packages used in the installation
 instructions vary depending on how when the package was installed and
@@ -29,14 +31,21 @@
 INSTRUCTIONS FOR VARIOUS PLATFORMS
 ======================================================================
 
-In cases where there are multiple instructions for a given platform,
-simply pick the procedure with which you are most comfortable. The
-*.sh files contain the commands to set the environment variables
-within a bash shell for the corresponding platform.
+We recommend setting up your source, build, and install directories as
+in the Linux_ubuntu-AMD64_Aagaard.txt, Cluster_CIT-garuda, and
+Cluster_CIT-pangu examples. These are setup for relatively stable
+installations, whereas most of the other examples are setup for
+development work and testing with multiple versions of packages. As a
+result they are unnecessarily complex for most users. The other
+examples do provide details for other systems that you may find
+helpful.
 
 FILE                             PLATFORM
 
-MacBookPro_Aagaard.txt           Intel Mac (Apple gcc 4.0)
+Linux_ubuntu-AMD64_Aagaard.txt   x86_64 desktop (gcc compilers)
+Cluster_CIT-garuda.txt           Intel cluster (Intel compilers)
+Cluster_CIT-pangu.txt            Intel cluster (Intel compilers)
+MacBookPro_Aagaard.txt           Intel Mac (Apple gcc 4.2), MacPorts
 Linux_Fedora8-AMD64_Aagaard.txt  x86_64 machine running Fedora 8 (gcc 4.1.2)
 Cluster_Rocks-4.3-AMD64.txt      x86_64 cluster running Rocks 4.3 (gcc 3.4)
 
@@ -45,12 +54,13 @@
 ======================================================================
 
 Software packages that conform to the GNU build system and use a
-configure script can be built in a different directory from the source
-tree. A notable exception to this is MPICH2, which in most cases must
-be built in the source tree. Building in a directory separate from the
-source tree makes it easy to create builds for different compilers,
-optimization levels, etc. To build in a separate directory, simply run
-the configure script from the directory you wish to use as the
-top-level build directory. Run "make", etc. in the build directory. In
-cases where you need to generate the configure script via autoreconf,
-run "autoreconf -if" in the top-level source directory.
+configure script can usually be built in a different directory from
+the source tree. A notable exception to this is MPICH2, which in most
+cases must be built in the source tree. Building in a directory
+separate from the source tree makes it easy to create builds for
+different compilers, optimization levels, etc. To build in a separate
+directory, simply run the configure script from the directory you wish
+to use as the top-level build directory. Run "make", etc. in the build
+directory. In cases where you need to generate the configure script
+via autoreconf, run "autoreconf -if" in the top-level source
+directory.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/presentations/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/presentations/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/presentations/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -14,7 +14,8 @@
 	pylith1.0/pylith_overview.pdf \
 	pylith1.2/pylith_overview.pdf \
 	pylith1.3/pylith_overview.pdf \
-	pylith1.4/pylith_overview.pdf
+	pylith1.4/pylith_overview.pdf \
+	pylith1.5/pylith_overview.pdf
 
 
 # End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/presentations/pylith1.5 (from rev 16998, short/3D/PyLith/trunk/doc/presentations/pylith1.5)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -17,7 +17,9 @@
 	announce_v1.2.0.txt \
 	announce_v1.3.0.txt \
 	announce_v1.3.1.txt \
-	announce_v1.4.0.txt
+	announce_v1.4.0.txt \
+	announce_v1.4.2.txt \
+	announce_v1.5.0.txt
 
 
 # End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt	2010-06-11 23:01:21 UTC (rev 16999)
@@ -5,21 +5,19 @@
 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
+friction with a few widely-used fault constitutive models, (2) an
 optimized solver for explicit time-stepping with a lumped Jacobian
-sparse matrix, (3) a total Langrangian formulation for rigid-body
-motion and small strains, (4) use of scientific notation in VTK output
-files with user-specified precision, and (5) use of nodeset names in
-CUBIT Exodus files. We encourage all users of previous PyLith releases
-to switch to this latest release.
+matrix, (3) a total Langrangian formulation for rigid-body motion and
+small strains, (4) use of scientific notation in VTK output files with
+user-specified precision, and (5) use of nodeset names in CUBIT Exodus
+files. 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. In addition to adding features this release
-also fixes a number of bugs (see top-level README file). Switching
-from v1.5.0 only requires changes to parameter files when using CUBIT
-meshes or the power-law rheology. See the README file for changes
-required to switch to the v1.5.x release series from previous
-versions.
+also fixes a number of bugs (see top-level README file). See the
+README file for changes required to switch to the v1.5.x release
+series from previous versions.
 
 You can download the source code and binaries from
 
@@ -37,18 +35,25 @@
     Added fault friction interface conditions with static
     friction, linear slip-weakening friction, and rate- and
     state-friction with the ageing law. The implementation can be used
-    in static, quasi-static, or dynamic problems.
+    in static, quasi-static, and dynamic problems.
 
   * Drucker-Prager elastoplastic bulk rheology
 
-    Added a Drucker-Prager elastoplastic bulk rheology. [NEED SOME
-    WORDS FROM CHARLES]
+    Added a Drucker-Prager elastoplastic bulk rheology. This is a
+    perfect plasticity implementation (no hardening). This is a
+    nonlinear constitutive model, so the nonlinear solver is required
+    when this rheology is used. Refer to the 'Material Models' section
+    of the manual.
 
+ * Plane strain Maxwell viscoelastic bulk rheology
+
+    Linear Maxwell viscoelastic rheology for plane strain problems.
+
   * Finite-deformation formulation
 
     Added a finite-deformation (rigid body motion and small strains)
     implementation of elasticity with stress calculated using the
-    Second Piola Kirchhoff stress tensor and strains calculated using
+    Second Piola-Kirchhoff stress tensor and strains calculated using
     the Green-Lagrange strain tensor.
 
   * Lumped Jacobian for explicit-time stepping
@@ -63,9 +68,7 @@
     Added optimized elasticity objects for the most popular cell types
     and basis functions (linear polynomials). For tri3 and tet4 cells
     with one quadrature point, the optimized implementations do not
-    use mapped cells to reduce the number of operations. For quad4 and
-    hex8 cells the optimized objects provide hardwired loop bounds
-    which can lead to faster performance for some compilers.
+    use mapped cells to reduce the number of operations. 
 
   * Scientific notation for ASCII VTK files
 
@@ -100,5 +103,3 @@
 
     - Fixed memory bug for a fault in a 1-D mesh when constructing the
       cohesive cells.
-
-

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -15,6 +15,6 @@
 default: userguide.pdf
 
 userguide.pdf:
-	lyx -e pdflatex userguide.lyx
+	lyx -e pdf userguide.lyx
 
 # End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -64,14 +64,15 @@
 \end_layout
 
 \begin_layout Standard
-The Crustal Deformation Modeling Working Group within the Southern California
- Earthquake Center and the Short-Term Tectonics Working Group within CIG
- have developed a suite of benchmarks to test the accuracy and performance
- of 3D numerical codes.
- The benchmark definitions are posted on the CIG website at Short-Term Tectonics
- Benchmarks 
+The Crustal Deformation Modeling and Earthquake Source Physics Focus Groups
+ within the Southern California Earthquake Center and the Short-Term Tectonics
+ Working Group within CIG have developed a suite of benchmarks to test the
+ accuracy and performance of 3D numerical codes for quasi-static crustal
+ deformation and earthquake rupture dynamics.
+ The benchmark definitions for the quasi-static crustal deformation benchmarks
+ are posted on the CIG website at Short-Term Tectonics Benchmarks 
 \begin_inset Flex URL
-status collapsed
+status open
 
 \begin_layout Plain Layout
 
@@ -80,37 +81,30 @@
 
 \end_inset
 
-.
- These benchmarks permit evaluating the relative performance of different
- types of basis functions, quadrature schemes, and discretizations for geophysic
-al applications.
- The files needed to run the 3D benchmarks are in the CIG SVN Repository
- 
+ and the definitions for the earthquake rupture benchmarks are posted on
+ the SCEC website 
 \begin_inset Flex URL
-status collapsed
+status open
 
 \begin_layout Plain Layout
 
-geodynamics.org/svn/cig/short/3D/PyLith/benchmarks
+scecdata.usc.edu/cvws/cgi-bin/cvws.cgi
 \end_layout
 
 \end_inset
 
 .
- There is an additional benchmark (
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:benchmarks:savageprescott"
-
-\end_inset
-
-) for a 2.5D problem solved in 3D 
+ This suite of benchmarks permits evaluating the relative performance of
+ different types of basis functions, quadrature schemes, and discretizations
+ for geophysical applications.
+ The files needed to run the 3D benchmarks are in the CIG SVN Repository
+ 
 \begin_inset Flex URL
-status collapsed
+status open
 
 \begin_layout Plain Layout
 
-geodynamics.org/svn/cig/short/2.5D/benchmarks/savageprescott
+geodynamics.org/svn/cig/short/3D/PyLith/benchmarks
 \end_layout
 
 \end_inset
@@ -121,7 +115,7 @@
 s based on actual geophysical problems.
  The benchmarks are performed at various resolutions and using different
  element types.
- By comparing the runtimes and accuracy for different resolutions and element
+ By comparing the runtime and accuracy for different resolutions and element
  types, users can evaluate which combination will be best for their problems
  of interest.
 \end_layout
@@ -143,9 +137,38 @@
 
 \end_layout
 
-\begin_layout Subsection
-ADD SCEC DYNAMIC RUPTURE BENCHMARKS
+\begin_layout Section
+SCEC Dynamic Rupture Benchmarks
 \end_layout
 
+\begin_layout Standard
+The SCEC website 
+\begin_inset Flex URL
+status open
+
+\begin_layout Plain Layout
+
+scecdata.usc.edu/cvws/cgi-bin/cvws.cgi
+\end_layout
+
+\end_inset
+
+ includes a graphical user interface for examining the benchmark results.
+ Benchmark results for PyLith are available for tpv205-2d (horizontal slice
+ through a vertical strike-slip fault), tpv205 (vertical strike-slip fault
+ with high and low stress asperities), tpv210-2d (vertical slice through
+ a 60 degree dipping normal fault), and tpv210 (60 degree dipping normal
+ fault).
+\end_layout
+
+\begin_layout Standard
+The benchmark results indicate that triangular and tetrahedral cells generate
+ less numerical noise than quadrilateral or hexahedral cells.
+ We plan to add appropriate bulk constitutive models for damping high frequency
+ oscillations in order to reduce the numerical noise.
+ All of the other results without high frequency oscillations posted on
+ the SCEC benchmarks web page employ damping to reduce numerical artifacts.
+\end_layout
+
 \end_body
 \end_document

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1535,6 +1535,12 @@
 \end_layout
 
 \begin_layout Section
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:absorbing:boundaries"
+
+\end_inset
+
 Absorbing Boundary Conditions
 \end_layout
 
@@ -1733,7 +1739,7 @@
 
 \end_inset
 
-We can write the strong form of the boundary condition as
+We write the weak form of the boundary condition as
 \begin_inset Formula \[
 \int_{S_{T}}T_{i}\phi_{i}\, dS=\int_{S_{T}}-\rho c_{i}\frac{\partial u_{i}}{\partial t}\phi_{i}\, dS,\]
 
@@ -1751,65 +1757,155 @@
 \begin_inset Formula $v_{s}$
 \end_inset
 
- for the shear tractions.
- Discretizing into finite elements changes the integral over the boundary
- into a sum of integrals over the cell boundaries
-\begin_inset Formula \begin{equation}
-\sum_{cells}(\int_{S_{t}^{e}}T_{i}\phi_{i}\, dS)=\sum_{cells}(\int_{S_{t}^{e}}-\rho c_{i}\frac{\partial u_{i}}{\partial t}\phi_{i}\, dS).\end{equation}
+ for the shear tractions, and 
+\begin_inset Formula $\phi_{i}$
+\end_inset
 
+ is our weighting function.
+ We express the trial solution and weighting function as linear combinations
+ of basis functions,
+\begin_inset Formula \begin{gather}
+u_{i}=\sum_{m}a_{i}^{m}N^{m},\\
+\phi_{i}=\sum_{n}c_{i}^{n}N^{n}.\end{gather}
+
 \end_inset
 
-Within an element we represent the fields as a linear combination of a set
- of basis functions and the values of the fields at vertices of the element,
-\begin_inset Formula \begin{equation}
-a_{i}=N^{m}a_{i}^{m},\end{equation}
+Substituting into our integral over the absorbing boundaries yields
+\end_layout
 
+\begin_layout Standard
+\begin_inset Formula \[
+\int_{S_{T}}T_{i}\phi_{i}\, dS=\int_{S_{T}}-\rho c_{i}\sum_{m}\dot{a}_{i}^{m}N^{m}\sum_{n}c_{i}^{n}N^{n}\, dS.\]
+
 \end_inset
 
-where 
-\begin_inset Formula $N^{m}$
+In the derivation of the governing equations, we recognized that the weighting
+ function is arbitrary, so we form the residual by setting the terms associated
+ with the coefficients 
+\begin_inset Formula $c_{i}^{n}$
 \end_inset
 
- is the 
-\begin_inset Formula $m$
+ to zero,
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+r_{i}^{n}=\sum_{\text{tract cells}}\sum_{\text{quad pts}}-\rho(x_{q})c_{i}(x_{q})\sum_{m}\dot{a}_{i}^{m}N^{m}(x_{q})N^{n}(x_{q})w_{q}|J_{cell}(x_{q})|,\]
+
 \end_inset
 
-th basis function for an element and 
-\begin_inset Formula $a_{i}^{m}$
+ where 
+\begin_inset Formula $x_{q}$
 \end_inset
 
- is the field at vertex 
-\begin_inset Formula $m$
+ are the coordinates of the quadrature points, 
+\begin_inset Formula $w_{q}$
 \end_inset
 
-.
- Rewriting the trial functions and displacement field in terms of the basis
- functions gives
-\begin_inset Formula \begin{gather}
-\phi_{i}=N^{m},\text{ and}\\
-u_{i}=N^{m}u_{i}^{m}.\end{gather}
+ are the weights of the quadrature points, and 
+\begin_inset Formula $|J_{cell}(x_{q})|$
+\end_inset
 
+ is the determinant of the Jacobian matrix evaluated at the quadrature points
+ associated with mapping the reference cell to the actual cell.
+\end_layout
+
+\begin_layout Standard
+The appearance of velocity in the expression for the residual means that
+ the absorbing dampers also contribute to the system Jacobian matrix.
+ Use the central difference method, the velocity is written in terms of
+ the displacements,
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+\dot{u}_{i}(t)=\frac{1}{2\Delta t}(u_{i}(t+\Delta t)-u_{i}(t-\Delta t)).\]
+
 \end_inset
 
-We force the weak form to hold for each component in the vector space.
- Substituting into the integral equation, for basis function 
-\begin_inset Formula $N^{p}$
+Expressing the displacement at time 
+\begin_inset Formula $t+\Delta t$
 \end_inset
 
- and component 
-\begin_inset Formula $i$
+ in terms of the displacement at time 
+\begin_inset Formula $t$
 \end_inset
 
-, we have
-\begin_inset Formula \begin{equation}
-\sum_{cells}(\int_{S_{t}^{e}}T_{i}\phi_{i}\, dS)=\sum_{cells}(\int_{S_{t}^{e}}-\rho c_{i}\sum_{p}N^{p}\dot{u}_{i}N^{q}\, dS).\end{equation}
+ (
+\begin_inset Formula $u_{i}(t)$
+\end_inset
 
+) and the increment in the displacement at time 
+\begin_inset Formula $t$
 \end_inset
 
+ (
+\begin_inset Formula $du_{i}(t)$
+\end_inset
 
+) leads to
 \end_layout
 
+\begin_layout Standard
+\begin_inset Formula \[
+\dot{u}_{i}(t)=\frac{1}{2\Delta t}(du_{i}(t)+u_{i}(t)-u_{i}(t-\Delta t))\]
+
+\end_inset
+
+The terms contributing to the system Jacobian are associated with the increment
+ in the displacement at time time.
+ Substituting into the governing equations and isolating the term associated
+ with the increment in the displacement at time t yields
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \[
+A_{ij}^{nm}=\sum_{\text{tract cells}}\sum_{\text{quad pts}}\delta_{ij}\frac{1}{2\Delta t}\rho(x_{q})v_{i}(x_{q})N^{m}(x_{q})N^{n}(x_{q})w_{q}|J_{cells}(x_{q})|,\]
+
+\end_inset
+
+where 
+\begin_inset Formula $A_{ij}^{mn}$
+\end_inset
+
+ is a 
+\begin_inset Formula $nd$
+\end_inset
+
+ by 
+\begin_inset Formula $md$
+\end_inset
+
+ matrix (
+\begin_inset Formula $d$
+\end_inset
+
+ is the dimension of the vector space), 
+\begin_inset Formula $m$
+\end_inset
+
+ and 
+\begin_inset Formula $n$
+\end_inset
+
+ refer to the basis functions and 
+\begin_inset Formula $i$
+\end_inset
+
+ and 
+\begin_inset Formula $j$
+\end_inset
+
+ are vector space components.
+\end_layout
+
 \begin_layout Section
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:fault"
+
+\end_inset
+
 Fault Interface Conditions
 \end_layout
 
@@ -2050,23 +2146,19 @@
 \end_layout
 
 \begin_layout Description
-up_dir Up-dir or up direction (only used in 3D simulations).
+up_dir Up-dir or up direction (used in 2D and 3D simulations).
+ In 2D the default in-plane slip is left-lateral, so we use the up-direction
+ to resolve the ambiguity in specifying reverse slip.
+ In 3D the up-direction is used to resolve the ambiguity in the along-strike
+ and dip-dir directions.
+ If the fault plane is horizontal, then the up-dir corresponds to the reverse-mo
+tion on the +z side of the fault.
  The only requirement for this direction is that it not be collinear with
  the fault normal direction.
- The default value of [0, 0, 1] can be used as long as the fault normal
- does not coincide with this direction.
+ The default value of [0, 0, 1] is appropriate for most 3D problems.
 \end_layout
 
 \begin_layout Description
-normal_dir General preferred direction for the fault normal (only used in
- 3D simulations).
- This direction is used to resolve the ambiguity as to which side of the
- fault to choose for the fault normal.
- This direction should point from the footwall to the hanging wall.
- The default value is [1, 0, 0].
-\end_layout
-
-\begin_layout Description
 quadrature Quadrature object used in integrating fault quantities.
 \end_layout
 
@@ -2075,18 +2167,17 @@
 \end_layout
 
 \begin_layout Standard
-By default the output manager outputs both diagnostic information (fault
- normal direction, final slip, and slip initiation time) and the slip at
- each time step.
- Table 
+By default the output manager outputs both diagnostic information (e.g., fault
+ normal direction) and the slip at each time step.
+ Tables 
 \begin_inset CommandInset ref
 LatexCommand ref
 reference "tab:fault:kin:output"
 
 \end_inset
 
- lists the fields available for output for a fault with kinematic (prescribed)
- earthquake rupture.
+ and ?? list the fields available for output for a fault with kinematic
+ (prescribed) earthquake rupture and a fault with dynamic rupture, respectively.
  The fault coordinate system is shown in Figure 
 \begin_inset CommandInset ref
 LatexCommand ref
@@ -2142,10 +2233,6 @@
 \end_layout
 
 \begin_layout LyX-Code
-normal_dir = [1, 0, 0] ; default
-\end_layout
-
-\begin_layout LyX-Code
 quadrature.cell = pylith.feassemble.FIATLagrange
 \end_layout
 
@@ -2155,8 +2242,7 @@
 
 \begin_layout Standard
 The group of vertices has the label ``fault A.'' We replicate the default
- values for the fault ``up'' direction, and the desired general direction
- for the fault normal.
+ values for the fault ``up'' direction.
  These settings apply to a 2D fault surface embedded within a 3D mesh, so
  we use 2D Lagrange reference cells.
  The spatial database for elastic properties is used to determine the approximat
@@ -2168,8 +2254,8 @@
 \end_layout
 
 \begin_layout Standard
-Kinematic earthquake ruptures specify the slip as a function of time on
- the fault surface.
+Kinematic earthquake ruptures use the FaultCohesiveKin object to specify
+ the slip as a function of time on the fault surface.
  Slip may evolve simultaneously over the fault surface instantaneously in
  a single time step (as is usually done in quasi-static simulations) or
  propagate over the fault surface over hundreds and up to thousands of time
@@ -2185,16 +2271,21 @@
  of decoupling the motion of the two sides of the fault surface.
  In order to impose the desired relative motion, we must adjust the governing
  equations.
- PyLith employs Lagrange multiplier constraints to do this.
- Typically, the additional degrees of freedom associated with the Lagrange
- multipliers result in a complex implementation.
+ PyLith employs Lagrange multiplier constraints to enforce the constraint
+ of the relative motion in the strong sense.
+ That is, we enforce the slip across the fault at each degree of freedom.
+\end_layout
+
+\begin_layout Standard
+In conventional implementations the additional degrees of freedom associated
+ with the Lagrange multipliers results in a complex implementation.
  However, the use of Lagrange multiplier constraints with cohesive cells
- provides for an easy implementation; we simply add the additional degrees
+ provides for a simple formulation; we simply add the additional degrees
  of freedom associated with the Lagrange multipliers to the cohesive cells
  as shown in Figure 
 \begin_inset CommandInset ref
 LatexCommand ref
-reference "fig:fault:cohesive:quad4:kin"
+reference "fig:fault:cohesive:quad4"
 
 \end_inset
 
@@ -2204,38 +2295,42 @@
  Furthermore, the Lagrange multiplier constraints correspond to forces required
  to impose the relative motions, so they are related to the change in stress
  on the fault surface associated with fault slip.
- If we write the governing equations in the form
+ If we write the algebraic system of equations we are solving in the form
 \begin_inset Formula \begin{equation}
 \underline{A}\overrightarrow{u}=\overrightarrow{b}\,,\end{equation}
 
 \end_inset
 
-then inserting the Lagrange multiplier constraints results in
+then including the Lagrange multiplier constraints results in
 \begin_inset Formula \begin{equation}
 \left[\begin{array}{cc}
 \underline{A} & \underline{C}^{T}\\
 \underline{C} & 0\end{array}\right]\left[\begin{array}{c}
 \overrightarrow{u}\\
-\overrightarrow{L}\end{array}\right]=\left[\begin{array}{c}
+\overrightarrow{l}\end{array}\right]=\left[\begin{array}{c}
 \overrightarrow{b}\\
-\overrightarrow{D}\end{array}\right]\,,\end{equation}
+\overrightarrow{d}\end{array}\right]\,,\label{eq:fault:cohesive:lagrange}\end{equation}
 
 \end_inset
 
 where 
+\begin_inset Formula $\overrightarrow{l}$
+\end_inset
+
+ is the vector of Lagrange multipliers and 
 \begin_inset Formula $\underline{C}$
 \end_inset
 
- is a matrix of direction cosines relating the relative motion across the
- fault to the vector of fault slip, 
-\begin_inset Formula $\overrightarrow{D}$
+ is composed of rotation submatrices, 
+\begin_inset Formula $\underline{R}$
 \end_inset
 
-, and 
-\begin_inset Formula $\overrightarrow{L}$
+, associated with the direction cosines relating the relative displacements
+ across the fault to the vector of fault slip, 
+\begin_inset Formula $\overrightarrow{d}$
 \end_inset
 
- is the vector of Lagrange multipliers.
+.
  Note that by using the direction cosines to relate the relative motion
  across the fault, the slip vector and Lagrange multipliers (forces required
  to impose the slip) are in the local fault coordinate system (lateral motion,
@@ -2243,6 +2338,191 @@
  
 \end_layout
 
+\begin_layout Paragraph
+Non-diagonal A
+\end_layout
+
+\begin_layout Standard
+The Lagrange multipliers contribute to both the system Jacobian matrix and
+ the residual.
+ Because we enforce the constraints in a strong sense, the terms do not
+ involve integrals over the fault surface.
+ The additional terms in the residual are
+\begin_inset Formula \begin{gather}
+r_{i}^{n}=-C_{ji}^{pn}l_{j}^{p},\\
+r_{i}^{p}=d_{i}^{p}-C_{ij}^{pn}u_{j}^{n},\end{gather}
+
+\end_inset
+
+where 
+\begin_inset Formula $n$
+\end_inset
+
+ denotes a conventional degree of freedom and 
+\begin_inset Formula $k$
+\end_inset
+
+ denotes a degree of freedom associated with a Lagrange multiplier.
+ The additional terms in the system Jacobian matrix are simply the direction
+ cosines,
+\begin_inset Formula \begin{gather}
+J_{ij}^{np}=C_{ji}^{pn},\\
+J_{ij}^{pn}=C_{ij}^{pn}.\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Paragraph
+Diagonal A
+\end_layout
+
+\begin_layout Standard
+When we use a lumped system Jacobian matrix, we cannot lump the terms associated
+ with the Lagrange multipliers.
+ Instead, we formulate the Jacobian ignoring the contributions from the
+ Lagrange multipliers, and then adjust the solution after the solve to account
+ for their presence.
+ Including the Lagrange multipliers in the general expression for the residual
+ at time 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+, we have
+\begin_inset Formula \begin{equation}
+r_{i}^{n}(t+\Delta t)=A_{ij}^{nm}(u_{j}^{m}(t)+du_{j}^{m}(t))+C_{ki}^{pn}(l_{k}^{p}(t)+dl_{k}^{p}(t)),\end{equation}
+
+\end_inset
+
+where we have written the displacements and Lagrange multipliers at time
+ 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+ in terms of the values at time 
+\begin_inset Formula $t$
+\end_inset
+
+ and the increment from time 
+\begin_inset Formula $t$
+\end_inset
+
+ to 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+.
+ When we solve the lumped system ignoring the Lagrange multipliers contributions
+ to the Jacobian, we formulate the residual assuming the values 
+\begin_inset Formula $du_{i}^{n}$
+\end_inset
+
+(t) and 
+\begin_inset Formula $dl_{k}^{p}(t)$
+\end_inset
+
+ are zero.
+ So our task is to determine the increment in the Lagrange multiplier, 
+\begin_inset Formula $dl_{k}^{p}$
+\end_inset
+
+, and the correction to the displacement increment, 
+\begin_inset Formula $du_{i}^{n}$
+\end_inset
+
+, and by setting the residual with all terms included to zero; thus, we
+ have
+\begin_inset Formula \begin{gather}
+A_{ij}^{nm}(u_{j}^{m}(t)+du_{j}^{m}(t))+C_{ki}^{pn}(l_{k}^{p}(t)+dl_{k}^{p}(t))=0\text{ subject to}\\
+C_{ij}^{pn}(u_{j}^{n}(t)+du_{j}^{n}(t))=d_{i}^{p}.\end{gather}
+
+\end_inset
+
+Making use of the residual computed with 
+\begin_inset Formula $du_{i}^{n}(t)=0$
+\end_inset
+
+ and 
+\begin_inset Formula $dl_{k}^{p}(t)=0$
+\end_inset
+
+,
+\begin_inset Formula \begin{gather}
+r_{i}^{n}+A_{ij}^{nm}du_{j}^{m}+C_{ki}^{pn}dl_{k}^{p}=0\text{ subject to}\\
+C_{ij}^{pn}(u_{j}^{n}(t)+du_{j}^{n}(t))=d_{i}^{p}.\end{gather}
+
+\end_inset
+
+Explicitly writing the equations for the vertices on the negative and positive
+ sides of the fault yields
+\begin_inset Formula \begin{gather}
+r_{i}^{n-}+A_{ij}^{nm-}du_{j}^{m-}+R_{ki}^{pn}dl_{k}^{p}=0,\\
+r_{i}^{n+}+A_{ij}^{nm+}du_{j}^{m+}+R_{ki}^{pn}dl_{k}^{p}=0,\\
+R_{ij}^{pn}(u_{j}^{n+}+du_{j}^{n+}-u_{j}^{n-}-du_{j}^{n-})=d_{i}^{p}.\end{gather}
+
+\end_inset
+
+Solving the first two equations for 
+\begin_inset Formula $du_{j}^{m-}$
+\end_inset
+
+ and 
+\begin_inset Formula $du_{j}^{m+}$
+\end_inset
+
+ and combining them using the third equation leads to
+\begin_inset Formula \begin{multline}
+R_{ij}^{pn}\left((A_{ij}^{nm+})^{-1}+(A_{ij}^{nm+})^{-1}\right)R_{ki}^{pn}dl_{k}^{p}=d_{i}^{p}-R_{ij}^{pn}(u_{j}^{n+}-u_{j}^{n-})\\
++R_{ij}^{pn}\left((A_{ij}^{nm+})^{-1}r_{i}^{n+}-(A_{ij}^{nm-})^{-1}r_{i}^{n-}\right).\end{multline}
+
+\end_inset
+
+We do not allow overlap between the fault interface and the absorbing boundary,
+ so 
+\begin_inset Formula $A_{ij}^{nm}$
+\end_inset
+
+ is the same for all components at a vertex.
+ As a result the matrix on the left hand side simplifies to
+\begin_inset Formula \[
+S_{ik}^{pn}=\delta_{ik}\left(\frac{1}{A^{nm+}}+\frac{1}{A^{nm-}}\right),\]
+
+\end_inset
+
+and
+\begin_inset Formula \[
+dl_{k}^{p}=(S_{ik}^{pn})^{-1}\left(d_{i}^{p}-R_{ij}^{pn}(u_{j}^{n+}-u_{j}^{n-})+R_{ij}^{pn}\left((A_{ij}^{nm+})^{-1}r_{i}^{n+}-(A_{ij}^{nm-})^{-1}r_{i}^{n-}\right)\right).\]
+
+\end_inset
+
+Now that we know the value of the increment in the Lagrange multiplier from
+ time 
+\begin_inset Formula $t$
+\end_inset
+
+ to time 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+, we can correct the value for the displacement increment from time 
+\begin_inset Formula $t$
+\end_inset
+
+ to 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+ using
+\begin_inset Formula \begin{gather*}
+\Delta du_{j}^{n-}=(A_{ij}^{nm-})^{-1}C_{ki}^{pn}dl_{k}^{p}\text{ and}\\
+\Delta du_{j}^{n+}=-(A_{ij}^{nm+})^{-1}C_{ki}^{pn}dl_{k}^{p}.\end{gather*}
+
+\end_inset
+
+
+\end_layout
+
 \begin_layout Subsubsection
 Arrays of Kinematic Rupture Components
 \end_layout
@@ -2276,7 +2556,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-eq_srcs = [earthquake,creep] ; Array of kinematic earthquake ruptures
+eq_srcs = [earthquake,creep]
 \end_layout
 
 \begin_layout Standard
@@ -2339,7 +2619,7 @@
 <features>
 <column alignment="center" valignment="top" width="0">
 <column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" width="3.5in">
 <row>
 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
 \begin_inset Text
@@ -2699,10 +2979,10 @@
 \end_layout
 
 \begin_layout Standard
-\begin_inset Formula \begin{gather*}
+\begin_inset Formula \begin{gather}
 D(t)=\left\{ \begin{array}{cc}
-0 & t<t_{r}\\
-D_{final} & t\ge t_{r}\end{array}\right.\,,\end{gather*}
+0 & 0\leq t<t_{r}\\
+D_{final} & t\ge t_{r}\end{array}\right.\,,\end{gather}
 
 \end_inset
 
@@ -3016,10 +3296,10 @@
 \end_layout
 
 \begin_layout Standard
-\begin_inset Formula \begin{gather*}
+\begin_inset Formula \begin{gather}
 D(t)=\left\{ \begin{array}{cc}
-0 & t<t_{r}\\
-V(t-t_{r}) & t\ge t_{r}\end{array}\right.\,,\end{gather*}
+0 & 0\leq t<t_{r}\\
+V(t-t_{r}) & t\ge t_{r}\end{array}\right.\,,\end{gather}
 
 \end_inset
 
@@ -3340,11 +3620,11 @@
 \end_layout
 
 \begin_layout Standard
-\begin_inset Formula \begin{gather*}
+\begin_inset Formula \begin{gather}
 D(t)=\left\{ \begin{array}{cc}
-0 & t<t_{r}\\
-D_{final}(1-e^{-(t-t_{r})/t_{0}}(1+(t-t_{r})/t_{0})) & t\ge t_{r}\end{array}\right.\,,\\
-t_{0}=D/D_{final}eV_{max}\,,\end{gather*}
+0 & 0\leq t<t_{r}\\
+D_{final}\left(1-exp\left(-\frac{t-t_{r}}{t_{0}}\right)\left(1+\frac{t-t_{r}}{t_{0}}\right)\right) & t\ge t_{r}\end{array}\right.\,,\\
+t_{0}=0.6195t_{\mathit{rise}}\,,\end{gather}
 
 \end_inset
 
@@ -3366,10 +3646,10 @@
 
  is the slip initiation time (time when rupture reaches the location), and
  
-\begin_inset Formula $V_{max}$
+\begin_inset Formula $t_{\mathit{rise}}$
 \end_inset
 
- is the peak slip rate.
+ is the rise time.
 \end_layout
 
 \begin_layout Description
@@ -3389,8 +3669,8 @@
 \end_layout
 
 \begin_layout Description
-slip_rate Spatial database for peak slip rate (
-\begin_inset Formula $V_{max}$
+rise_time Spatial database for rise time (
+\begin_inset Formula $t_{\mathit{rise}}$
 \end_inset
 
 ).
@@ -3421,7 +3701,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-slip_rate.iohandler.filename = sliprate.spatialdb
+rise_time.iohandler.filename = risetime.spatialdb
 \end_layout
 
 \begin_layout LyX-Code
@@ -3620,7 +3900,7 @@
 \begin_layout Plain Layout
 
 \family typewriter
-slip_rate
+rise_time
 \end_layout
 
 \end_inset
@@ -3631,7 +3911,7 @@
 \begin_layout Plain Layout
 
 \family typewriter
-slip_rate
+rise_time
 \end_layout
 
 \end_inset
@@ -3640,11 +3920,15 @@
 \begin_inset Text
 
 \begin_layout Plain Layout
-Peak slip rate (
-\begin_inset Formula $V_{max})$
+
+\family typewriter
+Rise time 
+\family default
+(
+\begin_inset Formula $t_{r})$
 \end_inset
 
- in meters per second.
+ in seconds.
 \end_layout
 
 \end_inset
@@ -3699,22 +3983,1913 @@
 
 \end_layout
 
+\begin_layout Paragraph
+Liu-Cosine Slip Time Function
+\end_layout
+
+\begin_layout Standard
+This slip time function, proposed by Liu, Archuleta, and Hartzell for use
+ in ground-motion modeling
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Liu:etal:2006"
+
+\end_inset
+
+, combines several cosine and sine functions together to create a slip time
+ history with a sharp rise and gradual termination with a finite duration
+ of slip.
+ The evolution of slip at a point follows: 
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula \begin{gather}
+D(t)=\left\{ \begin{array}{cc}
+D_{\mathit{final}}C_{n}\left(0.7t-0.7\frac{t_{1}}{\pi}\sin\frac{\pi t}{t_{1}}-1.2\frac{t_{1}}{\pi}\left(\cos\frac{\pi t}{2t_{1}}-1\right)\right) & 0\leq t<t_{1}\\
+D_{\mathit{final}}C_{n}\left(1.0t-0.7\frac{t1}{\pi}\sin\frac{\pi t}{t_{1}}+0.3\frac{t2}{\pi}\sin\frac{\pi(t-t1)}{t_{2}}+\frac{1.2}{\pi}t_{1}-0.3t_{1}\right) & t_{1}\leq t<2t_{1}\\
+D_{\mathit{final}}C_{n}\left(0.7-0.7\cos\frac{\pi t}{t_{1}}+0.6\sin\frac{\pi t}{2t_{1}}\right) & 2t_{1}\leq t\leq t_{0}\end{array}\right.\,,\\
+C_{n}=\frac{\pi}{1.4\pi t_{1}+1.2t_{1}+0.3\pi t_{2}},\\
+t_{0}=1.525t_{\mathit{rise}},\\
+t_{1}=0.13t_{0},\\
+t_{2}=t_{0}-t_{1},\end{gather}
+
+\end_inset
+
+where 
+\begin_inset Formula $D(t)$
+\end_inset
+
+ is slip at time 
+\begin_inset Formula $t$
+\end_inset
+
+, 
+\begin_inset Formula $D_{final}$
+\end_inset
+
+ is the final slip at the location, 
+\begin_inset Formula $t_{r}$
+\end_inset
+
+ is the slip initiation time (time when rupture reaches the location), and
+ 
+\begin_inset Formula $t_{\mathit{rise}}$
+\end_inset
+
+ is the rise time.
+\end_layout
+
+\begin_layout Description
+slip Spatial database of final slip distribution (
+\begin_inset Formula $D_{final})$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+slip_time Spatial database of slip initiation times (
+\begin_inset Formula $t_{r}$
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Description
+rise_time Spatial database for rise time (
+\begin_inset Formula $t_{\mathit{rise}}$
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Standard
+The spatial database files for the slip time function use the same parameters
+ for the slip time function as the Brune slip time function shown in Table
+ 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:Brune-slip-db-params"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Paragraph
+Time-History Slip Time Function
+\end_layout
+
+\begin_layout Standard
+This slip time function reads the slip time function from a data file, so
+ it can have an arbitrary shape.
+ The slip and slip initiation times are specified using spatial databases,
+ so the slip time function, in general, will use a normalized amplitude.
+\end_layout
+
+\begin_layout Description
+slip Spatial database of final slip distribution (
+\begin_inset Formula $D_{final})$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+slip_time Spatial database of slip initiation times (
+\begin_inset Formula $t_{r}$
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Description
+time_history Temporal database for slip evolution.
+\end_layout
+
+\begin_layout Standard
+An example of setting these parameters in a 
+\family typewriter
+.cfg
+\family default
+ file is:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.problem.interfaces.fault.eq_srcs.ruptures]
+\end_layout
+
+\begin_layout LyX-Code
+slip_function = pylith.faults.TimeHistorySlipFn
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.problem.interfaces.fault.eq_srcs.rupture.slip_function]
+\end_layout
+
+\begin_layout LyX-Code
+slip.iohandler.filename = finalslip.spatialdb
+\end_layout
+
+\begin_layout LyX-Code
+slip_time.iohandler.filename = sliptime.spatialdb
+\end_layout
+
+\begin_layout LyX-Code
+time_history.iohandler.filename = myfunction.timedb
+\end_layout
+
+\begin_layout Standard
+The spatial database files for the slip time function specify the spatial
+ variation in the parameters for the slip time function, as shown in Table
+ 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:Brune-slip-db-params-2"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:Brune-slip-db-params-2"
+
+\end_inset
+
+Values in spatial database used as parameters in the Brune slip time function.
+\end_layout
+
+\end_inset
+
+
+\begin_inset VSpace defskip
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="3">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="2.5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Database
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+slip
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+left-lateral-slip
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Amount of left-lateral final slip in meters.
+ Use negative values for right-lateral slip.
+ Applies to faults in 2D and 3D only.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+reverse-slip
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Amount of reverse slip in meters.
+ Use negative values for normal slip.
+ Applies to faults in 3D only.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+fault-opening
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Amount of fault opening in meters.
+ Negative values imply penetration.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+rise_time
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+rise_time
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Rise time 
+\family default
+(
+\begin_inset Formula $t_{r})$
+\end_inset
+
+ in seconds.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+slip_time
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+slip_time
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Slip initiation time (
+\begin_inset Formula $t_{t})$
+\end_inset
+
+ in meters.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
 \begin_layout Subsection
 Dynamic Earthquake Rupture
 \end_layout
 
+\begin_layout Standard
+Dynamic fault interfaces use the FaultCohesiveDyn object to specify a fault
+ constitutive model to govern the fault tractions (friction) and the resulting
+ slip.
+ When friction is large enough such that there is no sliding on the fault,
+ the fault is locked (slip is zero) and the Lagrange multipliers assume
+ their values just as they do in kinematic ruptures.
+ In this case, the Lagrange multipliers correspond to the forces necessary
+ to keep the slip zero.
+ When the driving forces exceed those allowed by friction, we reduce the
+ values of the Lagrange multipliers to those consistent with friction from
+ the fault constitutive model.
+ When we reduce the Lagrange multipliers, we must increment the slip accordingly
+ to maintain consistency in the algebraic system of equations.
+\end_layout
+
 \begin_layout Subsubsection
 Governing Equations
 \end_layout
 
+\begin_layout Standard
+The algebraic systems of equations for dynamic earthquake rupture are the
+ same as those for kinematic rupture
+\begin_inset Formula \begin{equation}
+\left[\begin{array}{cc}
+\underline{A} & \underline{C}^{T}\\
+\underline{C} & 0\end{array}\right]\left[\begin{array}{c}
+\overrightarrow{u}\\
+\overrightarrow{l}\end{array}\right]=\left[\begin{array}{c}
+\overrightarrow{b}\\
+\overrightarrow{d}\end{array}\right].\end{equation}
+
+\end_inset
+
+Enforcing the limits imposed on the Lagrange multipliers by the fault constituti
+ve model requires determining the increment in slip for an increment in
+ the Lagrange multipliers.
+ The increment in the Lagrange multipliers is the difference between the
+ value computed for the current slip (either zero or the slip at the previous
+ time step) and the value computed from the fault constitutive model.
+ Starting from our system of algebraic equations,
+\begin_inset Formula \begin{equation}
+A_{ij}^{nm}u_{j}^{m}+C_{ji}^{pn}l_{j}^{p}=b_{i}^{n},\end{equation}
+
+\end_inset
+
+we compute the sensitivity for the given loading and boundary conditions,
+\begin_inset Formula \begin{equation}
+A_{ij}^{nm}\partial u_{j}^{m}=-C_{ji}^{pn}\partial l_{j}^{p}.\end{equation}
+
+\end_inset
+
+Computing the increment in the slip requires computing the increment in
+ the displacements.
+ Solving this equation rigorously would require inverting the system Jacobian,
+ which we do not want to do unless it is diagonal (as it is in the case
+ of the lumped formulations).
+ 
+\end_layout
+
+\begin_layout Paragraph
+Non-diagonal A
+\end_layout
+
+\begin_layout Standard
+In general A is a sparse matrix with off-diagonal terms of the form
+\begin_inset Formula \begin{equation}
+A=\left(\begin{array}{ccc}
+A_{0} & A_{1} & A_{2}\\
+A_{3} & A_{n-} & 0\\
+A_{4} & 0 & A_{n+}\end{array}\right),\end{equation}
+
+\end_inset
+
+where the degrees of freedom on either side of the fault are uncoupled.
+ We formulate two small linear systems involving just the degrees of freedom
+ associated with vertices on either the positive or negative sides of the
+ fault,
+\begin_inset Formula \begin{gather}
+A_{ij}^{nm-}\partial u_{j}^{m-}=-R_{ij}^{pn}\partial l_{j}^{p},\\
+A_{ij}^{nm+}\partial u_{j}^{m+}=R_{ij}^{pn}\partial l_{j}^{p},\end{gather}
+
+\end_inset
+
+where we have replace 
+\begin_inset Formula $\underline{C}$
+\end_inset
+
+ with 
+\begin_inset Formula $\underline{R}$
+\end_inset
+
+ to denote the explicit inclusion of the signs for the terms in 
+\begin_inset Formula $\underline{C}$
+\end_inset
+
+ associated with the positive (
+\begin_inset Formula $n^{+}$
+\end_inset
+
+) and negative (
+\begin_inset Formula $n^{-}$
+\end_inset
+
+) sides of the fault.
+ After solving these two linear systems of equations, we compute the increment
+ in slip using
+\begin_inset Formula \begin{equation}
+\partial d_{i}^{p}=R_{ij}^{pn}(\partial u_{j}^{n+}-\partial u_{j}^{n-}).\end{equation}
+
+\end_inset
+
+The solution of these two linear systems gives the increment in slip assuming
+ all the degrees of freedom except those immediately adjacent to the fault
+ remain fixed.
+ In real applications where the deformation associated with fault slip is
+ localized around the fault, this provides good enough approximations so
+ that the nonlinear solver converges quickly.
+ In problems where deformation associated with slip on the fault is not
+ localized (as in the case in some of the example problems), the increment
+ in slip computed by solving these two linear systems is not a good approximatio
+n and the nonlinear solve requires a large number of iterations.
+\end_layout
+
+\begin_layout Standard
+We use the PETSc Krylov subspace solver (KSP) to solve these two linear
+ systems.
+ The PETSc settings for the KSP object are set in the same manner as the
+ main solver, except we use the prefix friction_ in all of the settings
+ related to the KSP solver for these two linear systems.
+ For example, to use the recommended additive Schwarz preconditioner in
+ the friction sensitivity solves, the settings in a .cfg file are:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.petsc]
+\end_layout
+
+\begin_layout LyX-Code
+friction_pc_type = asm
+\end_layout
+
+\begin_layout Standard
+See the examples in Sections 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Tutorial-3d-hex8-friction"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:tutorial:shearwave:quad4"
+
+\end_inset
+
+ for details.
+\end_layout
+
+\begin_layout Paragraph
+Diagonal A
+\end_layout
+
+\begin_layout Standard
+With a lumped Jacobian matrix, we can solve for the increment in slip directly,
+\begin_inset Formula \begin{equation}
+\partial d_{i}^{p}=-C_{ij}^{pn}(A_{jk}^{nm})^{-1}C_{lk}^{pm}\partial l_{l}^{p}.\end{equation}
+
+\end_inset
+
+By not allowing the fault interface to overlap with the absorbing boundary,
+ the terms in 
+\begin_inset Formula $A$
+\end_inset
+
+ for a given vertex are identical and the expression on the right-hand side
+ reduces to
+\begin_inset Formula \begin{equation}
+\partial d_{i}^{p}=-\left(\frac{1}{A^{n+}}+\frac{1}{A^{n-}}\right)\partial l_{i}^{p}.\end{equation}
+
+\end_inset
+
+
+\end_layout
+
 \begin_layout Subsubsection
 Dynamic Rupture Parameters
 \end_layout
 
+\begin_layout Standard
+The components of the FaultCohesiveDyn object include
+\end_layout
+
+\begin_layout Description
+db_initial_tractions Spatial database specifying the initial tractions on
+ the fault surface.
+\end_layout
+
+\begin_layout Description
+friction Fault constitutive model.
+\end_layout
+
+\begin_layout Standard
+An example of specifying the dynamic earthquake rupture properties and component
+s in a 
+\family typewriter
+.cfg
+\family default
+ file:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.problem.interfaces.fault]
+\end_layout
+
+\begin_layout LyX-Code
+db_initial_tractions = spatialdata.spatialdb.SimpleDB
+\end_layout
+
+\begin_layout LyX-Code
+db_initial_tractions.iohandler.filename = tractions.spatialdb
+\end_layout
+
+\begin_layout LyX-Code
+friction = pylith.friction.StaticFriction
+\end_layout
+
+\begin_layout LyX-Code
+friction.db_properties = spatialdata.spatialdb.SimpleDB
+\end_layout
+
+\begin_layout LyX-Code
+friction.db_properties.iohandler.filename = friction.spatialdb
+\end_layout
+
+\begin_layout Standard
+The initial tractions are specified using the same fault coordinate system
+ as the slip directions in the kinematic ruptures.
+ Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:fault:cohesive:dyn:initial:tractions"
+
+\end_inset
+
+ gives the values in the spatial database for initial tractions.
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:fault:cohesive:dyn:initial:tractions"
+
+\end_inset
+
+Values in spatial databases for initial tractions.
+\end_layout
+
+\end_inset
+
+
+\begin_inset VSpace defskip
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="7" columns="3">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="2.5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Dimension
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+1-D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+traction-normal
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Normal traction (tension is positive)
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+2-D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+traction-shear
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Left-lateral shear traction (reverse shear for dipping faults)
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+traction-normal
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Normal traction (tension is positive)
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+3-D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+traction-shear-leftlateral
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Left-lateral shear traction
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+traction-shear-updip
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Reverse shear traction
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+traction-normal
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Normal traction (tension is positive)
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
 \begin_layout Subsubsection
 Fault Constitutive Models
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Fault-Constitutive-Models"
+
+\end_inset
+
+
 \end_layout
 
+\begin_layout Standard
+PyLith provides three fault constitutive models.
+ Future releases may contain additional models and a template is provided
+ for you to construct your own fault constitutive models (see Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Extending:FaultConstitutiveModels"
+
+\end_inset
+
+).
+ The fault constitutive model implementations are independent of dimension
+ and work in both 2-D and 3-D.
+ In solving the governing equations, PyLith will use a scalar representation
+ of the shear traction in 2-D and a vector representation of the shear traction
+ in 3-D, with the shear traction resolved in the direction of current slip.
+ The fault constitutive models contain a common set of properties and components
+:
+\end_layout
+
+\begin_layout Description
+label Name of the friction model.
+\end_layout
+
+\begin_layout Description
+db_properties Spatial database of the friction model parameters (default
+ is SimpleDB).
+\end_layout
+
+\begin_layout Description
+db_initial_state Spatial database for initial state variables (default is
+ none).
+\end_layout
+
+\begin_layout Paragraph
+Static Friction
+\end_layout
+
+\begin_layout Standard
+The static friction model produces shear tractions proportional to the fault
+ normal traction plus a cohesive stress,
+\begin_inset Formula \begin{equation}
+T_{f}=\begin{cases}
+T_{c}-\mu_{f}T_{n} & T_{n}\leq0\\
+0 & T_{n}>0\end{cases}.\end{equation}
+
+\end_inset
+
+The spatial database file for the static friction model properties specifies
+ the spatial variation of the parameters given in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:static:friction:properties"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:static:friction:properties"
+
+\end_inset
+
+Values in the spatial database for constant friction parameters.
+\end_layout
+
+\end_inset
+
+
+\begin_inset VSpace defskip
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="2.5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+friction-coefficient
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Coefficient of friction, 
+\begin_inset Formula $\mu_{f}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+cohesion
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Cohesive stress, 
+\begin_inset Formula $T_{c}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Paragraph
+Slip-Weakening Friction
+\end_layout
+
+\begin_layout Standard
+The linear slip-weakening friction model produces shear tractions equal
+ to the cohesive stress plus a contribution proportional to the fault normal
+ traction that decreases from a static value to a dynamic value as slip
+ progresses,
+\begin_inset Formula \begin{equation}
+T_{f}=\begin{cases}
+T_{c}-(\mu_{s}-(\mu_{s}-\mu_{d})\frac{d}{d_{0}})T_{n} & d\leq d_{0}\text{ and }T_{n}\leq0\\
+T_{c}-\mu_{d}T_{n} & d>d_{0}\text{ and }T_{n}\leq0\\
+0 & T_{n}>0\end{cases}\end{equation}
+
+\end_inset
+
+The spatial database files for the slip-weakening friction model properties
+ and state variables specify the spatial variation of the fault constitutive
+ model parameters given in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:slip:weakening:properties:statevars"
+
+\end_inset
+
+.
+ As long as the fault is locked, the initial state variables are zero, so
+ specifying the initial state variables for slip-weakening friction is rate.
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:slip:weakening:properties:statevars"
+
+\end_inset
+
+Values in spatial databases for slip-weakening friction.
+\end_layout
+
+\end_inset
+
+
+\begin_inset VSpace defskip
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="7" columns="3">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="2.5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Database
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+db_properties
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+static-coefficient
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Static coefficient of friction, 
+\begin_inset Formula $\mu_{s}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+dynamic-coefficient
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Dynamic coefficient of friction, 
+\begin_inset Formula $\mu_{d}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+slip-weakening-parameter
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Slip-weakening parameter, 
+\begin_inset Formula $d_{0}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+cohesion
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Cohesive stress, 
+\begin_inset Formula $T_{c}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+db_initial_state
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+cumulative-slip
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Cumulative slip, 
+\begin_inset Formula $d$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+previous-slip
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Slip at previous time step, 
+\begin_inset Formula $d(t-\Delta t)$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Paragraph
+Rate- and State-Friction with Ageing Law
+\end_layout
+
+\begin_layout Standard
+The Dietrich-Ruina rate and state friction model produces shear tractions
+ equal to the cohesive stress plus a contribution proportional to the fault
+ normal traction that depends on a state variable,
+\begin_inset Formula \begin{gather}
+T_{f}=\begin{cases}
+T_{c}-\mu_{f}T_{n} & T_{n}\leq0\\
+0 & T_{n}>0\end{cases}\\
+\mu_{f}=a\sinh^{-1}\left(\frac{1}{2}\frac{V}{V_{0}}\exp\left(\frac{1}{a}\left(\mu_{0}+b\ln\left(\frac{V_{0}\theta}{L}\right)\right)\right)\right)\\
+\frac{d\theta}{dt}=1-\frac{V\theta}{L}\end{gather}
+
+\end_inset
+
+where 
+\begin_inset Formula $V$
+\end_inset
+
+ is slip rate, 
+\begin_inset Formula $a$
+\end_inset
+
+ and 
+\begin_inset Formula $b$
+\end_inset
+
+ are coefficients, 
+\begin_inset Formula $L$
+\end_inset
+
+ is the characteristic slip distance, 
+\begin_inset Formula $\theta$
+\end_inset
+
+ is a state variable.
+ We have used the regularization of the coefficient of friction proposed
+ by Ben-Zion and Rice 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "BenZion:Rice:1997"
+
+\end_inset
+
+ to permit zero slip rate.
+ Following Kaneko 
+\shape italic
+et al.
+
+\shape default
+ 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Kaneko:etal:2008"
+
+\end_inset
+
+, we integrate the evolution equation for the state variable keeping slip
+ rate constant to get
+\begin_inset Formula \begin{equation}
+\theta(t+\Delta t)=\theta(t)\exp\left(\frac{-V(t)\Delta t}{L}\right)+\frac{L}{V(t)}\left(1-\exp\left(-\frac{V(t)\Delta t}{L}\right)\right).\end{equation}
+
+\end_inset
+
+As the slip rate approaches zero, the first exponential term approaches
+ 1.
+ Using the first three terms of the Taylor series expansion of the second
+ exponential yields
+\begin_inset Formula \begin{equation}
+\theta(t+\Delta t)=\begin{cases}
+\theta(t)\exp\left(-\frac{V(t)\Delta t}{L}\right)+\Delta t-\frac{1}{2}\frac{V(t)\Delta t^{2}}{L} & \frac{V(t)\Delta t}{L}<0.00001\\
+\theta(t)\exp\left(-\frac{V(t)\Delta t}{L}\right)+\frac{L}{V(t)}\left(1-\exp\left(-\frac{V(t)\Delta t}{L}\right)\right) & \frac{V(t)\Delta t}{L}\ge0.00001\end{cases}.\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The spatial database files for the rate and state friction model properties
+ and state variables specify the spatial variation of the fault constitutive
+ model parameters given in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:rate:state:ageing:properties:statevars"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:rate:state:ageing:properties:statevars"
+
+\end_inset
+
+Values in spatial databases for slip-weakening friction.
+\end_layout
+
+\end_inset
+
+
+\begin_inset VSpace defskip
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="8" columns="3">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="2.5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Database
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+db_properties
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+reference-friction-coefficient
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Steady-state coefficient of friction at slip rate 
+\begin_inset Formula $V_{0}$
+\end_inset
+
+, 
+\begin_inset Formula $\mu_{s}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+reference-slip-rate
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Reference slip rate, 
+\begin_inset Formula $V_{0}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+characteristic-slip-distance
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Slip-weakening parameter, 
+\begin_inset Formula $L$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+constitutive-parameter-a
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Coefficient for the 
+\begin_inset Formula $\ln$
+\end_inset
+
+ slip rate term, 
+\begin_inset Formula $a$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+constitutive-parameter-b
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Coefficient for the 
+\begin_inset Formula $\ln$
+\end_inset
+
+ state variable term, 
+\begin_inset Formula $b$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+cohesion
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Cohesive stress, 
+\begin_inset Formula $T_{c}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+db_initial_state
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+state-variable
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+State variable, 
+\begin_inset Formula $\theta$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
 \begin_layout Section
 Gravitational Body Forces
 \end_layout
@@ -3734,13 +5909,13 @@
 
 \end_inset
 
-, the contribution of body forces to the global force vector is given by
+, the body forces contribute to the residual,
 \begin_inset Formula \begin{equation}
-\overrightarrow{B}\phantom{}_{b}=\sum_{elements}\int_{V^{e}}N^{P}f_{i}\: dV.\end{equation}
+r_{i}^{n}=\int_{V}f_{i}N^{n}\: dV.\end{equation}
 
 \end_inset
 
-The body force per unit volume, 
+For gravitational body forces the body force per unit volume, 
 \begin_inset Formula $f_{i}$
 \end_inset
 
@@ -3833,7 +6008,7 @@
 An example problem using gravity is described in Section 
 \begin_inset CommandInset ref
 LatexCommand ref
-reference "sec:Tutorial-3d-hex8"
+reference "sec:Tutorial-3d-hex8-gravity"
 
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/components.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/components.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/components.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -110,24 +110,90 @@
 \begin_inset Newline newline
 \end_inset
 
-Implicit time stepping for static and quasi-static simulations.
+Implicit time stepping for static and quasi-static simulations with infinitesima
+l strains.
 \end_layout
 
 \begin_layout Description
 
 \family typewriter
+ImplicitLgDeform pylith.problems.ImplicitLgDeform
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Implicit time stepping for static and quasi-static simulations including
+ the effects of rigid body motion and small strains.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 Explicit pylith.problems.Explicit
 \family default
 
 \begin_inset Newline newline
 \end_inset
 
-Explicit time stepping for dynamic simulations.
+Explicit time stepping for dynamic simulations with infinitesimal strains.
 \end_layout
 
 \begin_layout Description
 
 \family typewriter
+ExplicitLgDeform pylith.problems.ExplicitLgDeform
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Explicit time stepping for dynamic simulations including the effects of
+ rigid body motion and small strains.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+ExplicitLumped pylith.problems.ExplicitLumped
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Explicit time stepping for dynamic simulations with a lumped system Jacobian
+ matrix.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+ExplicitLumpedTri3 pylith.problems.ExplicitLumpedTri3
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Optimized elasticity formulation for linear triangular cells and one quadrature
+ point for explicit time stepping in dynamic simulations.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+ExplicitLumpedTet4 pylith.problems.ExplicitLumpedTet4
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Optimized elasticity formulation for linear tetrahedral cells and one quadrature
+ point for explicit time stepping in dynamic simulations.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 SolverLinear pylith.problems.SolverLinear
 \family default
 
@@ -152,6 +218,18 @@
 \begin_layout Description
 
 \family typewriter
+SolverLumped pylith.problems.SolverLumped
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Built-in simple, optimized solver for solving systems with a lumped Jacobian.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 TimeStepUniform pylith.problems.TimeStepUniform
 \family default
 
@@ -205,6 +283,18 @@
 \begin_layout Description
 
 \family typewriter
+EventLogger pylith.utils.EventLogger
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+PETSc event logger.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 MemoryLogger pylith.perf.MemoryLogger
 \family default
 
@@ -361,6 +451,18 @@
 \begin_layout Description
 
 \family typewriter
+MaxwellPlaneStrain pylith.materials.MaxwellPlaneStrain
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Linear Maxwell viscoelastic bulk constitutive model for plane strain problems.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 GenMaxwellIsotropic3D pylith.materials.GenMaxwellIsotropic3D
 \family default
 
@@ -385,6 +487,18 @@
 \begin_layout Description
 
 \family typewriter
+DruckerPrage3D pylith.materials.DruckerPrager3D
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Drucker-Prager elastoplastic bulk constitutive model.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 Homogeneous pylith.materials.Homogeneous
 \family default
 
@@ -492,6 +606,18 @@
 \begin_layout Description
 
 \family typewriter
+FaultCohesiveDyn pylith.faults.FaultCohesive
+\family default
+Dyn
+\begin_inset Newline newline
+\end_inset
+
+Fault surface with dynamic (friction) slip implemented using cohesive elements.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 EqKinSrc pylith.faults.EqKinSrc
 \family default
 
@@ -565,6 +691,46 @@
 \end_layout
 
 \begin_layout Subsection
+Friction components
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+StaticFriction pylith.friction.StaticFriction
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Static friction fault constitutive model.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+SlipWeakening pylith.friction.SlipWeakening
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Linear slip-weakening friction fault constitutive model.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+RateStateAgeing pylith.friction.RateStateAgeing
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Dieterich-Ruina rate and state friction with ageing law state variable evolution.
+\end_layout
+
+\begin_layout Subsection
 Discretization components
 \end_layout
 
@@ -723,6 +889,18 @@
 \begin_layout Description
 
 \family typewriter
+OutputFaultDyn pylith.meshio.OutputFaultDyn
+\family default
+
+\begin_inset Newline newline
+\end_inset
+
+Output manager for fault with dynamic (friction) earthquake ruptures.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
 OutputMatElastic pylith.meshio.OutputMatElastic
 \family default
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover.pdf
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover.svg.gz
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover_small.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/cover/cover_small.jpg)
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -357,7 +357,7 @@
  errors and create C++ tests as well as the Python tests included here.
  In our rather simple example, we simply test the overall functionality
  of the component.
- For examples of thorough testing, see the spatialdatabase and PyLith source
+ For examples of thorough testing, see the spatialdata and PyLith source
  code.
 \end_layout
 
@@ -477,7 +477,7 @@
 
 \begin_layout Standard
 The properties and state variables used in the bulk constitutive model are
- set using arguments to the constuctor of the C++ 
+ set using arguments to the constructor of the C++ 
 \family typewriter
 ElasticMaterial
 \family default
@@ -757,7 +757,7 @@
  In this example, we demonstrate how to extend PyLith by adding your own
  fault constitutive model.
  We implement a linear viscous fault constitutive model wherein the perturbation
- in the coeficient of friction is linearly proportional to the slip rate.
+ in the coefficient of friction is linearly proportional to the slip rate.
  This constitutive model, 
 \family typewriter
 ViscousFriction
@@ -792,7 +792,7 @@
 
 \begin_layout Standard
 The properties and state variables used in the fault constitutive model
- are set using arguments to the constuctor of the C++ 
+ are set using arguments to the constructor of the C++ 
 \family typewriter
 FrictionModel
 \family default

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -157,7 +157,7 @@
 \begin_inset Text
 
 \begin_layout Plain Layout
-Vector notation
+Vector Notation
 \end_layout
 
 \end_inset
@@ -610,7 +610,20 @@
 \begin_inset Formula $S_{f}$
 \end_inset
 
- (we will consider the case of fault constitutive models in a later section).
+ (we will consider the case of fault constitutive models in Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:fault"
+
+\end_inset
+
+).
+ The rotation matrix 
+\begin_inset Formula $R_{ki}$
+\end_inset
+
+ transforms vectors from the global coordinate system to the fault coordinate
+ system.
  Note that since both 
 \begin_inset Formula $T_{i}$
 \end_inset
@@ -711,7 +724,7 @@
 \rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}-\overrightarrow{f}-\nabla\cdot\overrightarrow{\sigma}=\vec{0}\text{ in }V,\\
 \underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T}\text{,}\\
 \overrightarrow{u}=\overrightarrow{u^{o}}\text{ on }S_{u},\text{ and}\\
-\bar{R}(\vec{u}^{+}-\vec{u}^{-})=\vec{d}\end{gather}
+\underbar{R}\cdot(\vec{u^{+}}-\vec{u^{-}})=\vec{d}\text{ on }S_{f}.\end{gather}
 
 \end_inset
 
@@ -724,7 +737,7 @@
 \end_inset
 
 , displacements, 
-\begin_inset Formula $\vec{u^{o}}$
+\begin_inset Formula $\overrightarrow{u^{o}}$
 \end_inset
 
 , on surface 
@@ -739,7 +752,20 @@
 \begin_inset Formula $S_{f}$
 \end_inset
 
-.
+ (we will consider the case of fault constitutive models in Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:fault"
+
+\end_inset
+
+).
+ The rotation matrix 
+\begin_inset Formula $\underline{R}$
+\end_inset
+
+ transforms vectors from the global coordinate system to the fault coordinate
+ system.
  Note that since both 
 \begin_inset Formula $\overrightarrow{T}$
 \end_inset
@@ -850,11 +876,18 @@
 \begin_inset Formula $S_{u}$
 \end_inset
 
- (we will 
+ (we will consider tractions over the fault surface, 
 \begin_inset Formula $S_{f}$
 \end_inset
 
- in section ?? [TODO]),
+, associated with the fault constitutive model in Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:fault"
+
+\end_inset
+
+),
 \begin_inset Formula \begin{equation}
 -\int_{V}\sigma_{ij}\phi_{i,j}\, dV+\int_{S_{T}}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{S_{u}}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\, dV=0,\end{equation}
 
@@ -873,43 +906,11 @@
 
 \end_inset
 
-Now, 
-\begin_inset Formula $\sigma_{ij}\phi_{i,j}$
-\end_inset
-
- is a scalar, so it is symmetric,
-\begin_inset Formula \begin{equation}
-\sigma_{ij}\phi_{i,j}=\sigma_{ji}\phi_{j,i},\end{equation}
-
-\end_inset
-
-and we know that 
-\begin_inset Formula $\sigma_{ij}$
-\end_inset
-
- is symmetric, so
-\begin_inset Formula \begin{equation}
-\sigma_{ij}\phi_{i,j}=\sigma_{ij}\phi_{j,i},\end{equation}
-
-\end_inset
-
-which means
-\begin_inset Formula \begin{equation}
-\phi_{i,j}=\phi_{j,i},\end{equation}
-
-\end_inset
-
-which we can write as
-\begin_inset Formula \begin{equation}
-\phi_{i,j}=\frac{1}{2}(\phi_{i,j}+\phi_{j,i}).\end{equation}
-
-\end_inset
-
 We express the trial solution and weighting function as linear combinations
  of basis functions,
-\begin_inset Formula \begin{gather*}
+\begin_inset Formula \begin{gather}
 u_{i}=\sum_{m}a_{i}^{m}N^{m},\\
-\phi_{i}=\sum_{n}c_{i}^{n}N^{n}.\end{gather*}
+\phi_{i}=\sum_{n}c_{i}^{n}N^{n}.\end{gather}
 
 \end_inset
 
@@ -929,9 +930,9 @@
 .
  Substituting in the expressions for the trial solution and weighting function
  yields
-\begin_inset Formula \begin{gather*}
+\begin_inset Formula \begin{gather}
 -\int_{V}\sigma_{ij}\sum_{n}c_{i}^{n}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}\sum_{n}c_{i}^{n}N^{n}\, dS+\int_{V}f_{i}\sum_{n}c_{i}^{n}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}\sum_{n}c_{i}^{n}N^{n}\ dV=0,\text{ or}\\
-\sum_{n}c_{i}^{n}(-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}N^{n}\ dV)=0.\end{gather*}
+\sum_{n}c_{i}^{n}(-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}N^{n}\ dV)=0.\end{gather}
 
 \end_inset
 
@@ -946,7 +947,7 @@
 
 
 \begin_inset Formula \begin{equation}
--\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}N^{n}\ dV=\vec{0}.\label{eq:elasticity:integral-1}\end{equation}
+-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}N^{n}\ dV=\vec{0}.\label{eq:elasticity:integral:discretized}\end{equation}
 
 \end_inset
 
@@ -967,11 +968,9 @@
 \bar no
 \noun off
 \color none
-\begin_inset Formula \begin{gather*}
-\sigma_{ij,j}+f_{i}=\rho\ddot{u_{i}}\text{ in }V,\\
-\sigma_{ij}n_{j}=T_{i}\text{ on }S_{T},\\
+\begin_inset Formula \begin{gather}
 u_{i}=u_{i}^{o}\text{ on }S_{u},\text{ and}\\
-R_{ki}(u_{i}^{+}-u_{i}^{-})=d_{k}\text{ on }S_{f},\end{gather*}
+R_{ki}(u_{i}^{+}-u_{i}^{-})=d_{k}\text{ on }S_{f},\end{gather}
 
 \end_inset
 
@@ -979,516 +978,355 @@
 \end_layout
 
 \begin_layout Subsection
-Old
+Vector Notation
 \end_layout
 
 \begin_layout Standard
-Now, 
-\begin_inset Formula $\sigma_{ij}\phi_{i,j}$
-\end_inset
+We start with the wave equation (strong form),
+\end_layout
 
- is a scalar, so it is symmetric,
-\begin_inset Formula \begin{equation}
-\sigma_{ij}\phi_{i,j}=\sigma_{ji}\phi_{j,i},\end{equation}
+\begin_layout Standard
+\begin_inset Formula \begin{gather}
+\nabla\cdot\underline{\sigma}+\overrightarrow{f}=\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\text{ in }V,\\
+\underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T},\\
+\overrightarrow{u}=\overrightarrow{u^{o}}\text{ on }S_{u},\\
+\underbar{R}\cdot(\overrightarrow{u^{+}}-\overrightarrow{u^{-}})=\vec{d}\text{ on }S_{f}\\
+\underline{\sigma}=\underline{\sigma}^{T}\text{ (symmetric).}\end{gather}
 
 \end_inset
 
-and we know that 
-\begin_inset Formula $\sigma_{ij}$
+We construct the weak form by multiplying the wave equation by a weighting
+ function and setting the integral over the domain to zero.
+ The weighting function is a piecewise differential vector field, 
+\begin_inset Formula $\overrightarrow{\phi}$
 \end_inset
 
- is symmetric, so
-\begin_inset Formula \begin{equation}
-\sigma_{ij}\phi_{i,j}=\sigma_{ij}\phi_{j,i},\end{equation}
-
+, where 
+\begin_inset Formula $\overrightarrow{\phi}=0$
 \end_inset
 
-which means
-\begin_inset Formula \begin{equation}
-\phi_{i,j}=\phi_{j,i},\end{equation}
-
+ on 
+\begin_inset Formula $S_{u}.$
 \end_inset
 
-which we can write as
-\begin_inset Formula \begin{equation}
-\phi_{i,j}=\frac{1}{2}(\phi_{i,j}+\phi_{j,i}).\end{equation}
+ Hence our weak form is
+\begin_inset Formula \begin{gather}
+\int_{V}\left(\nabla\cdot\underline{\sigma}+\overrightarrow{f}-\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\right)\cdot\overrightarrow{\phi}\, dV=0\text{, or }\\
+\int_{V}(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}\: dV+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\: dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\: dV=0.\end{gather}
 
 \end_inset
 
-Substituting into the first term gives
-\begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\sigma_{ij}\left(\phi_{i,j}+\phi_{j,i}\right)\, dV+\int_{S}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\, dV=0.\end{equation}
-
+ Consider the divergence theorem applied to the dot product of the stress
+ tensor and the trial function, 
+\begin_inset Formula $\underline{\sigma}\cdot\overrightarrow{\phi}$
 \end_inset
 
-
-\end_layout
-
-\begin_layout Section
-Solution Method for Quasi-Static Problems
-\end_layout
-
-\begin_layout Standard
-In quasi-static problems we neglect the inertial terms, so equation 
-\begin_inset CommandInset ref
-LatexCommand eqref
-reference "eq:elasticity:integral-1"
-
-\end_inset
-
- reduces to
-\begin_inset Formula \[
--\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV=\vec{0}.\]
-
-\end_inset
-
-As a result, time-dependence only enters through the constitutive relationships
- and the loading conditions.
- We consider the deformation at time 
-\begin_inset Formula $t+\Delta t$
-\end_inset
-
 ,
 \begin_inset Formula \begin{equation}
--\int_{V}\sigma_{ij}(t+\Delta t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV=\vec{0}.\label{eq:elasticity:integral:quasistatic}\end{equation}
+\int_{V}\nabla\cdot(\underline{\sigma}\cdot\overrightarrow{\phi})\, dV=\int_{S}(\underline{\sigma}\cdot\overrightarrow{\phi})\cdot\overrightarrow{n}\, dS.\end{equation}
 
 \end_inset
 
-We solve this equation through formulation of a linear algebraic system
- of equations, involving the residual and Jacobian.
- The residual is simply
-\begin_inset Formula \[
-R_{i}^{n}=-\int_{V}\sigma_{ij}(t+\Delta t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV.\]
+Expanding the left-hand side yields
+\begin_inset Formula \begin{equation}
+\int_{V}(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}\: dV+\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\: dV=\int_{S}(\underline{\sigma}\cdot\overrightarrow{\phi})\cdot\overrightarrow{n}\: dS,\text{ or}\end{equation}
 
 \end_inset
 
-We employ numerical quadrature in the finite-element discretization and
- replace the integrals with sums over the cells and quadrature points,
-\begin_inset Formula \[
-R_{i}^{n}=-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\sigma_{ij}(x_{q},t+\Delta t)N_{,j}^{n}(x_{q})\: w_{q}|J_{cell}(x_{q})|+\sum_{\text{vol cells}}\sum_{\text{quad pt}s}f_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|+\sum_{\text{tract cells}}\sum_{\text{quad pts}}T_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|,\]
 
-\end_inset
+\begin_inset Formula \begin{equation}
+\int_{V}(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}\: dV=-\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS.\end{equation}
 
-where 
-\begin_inset Formula $x_{q}$
 \end_inset
 
- are the coordinates of the quadrature points, 
-\begin_inset Formula $w_{q}$
-\end_inset
+Substituting into the weak form gives
+\begin_inset Formula \begin{equation}
+-\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV=0.\end{equation}
 
- are the weights of the quadrature points, and 
-\begin_inset Formula $|J_{cell}(x_{q})|$
 \end_inset
 
- is the determinant of the Jacobian matrix evaluated at the quadrature points
- associated with mapping the reference cell to the actual cell.
- The quadrature scheme for the integral over the tractions is one dimension
- lower than the one used in integrating the terms for the volume cells.
-\end_layout
-
-\begin_layout Standard
-In order to find the Jacobian of the system, we let
-\begin_inset Formula \[
-\sigma_{ij}(t+\Delta t)=\sigma_{ij}(t)+d\sigma_{ij}(t).\]
-
+We separate the integration over 
+\begin_inset Formula $S$
 \end_inset
 
-Substituting into equation 
-\begin_inset CommandInset ref
-LatexCommand eqref
-reference "eq:elasticity:integral:quasistatic"
-
+ into integration over 
+\begin_inset Formula $S_{T}$
 \end_inset
 
- and isolating the term with 
-\begin_inset Formula $d\sigma_{ij}(t)$
+ and 
+\begin_inset Formula $S_{u}$
 \end_inset
 
-, we have
-\begin_inset Note Greyedout
-status open
+,
+\begin_inset Formula \begin{multline}
+-\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\, dV+\int_{S_{T}}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{S_{u}}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV=0,\end{multline}
 
-\begin_layout Plain Layout
-MORE EDITING STARTING HERE
-\end_layout
-
 \end_inset
 
+and recognize that
+\begin_inset Formula \begin{gather}
+\underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T}\text{ and}\\
+\overrightarrow{\phi}=0\text{ on }S_{u},\end{gather}
 
-\begin_inset Formula \[
-\int_{V}d\sigma_{ij}(t)N_{,j}^{n}\ dV=-\int_{V}\sigma_{ij}(t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV.\]
-
 \end_inset
 
+so that the equation reduces to
+\begin_inset Formula \begin{equation}
+-\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\: dV+\int_{S_{T}}\overrightarrow{T}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV=0.\end{equation}
 
-\begin_inset Formula \[
-\int_{V}\frac{1}{2}d\sigma_{ij}(t)(\phi_{i,j}+\phi_{j,i})\: dV=-\int_{V}\frac{1}{2}\sigma_{ij}(t)(\phi_{i,j}+\phi_{j,i})\: dV+\int_{S_{T}}T_{i}(t+\Delta t)\phi_{i}\, dS+\int_{V}f_{i}(t+\Delta t)\phi_{i}\, dV.\]
-
 \end_inset
 
-We use a linear approximation for the change in stress,
-\begin_inset Formula \[
-d\sigma_{ij}(t)=C_{ijkl}d\varepsilon_{kl}(t),\]
+We express the trial solution and weighting function as linear combinations
+ of basis functions,
+\begin_inset Formula \begin{gather}
+\vec{u}=\sum_{m}\overrightarrow{a^{m}}N^{m},\\
+\vec{\phi}=\sum_{n}\overrightarrow{c^{n}}N^{n}.\end{gather}
 
 \end_inset
 
-which leads to
-\begin_inset Formula \[
-\int_{V}\frac{1}{2}C_{ijkl}d\varepsilon(t)(\phi_{i,j}+\phi_{j,i})\: dV=-\int_{V}\frac{1}{2}\sigma_{ij}(t)(\phi_{i,j}+\phi_{j,i})\: dV+\int_{S_{T}}T_{i}(t+\Delta t)\phi_{i}\, dS+\int_{V}f_{i}(t+\Delta t)\phi_{i}\, dV.\]
-
+Note that because the trial solution satisfies the Dirichlet boundary condition,
+ the number of basis functions for 
+\begin_inset Formula $\vec{u}$
 \end_inset
 
-For infinitesimal strains
-\begin_inset Formula \[
-\varepsilon_{kl}(t)=\frac{1}{2}(u_{k,l}(t)+u_{l,k}(t)).\]
-
+ is generally greater than the number of basis functions for 
+\begin_inset Formula $\vec{\phi}$
 \end_inset
 
-We discretize the displacement field using the trial function,
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-Need consistent symbols for discretization.
-\end_layout
-
+, i.e., 
+\begin_inset Formula $m>n$
 \end_inset
 
+.
+ Substituting in the expressions for the trial solution and weighting function
+ yields
+\begin_inset Formula \begin{multline}
+-\int_{V}\underline{\sigma}:\sum_{n}\overrightarrow{c^{n}}\nabla N_{,}^{n}\, dV+\int_{S_{T}}\vec{T}\cdot\sum_{n}\overrightarrow{c^{n}}N^{n}\, dS+\int_{V}\vec{f}\cdot\sum_{n}\overrightarrow{c^{n}}N^{n}\, dV\\
+-\int_{V}\rho\sum_{m}\frac{\partial^{2}\overrightarrow{a^{m}}}{\partial t^{2}}N^{m}\cdot\sum_{n}\overrightarrow{c^{n}}N^{n}\ dV=0.\end{multline}
 
-\begin_inset Formula \[
-u_{i}(t)=\phi_{i}u_{i}(x,t),\]
-
 \end_inset
 
-so that we have
-\begin_inset Formula \[
-\int_{V}\frac{1}{4}C_{ijkl}(\phi_{k,l}+\phi_{l,k})(\phi_{i,j}+\phi_{j,i})\ dV\ du_{i}(x,t)=-\int_{V}\frac{1}{2}\sigma_{ij}(t)(\phi_{i,j}+\phi_{j,i})\: dV+\int_{S_{T}}T_{i}(t+\Delta t)\phi_{i}\, dS+\int_{V}f_{i}(t+\Delta t)\phi_{i}\, dV.\]
-
+ Because the weighting function is arbitrary, this equation must hold for
+ all 
+\begin_inset Formula $\overrightarrow{c^{n}}$
 \end_inset
 
-The Jacobian of the system corresponds to the integral on the left hand
- side,
-\begin_inset Formula \[
-J=\int_{V}\frac{1}{4}C_{ijkl}(\phi_{k,l}+\phi_{l,k})(\phi_{i,j}+\phi_{j,i})\ dV.\]
+, so that
+\begin_inset Formula \begin{equation}
+-\int_{V}\underline{\sigma}:\nabla N^{n}\, dV+\int_{S_{T}}\vec{T}N^{n}\, dS+\int_{V}\vec{f}N^{n}\, dV-\int_{V}\rho\sum_{m}\frac{\partial^{2}\overrightarrow{a^{m}}}{\partial t^{2}}N^{m}N^{n}\, dV=\vec{0}.\end{equation}
 
 \end_inset
 
-The elastic constants 
-\begin_inset Formula $C_{ijkl}$
+We want to solve this equation for the unknown coefficients 
+\begin_inset Formula $\overrightarrow{a^{m}}$
 \end_inset
 
- are associated with the linear perturbation in the stresses for the deformation
- from time 
-\begin_inset Formula $t$
-\end_inset
-
- to 
-\begin_inset Formula $t+\Delta t$
-\end_inset
-
-.
- Applying the same finite-element formulation to the Jacobian that we did
- to the residual, the expression for the Jacobian sparse matrix is
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-Need to refint the finite-element stuff.
+ subject to
 \end_layout
 
-\end_inset
+\begin_layout Standard
 
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+\begin_inset Formula \begin{gather}
+\vec{u}=u^{o}\overrightarrow{}\text{ on }S_{u},\text{ and}\\
+\underline{R}(\overrightarrow{u^{+}}-\overrightarrow{u^{-}})=\vec{d}\text{ on }S_{f},\end{gather}
 
-\begin_inset Formula \[
-J=\sum_{\text{vol cells }}\sum_{\text{quad pts}}\frac{1}{4}C_{ijkl}(\phi_{,l}(x_{q})+\phi_{,k}(x_{q}))(\phi_{,j}(x_{q})+\phi_{,i}(x_{q}))\ w_{q}|J_{m}(x_{q})|\]
-
 \end_inset
 
 
 \end_layout
 
-\begin_layout Subsection
-OLD stuff
+\begin_layout Section
+Solution Method for Quasi-Static Problems
 \end_layout
 
 \begin_layout Standard
-Discretizing into finite elements separates the integral over the domain
- and boundaries into a sum of integrals over elements and element boundaries,
-\begin_inset Formula \begin{equation}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\sigma_{ij}(\phi_{i,j}+\phi_{j,i})\, dV+\int_{V^{e}}\rho\ddot{u}_{i}\phi_{i}\, dV-\int_{V^{e}}f_{i}\phi_{i}\, dV-\int_{S_{t}^{e}}T_{i}\phi_{i}\, dS)=0.\end{equation}
+For brevity we outline the solution method for quasi-static problems using
+ only index notation.
+ In quasi-static problems we neglect the inertial terms, so equation 
+\begin_inset CommandInset ref
+LatexCommand eqref
+reference "eq:elasticity:integral:discretized"
 
 \end_inset
 
-Within an element we represent the fields as a linear combination of a set
- of basis functions and the values of the fields at vertices of the element,
+ reduces to
 \begin_inset Formula \begin{equation}
-a_{i}=N^{m}a_{i}^{m},\end{equation}
+-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV=\vec{0}.\end{equation}
 
 \end_inset
 
-where 
-\begin_inset Formula $N^{m}$
+As a result, time-dependence only enters through the constitutive relationships
+ and the loading conditions.
+ We considers deformation at time 
+\begin_inset Formula $t+\Delta t$
 \end_inset
 
- is the 
-\begin_inset Formula $m$
-\end_inset
+,
+\begin_inset Formula \begin{equation}
+-\int_{V}\sigma_{ij}(t+\Delta t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV=\vec{0}.\label{eq:elasticity:integral:quasistatic}\end{equation}
 
-th basis function for an element and 
-\begin_inset Formula $a_{i}^{m}$
 \end_inset
 
- is the field at vertex 
-\begin_inset Formula $m$
+We solve this equation through formulation of a linear algebraic system
+ of equations (
+\begin_inset Formula $Au=b$
 \end_inset
 
-.
- Rewriting the trial functions and displacement field in terms of the basis
- functions gives
-\begin_inset Formula \begin{gather}
-\phi_{i}=N^{m},\text{ and}\\
-u_{i}=N^{m}u_{i}^{m}.\end{gather}
-
+), involving the residual (
+\begin_inset Formula $r=b-Au$
 \end_inset
 
-We force the weak form to hold for each component in the vector space.
- Substituting into the integral equation, for basis function 
-\begin_inset Formula $N^{p}$
+) and Jacobian (
+\begin_inset Formula $A$
 \end_inset
 
- and component 
-\begin_inset Formula $i$
-\end_inset
-
-, we have
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\sigma_{ij}(N_{,j}^{p}+N_{,i}^{p})\, dV+\int_{V^{e}}\rho N_{}^{p}\sum_{q}N_{}^{q}\ddot{u}_{i}^{q}\: dV-\int_{V^{e}}N_{}^{p}f_{i}\: dV-\int_{S_{T}^{e}}N_{}^{p}T_{i}\, dS)=0.\end{multline}
-
-\end_inset
-
-For the specific case of a linearly elastic material, 
+).
+ The residual is simply
 \begin_inset Formula \begin{equation}
-\sigma_{ij}=C_{ijkl}\epsilon_{kl},\end{equation}
+r_{i}^{n}=-\int_{V}\sigma_{ij}(t+\Delta t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV.\end{equation}
 
 \end_inset
 
-and for infinitesimal strains, 
-\begin_inset Formula \begin{equation}
-\epsilon_{ij}=\frac{1}{2}\left(u_{i,j}+u_{j,i}\right),\end{equation}
+We employ numerical quadrature in the finite-element discretization and
+ replace the integrals with sums over the cells and quadrature points,
+\begin_inset Formula \begin{multline}
+r_{i}^{n}=-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\sigma_{ij}(x_{q},t+\Delta t)N_{,j}^{n}(x_{q})\: w_{q}|J_{cell}(x_{q})|+\sum_{\text{vol cells}}\sum_{\text{quad pt}s}f_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|\\
++\sum_{\text{tract cells}}\sum_{\text{quad pts}}T_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|,\end{multline}
 
 \end_inset
 
-so in this case our integral equation becomes 
-\begin_inset Formula \begin{equation}
-\sum_{elements}(\int_{V^{e}}\frac{1}{4}(N_{,j}^{p}+N_{,i}^{p})C_{ijkl}\left(N_{,k}^{q}u_{l}^{q}+N_{,l}^{q}u_{k}^{q}\right)\, dV+\int_{V^{e}}\rho N_{}^{p}\sum_{q}N_{}^{q}\ddot{u}_{i}^{q}\: dV-\int_{V^{e}}N_{}^{p}f_{i}\: dV-\int_{S_{T}^{e}}N_{}^{p}T_{i}\, dS)=0.\end{equation}
-
+where 
+\begin_inset Formula $r_{i}^{n}$
 \end_inset
 
-
-\end_layout
-
-\begin_layout Subsection
-Vector Notation
-\end_layout
-
-\begin_layout Standard
-We start with the wave equation (strong form),
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{gather}
-\nabla\cdot\underline{\sigma}+\overrightarrow{f}=\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\text{ in }V,\\
-\underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T},\\
-\overrightarrow{u}=\overrightarrow{u}^{o}\text{ on }S_{u},\\
-\underline{\sigma}=\underline{\sigma}^{T}\text{ (symmetric).}\end{gather}
-
+ is an 
+\begin_inset Formula $nd$
 \end_inset
 
-We construct the weak form by multiplying the wave equation by a trial function
- and setting the integral over the domain to zero.
- The trial function is a piecewise differential vector field, 
-\begin_inset Formula $\overrightarrow{\phi}$
+ vector (
+\begin_inset Formula $d$
 \end_inset
 
-, where 
-\begin_inset Formula $\overrightarrow{\phi}=0$
+ is the dimension of the vector space) and 
+\begin_inset Formula $i$
 \end_inset
 
- on 
-\begin_inset Formula $S_{u}.$
+ is a vector space component, 
+\begin_inset Formula $x_{q}$
 \end_inset
 
- Hence our weak form is
-\begin_inset Formula \begin{gather}
-\int_{V}\left(\nabla\cdot\underline{\sigma}+\overrightarrow{f}-\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\right)\cdot\overrightarrow{\phi}\, dV=0\text{, or }\\
-\int_{V}(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}\: dV+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\: dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\: dV=0.\end{gather}
-
+ are the coordinates of the quadrature points, 
+\begin_inset Formula $w_{q}$
 \end_inset
 
- Consider the divergence theorem applied to the dot product of the stress
- tensor and the trial function, 
-\begin_inset Formula $\underline{\sigma}\cdot\overrightarrow{\phi}$
+ are the weights of the quadrature points, and 
+\begin_inset Formula $|J_{cell}(x_{q})|$
 \end_inset
 
-,
-\begin_inset Formula \begin{equation}
-\int_{V}\nabla\cdot(\underline{\sigma}\cdot\overrightarrow{\phi})\, dV=\int_{S}(\underline{\sigma}\cdot\overrightarrow{\phi})\cdot\overrightarrow{n}\, dS.\end{equation}
+ is the determinant of the Jacobian matrix evaluated at the quadrature points
+ associated with mapping the reference cell to the actual cell.
+ The quadrature scheme for the integral over the tractions is one dimension
+ lower than the one used in integrating the terms for the volume cells.
+\end_layout
 
-\end_inset
-
-Expanding the left-hand side yields
+\begin_layout Standard
+In order to find the Jacobian of the system, we let
 \begin_inset Formula \begin{equation}
-\int_{V}(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}\: dV+\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\: dV=\int_{S}(\underline{\sigma}\cdot\overrightarrow{\phi})\cdot\overrightarrow{n}\: dS,\text{ or}\end{equation}
+\sigma_{ij}(t+\Delta t)=\sigma_{ij}(t)+d\sigma_{ij}(t).\end{equation}
 
 \end_inset
 
+Isolating the term associated with the increment in stresses yields
+\end_layout
 
+\begin_layout Standard
 \begin_inset Formula \begin{equation}
-\int_{V}{(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}}_{ij,j}\: dV=-\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS.\end{equation}
+\int_{V}d\sigma_{ij}(t)N_{j}^{n}\ dV=-\int_{V}\sigma_{ij}(t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV\end{equation}
 
 \end_inset
 
-Substituting into the weak form gives
-\begin_inset Formula \begin{equation}
--\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\overrightarrow{\phi}\, dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV=0.\end{equation}
+We associate the term on the left-hand-side with the action of the system
+ Jacobian on the increment of the displacement field.
+ We approximate the increment in stresses using linear elasticity and infinitesi
+mal strains,
+\end_layout
 
+\begin_layout Standard
+\begin_inset Formula \begin{gather}
+d\sigma_{ij}(t)=C_{ijkl}(t)d\varepsilon_{kl}(t)\\
+d\sigma_{ij}(t)=\frac{1}{2}C_{ijkl}(t)(du_{k.l}(t)+du_{l,k}(t))\\
+d\sigma_{ij}(t)=\frac{1}{2}C_{ijkl}(t)(\sum_{m}da_{k,l}^{m}(t)N^{m}+\sum_{m}da_{l,k}^{m}(t)N^{m})\end{gather}
+
 \end_inset
 
 Now, 
-\begin_inset Formula $\underline{\sigma}:\nabla\overrightarrow{\phi}$
+\begin_inset Formula $d\sigma_{ij}\phi_{i,j}$
 \end_inset
 
  is a scalar, so it is symmetric,
 \begin_inset Formula \begin{equation}
-{\underline{\sigma}:\nabla\overrightarrow{\phi}=(\underline{\sigma}:\nabla\overrightarrow{\phi})}^{T}=\underline{\sigma}^{T}:\overrightarrow{\phi}^{T}\nabla^{T},\end{equation}
+d\sigma_{ij}\phi_{i,j}=d\sigma_{ji}\phi_{j,i},\end{equation}
 
 \end_inset
 
 and we know that 
-\begin_inset Formula $\underline{\sigma}$
+\begin_inset Formula $d\sigma_{ij}$
 \end_inset
 
  is symmetric, so
 \begin_inset Formula \begin{equation}
-\underline{\sigma}:\nabla\overrightarrow{\phi}=\underline{\sigma}:\overrightarrow{\phi}^{T}\nabla^{T},\end{equation}
+d\sigma_{ij}\phi_{i,j}=d\sigma_{ij}\phi_{j,i},\end{equation}
 
 \end_inset
 
 which means
 \begin_inset Formula \begin{equation}
-\nabla\overrightarrow{\phi}=\overrightarrow{\phi}^{T}\nabla^{T},\end{equation}
+\phi_{i,j}=\phi_{j,i},\end{equation}
 
 \end_inset
 
 which we can write as
 \begin_inset Formula \begin{equation}
-\nabla\overrightarrow{\phi}=\frac{1}{2}(\nabla+\nabla^{T})\overrightarrow{\phi}.\end{equation}
+\phi_{i,j}=\frac{1}{2}(\phi_{i,j}+\phi_{j,i}).\end{equation}
 
 \end_inset
 
-Substituting into the first term gives
-\begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV=0.\end{equation}
+In terms of the basis functions, we have
+\end_layout
 
-\end_inset
-
-Turning our attention to the second term, we separate the integration over
- 
-\begin_inset Formula $S$
-\end_inset
-
- into integration over 
-\begin_inset Formula $S_{T}$
-\end_inset
-
- and 
-\begin_inset Formula $S_{u}$
-\end_inset
-
-,
-\begin_inset Formula \begin{multline}
--\int_{V}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\, dV+\int_{S_{T}}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{S_{u}}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV\\
--\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV=0,\end{multline}
-
-\end_inset
-
-and recognize that
-\begin_inset Formula \begin{gather}
-\underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T}\text{ and}\\
-\overrightarrow{\phi}=0\text{ on }S_{u},\end{gather}
-
-\end_inset
-
-so that the equation reduces to
+\begin_layout Standard
 \begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\: dV+\int_{S_{T}}\overrightarrow{T}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV-\int_{V}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV=0.\end{equation}
+\sum_{n}c_{i}^{n}N_{,j}^{n}=\frac{1}{2}(\sum_{n}c_{i}^{n}N_{,j}^{n}+\sum_{n}c_{j}^{n}N_{,i}^{n}).\end{equation}
 
 \end_inset
 
-This is the equation we want to solve.
- Discretizing into finite elements separates the integral over the domain
- and boundaries into a sum of integrals over elements and element boundaries,
-\begin_inset Formula \begin{equation}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\, dV+\int_{V^{e}}\rho\frac{\partial^{2}\overrightarrow{u}}{\partial t^{2}}\cdot\overrightarrow{\phi}\, dV-\int_{V^{e}}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV-\int_{S_{t}^{e}}\overrightarrow{T}\cdot\overrightarrow{\phi}\, dS)=0.\end{equation}
+Combining these expressions for the increment in stresses and making use
+ of the symmetry of the weighting functions, we find the system Jacobian
+ is
+\end_layout
 
-\end_inset
-
-Within an element we represent the fields as a linear combination of a set
- of basis functions and the values of the fields at vertices of the element,
+\begin_layout Standard
 \begin_inset Formula \begin{equation}
-\overrightarrow{a}=\underline{N}\cdot\overrightarrow{a^{e}},\end{equation}
+A_{ij}^{nm}=\int_{V}\frac{1}{4}C_{ijkl}(N_{,l}^{m}+N_{,k}^{m})(N_{,j}^{n}+N_{,i}^{n})\ dV.\end{equation}
 
 \end_inset
 
-where 
-\begin_inset Formula $\underline{N}$
-\end_inset
-
- are the basis functions for an element and 
-\begin_inset Formula $\overrightarrow{a^{e}}$
-\end_inset
-
- is the field at an element's vertices.
- Rewriting the trial functions and displacement field in terms of the basis
- functions gives
+We employ numerical quadrature in the finite-element discretization and
+ replace the integral with a sum over the cells and quadrature points,
 \begin_inset Formula \begin{equation}
-\overrightarrow{\phi}=\overrightarrow{N},\text{ and}\end{equation}
+A_{ij}^{nm}=\sum_{\text{vol cells}}\sum_{\text{quad pts}}\frac{1}{4}C_{ijkl}(N_{,l}^{m}(x_{q})+N_{,k}^{m}(x_{q}))(N_{,j}^{n}(x_{q})+N_{,i}^{n}(x_{q}))w_{q}|J_{cell}(x_{q}).\end{equation}
 
 \end_inset
 
 
-\begin_inset Formula \begin{equation}
-\overrightarrow{u}=\underline{N}\cdot\overrightarrow{u^{e}}.\end{equation}
-
-\end_inset
-
-Substituting into the integral equation yields
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\underline{N}\, dV+\int_{V^{e}}\rho\underline{N}\cdot\underline{N}\cdot\frac{\partial^{2}\overrightarrow{u^{e}}}{\partial t^{2}}\: dV-\int_{V^{e}}\underline{N}\cdot\overrightarrow{f^{e}}^{}\, dV-\int_{S_{T}}\underline{N}\cdot\overrightarrow{T^{e}}_{}\, dS)=0\end{multline}
-
-\end_inset
-
-For the specific case of a linearly elastic material
-\begin_inset Formula \begin{equation}
-\underline{\sigma}=\underline{C}\cdot\underline{\varepsilon},\end{equation}
-
-\end_inset
-
-and for infinitesimal strains
-\begin_inset Formula \begin{equation}
-\underline{\varepsilon}=\frac{1}{2}(\nabla+\nabla^{T})\overrightarrow{u},\end{equation}
-
-\end_inset
-
-so in this case our integral equation becomes
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{4}(\nabla+\nabla^{T})\underline{N}:C\cdot(\nabla+\nabla^{T})\underline{N}\cdot\overrightarrow{u^{e}})\, dV+\int_{V^{e}}\rho\underline{N}\cdot\underline{N}\cdot\frac{\partial^{2}\overrightarrow{u^{e}}}{\partial t^{2}}\: dV-\int_{V^{e}}\underline{N}\cdot\underline{N}\cdot\overrightarrow{f^{e}}\, dV\\
--\int_{S_{T}}\underline{N}\cdot\underline{N}\cdot\overrightarrow{T^{e}}\, dS)=0.\end{multline}
-
-\end_inset
-
-
 \end_layout
 
 \begin_layout Section
@@ -1496,8 +1334,10 @@
 \end_layout
 
 \begin_layout Standard
-Time-dependence enters through the constitutive relationships, loading condition
-s, and the inertial terms.
+For brevity we outline the solution method for dynamic problems using only
+ index notation.
+ Time-dependence enters through the constitutive relationships, loading
+ conditions, and the inertial terms.
  We consider the deformation at time 
 \begin_inset Formula $t$
 \end_inset
@@ -1509,17 +1349,30 @@
 \end_inset
 
 We solve this equation through formulation of a linear algebraic system
- of equations, involving the residual and Jacobian.
+ of equations (
+\begin_inset Formula $Au=b$
+\end_inset
+
+), involving the residual (
+\begin_inset Formula $r=b-Au$
+\end_inset
+
+) and Jacobian (
+\begin_inset Formula $A$
+\end_inset
+
+).
  The residual is simply
-\begin_inset Formula \[
-R_{n}=-\int_{V}\sigma_{ij}(t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t)N^{n}\, dS+\int_{V}f_{i}(t)N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}(t)N^{m}N^{n}\ dV.\]
+\begin_inset Formula \begin{equation}
+r_{i}^{n}=-\int_{V}\sigma_{ij}(t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t)N^{n}\, dS+\int_{V}f_{i}(t)N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}(t)N^{m}N^{n}\ dV.\end{equation}
 
 \end_inset
 
 We employ numerical quadrature in the finite-element discretization and
  replace the integrals with sums over the cells and quadrature points,
-\begin_inset Formula \[
-R_{n}=-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\sigma_{ij}(x_{q},t)N^{n}(x_{q})\: w_{q}|J_{cell}(x_{q})|+\sum_{\text{vol cells}}\sum_{\text{quad pt}s}f_{i}(x_{q},t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|+\sum_{\text{tract cells}}\sum_{\text{quad pts}}T_{i}(x_{q},t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\rho\sum_{m}\ddot{a}_{i}^{m}(t)N^{m}N^{n}\ w_{q|J_{cell}(x_{q})},\]
+\begin_inset Formula \begin{multline}
+r_{i}^{n}=-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\sigma_{ij}(x_{q},t)N^{n}(x_{q})\: w_{q}|J_{cell}(x_{q})|+\sum_{\text{vol cells}}\sum_{\text{quad pt}s}f_{i}(x_{q},t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|\\
++\sum_{\text{tract cells}}\sum_{\text{quad pts}}T_{i}(x_{q},t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\rho\sum_{m}\ddot{a}_{i}^{m}(t)N^{m}N^{n}\ w_{q|J_{cell}(x_{q})},\end{multline}
 
 \end_inset
 
@@ -1539,11 +1392,22 @@
  associated with mapping the reference cell to the actual cell.
  The quadrature scheme for the integral over the tractions is one dimension
  lower than the one used in integrating the terms for the volume cells.
+ 
+\end_layout
+
+\begin_layout Standard
+We find the system Jacobian matrix by making use of the temporal discretization
+ and isolating the term for the increment in the displacement field at time
+ 
+\begin_inset Formula $t$
+\end_inset
+
+.
  Using the central difference method to approximate the acceleration (and
  velocity),
 \begin_inset Formula \begin{gather}
-\ddot{u}_{i}=\frac{1}{\Delta t^{2}}\left(u_{i}(t+\Delta t)-2u_{i}(t)+u_{i}(t-\Delta t)\right)\\
-\dot{u}_{i}=\frac{1}{2\Delta t}\left(u_{i}(t+\Delta t)-u_{i}(t-\Delta t)\right)\end{gather}
+\ddot{u}_{i}(t)=\frac{1}{\Delta t^{2}}\left(u_{i}(t+\Delta t)-2u_{i}(t)+u_{i}(t-\Delta t)\right)\\
+\dot{u}_{i}(t)=\frac{1}{2\Delta t}\left(u_{i}(t+\Delta t)-u_{i}(t-\Delta t)\right)\end{gather}
 
 \end_inset
 
@@ -1556,57 +1420,65 @@
 \end_inset
 
  (for consistency with the displacement increment quasi-static formulation),
-\begin_inset Formula \begin{gather*}
+\begin_inset Formula \begin{gather}
 u_{i}(t+\Delta t)=u_{i}(t)+du_{i}(t),\\
-\ddot{u}_{i}=\frac{1}{\Delta t^{2}}\left(du_{i}(t)-u_{i}(t)+u_{i}(t-\Delta t)\right),\\
-\dot{u}_{i}=\frac{1}{2\Delta t}\left(du_{i}(t)+u_{i}(t)-u_{i}(t-\Delta t)\right),\end{gather*}
+\ddot{u}_{i}(t)=\frac{1}{\Delta t^{2}}\left(du_{i}(t)-u_{i}(t)+u_{i}(t-\Delta t)\right),\\
+\dot{u}_{i}(t)=\frac{1}{2\Delta t}\left(du_{i}(t)+u_{i}(t)-u_{i}(t-\Delta t)\right).\end{gather}
 
 \end_inset
 
-we have
-\begin_inset Formula \[
-\frac{1}{\Delta t^{2}}\int_{V}\rho\sum_{m}da_{i}^{m}(t)N^{m}N^{n}\ dV=-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\frac{1}{\Delta t^{2}}\int_{V}\rho\sum_{m}(a_{i}^{m}(t)-a_{i}^{m}(t-\Delta t))N^{m}N^{n}\ dV.\]
+Substituting into equation 
+\begin_inset CommandInset ref
+LatexCommand eqref
+reference "eq:elasticity:integral:dynamic:t"
 
 \end_inset
 
-Thus, the Jacobian for the system is
-\begin_inset Note Greyedout
-status open
+ yields
+\begin_inset Formula \begin{multline}
+\frac{1}{\Delta t^{2}}\int_{V}\rho\sum_{m}da_{i}^{m}(t)N^{m}N^{n}\ dV=-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV\\
+-\frac{1}{\Delta t^{2}}\int_{V}\rho\sum_{m}(a_{i}^{m}(t)-a_{i}^{m}(t-\Delta t))N^{m}N^{n}\ dV.\end{multline}
 
-\begin_layout Plain Layout
-Add absorbing boundary and fault terms.
-\end_layout
+\end_inset
 
+Thus, the Jacobian for the system is
+\begin_inset Formula \begin{equation}
+A_{ij}^{nm}=\delta_{ij}\frac{1}{\Delta t^{2}}\int_{V}\rho N^{m}N^{n}\ dV,\end{equation}
+
 \end_inset
 
+and using numerical quadrature in the finite-element discretization to replace
+ the integrals with sums over the cells and quadrature points,
+\end_layout
 
-\begin_inset Formula \[
-J_{ij}^{pq}=\delta_{ij}\int_{_{V}}\rho N^{p}N^{q}\ dV,\]
+\begin_layout Standard
+\begin_inset Formula \begin{equation}
+A_{ij}^{nm}=\delta_{ij}\frac{1}{\Delta t^{2}}\sum_{\text{vol cells}}\sum_{\text{quad pts}}\rho(x_{q})N^{m}(x_{q})N^{n}(x_{q}),\end{equation}
 
 \end_inset
 
 where 
-\begin_inset Formula $J_{ij}^{pq}$
+\begin_inset Formula $A_{ij}^{mn}$
 \end_inset
 
  is a 
-\begin_inset Formula $pn$
+\begin_inset Formula $nd$
 \end_inset
 
  by 
-\begin_inset Formula $qn$
+\begin_inset Formula $md$
 \end_inset
 
  matrix (
-\begin_inset Formula $n$
+\begin_inset Formula $d$
 \end_inset
 
  is the dimension of the vector space), 
-\begin_inset Formula $p$
+\begin_inset Formula $m$
 \end_inset
 
  and 
-\begin_inset Formula $q$
+\begin_inset Formula $n$
 \end_inset
 
  refer to the basis functions and 
@@ -1618,245 +1490,211 @@
 \end_inset
 
  are vector space components.
-\end_layout
+ We consider the contributions associated with the fault in section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:fault"
 
-\begin_layout Section
-Solution Method for Quasi-Static Problems
-\end_layout
+\end_inset
 
-\begin_layout Standard
-For quasi-static problems, time-dependence only enters through the constitutive
- relationships and the loading conditions.
- We consider a general class of quasi-static viscoelastic models under the
- assumption of infinitesimal strain, and the methods we derive are also
- appropriate for viscoplastic behavior.
- The stresses are considered to be a function of the total strains and possibly
- of other variables as well:
-\begin_inset Formula \begin{equation}
-\sigma_{ij}=h_{ij}\left(\epsilon_{ij},q_{k}\right)+\sigma_{ij}^{0}.\end{equation}
+ and with absorbing boundaries is section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:absorbing:boundaries"
 
 \end_inset
 
-The strains are given by 
-\begin_inset Formula $\varepsilon_{ij}$
-\end_inset
+.
+\end_layout
 
-, while the 
-\begin_inset Formula $q_{k}$
+\begin_layout Section
+Small Strain Formulation
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:Small-Strain-Formulation"
+
 \end_inset
 
- represent additional variables upon which the stress depends.
- These additional variables follow the evolution equations
-\begin_inset Formula \begin{equation}
-q_{k}=r_{k}\left(\epsilon_{ij},q_{k}\right),\end{equation}
 
-\end_inset
+\end_layout
 
-with the initial conditions 
-\begin_inset Formula $q_{k}\left(t_{0}\right)=q_{k}^{0}$
+\begin_layout Standard
+In some crustal deformation problems sufficient deformation may occur that
+ the assumptions associated with infinitesimal strains no longer hold.
+ This is often the case for problems when one wants to include the effects
+ of gravitational body forces and deformation on the overburden pressure.
+ In such cases we want to account for both rigid body motion and small strains.
+ The elasticity formulation in PyLith for small strains uses the Green-Lagrange
+ strain tensor and the Second Piola-Kirchhoff stress tensor as is based
+ on the one presented by Bathe 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Bathe:1995"
+
 \end_inset
 
 .
- The 
-\begin_inset Formula $\sigma_{ij}^{0}$
+ The Green-Lagrange strain provides a measure of the strain relative to
+ the original, undeformed configuration.
+\begin_inset Formula \begin{gather}
+\varepsilon_{ij}=\frac{1}{2}(u_{i,j}+u_{j,i}+u_{k,i}u_{k,i}),\text{ or}\\
+\varepsilon_{ij}=X_{ji}X_{ij}-\delta_{ij},\text{ where}\\
+X_{ij}=x_{i,j}(t)=\frac{\partial}{\partial x_{j}}(x_{i}(0)+u_{i}(t)),\end{gather}
+
 \end_inset
 
- are the initial stresses in the material.
- The strain tensor is given by
-\end_layout
+and 
+\begin_inset Formula $X_{ij}$
+\end_inset
 
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\varepsilon_{ij}=\frac{1}{2}\left(u_{i,j}+u_{j,i}\right).\end{equation}
-
+ is the deformation tensor.
+ The Second Piola-Kirchhoff stress tensor, 
+\begin_inset Formula $S_{ij}$
 \end_inset
 
-The stress can be either a linear or nonlinear function of strain and the
- additional variables, and in some cases the additional variables are not
- needed.
- In linear elastic behavior in the absence of initial stresses, for example,
- the stress is linearly dependent on the strain and there are no additional
- variables.
+, is related to the Green-Lagrange strain tensor through the elasticity
+ constants,
 \end_layout
 
 \begin_layout Standard
-For quasi-static problems, there are no acceleration or momentum terms,
- and the equation of interest simplifies to
 \begin_inset Formula \begin{equation}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\sigma_{ij}(N_{,j}^{p}+N_{,i}^{p})\, dV-\int_{V^{e}}N_{}^{p}f_{i}\: dV-\int_{S_{T}^{e}}N_{}^{p}T_{i}\, dS)=\overrightarrow{0}.\end{equation}
+S_{ij}=C_{ijkl}\varepsilon_{kl},\end{equation}
 
 \end_inset
 
-The first term in this equation represents the internal forces within an
- element, the second term represents the contribution from externally-applied
- body forces, and the third term represents the contribution from externally-app
-lied tractions.
+in the same manner as in the infinitesimal strain formulation.
 \end_layout
 
 \begin_layout Standard
-We define the tangent constitutive operator as
-\begin_inset Formula \begin{equation}
-C_{ijkl}=\frac{\partial\sigma_{ij}}{\partial\epsilon_{kl}},\end{equation}
-
+The elasticity integral in the finite-element formulation includes additional
+ terms when we account for small strains.
+ Recognizing the similarity between the weighting function and an increment
+ in strain in the infinitesimal formulation (many finite-element texts derive
+ the finite-element formulation for elasticity using the Principle of Virtual
+ Work), we replace 
+\begin_inset Formula $\int_{V}\sigma_{ij}\phi_{i,j}\: dV$
 \end_inset
 
-where 
-\begin_inset Formula $\sigma_{ij}$
+ with 
+\begin_inset Formula $\int_{V}S_{ij}\delta\varepsilon_{ij}\: dV$
 \end_inset
 
- and 
-\begin_inset Formula $\epsilon_{kl}$
-\end_inset
+ in equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:elasticity:integral"
 
- are the stresses and strains at any given time step.
- For an elastic problem in which the stress is linearly dependent on the
- strain, this allows the stress-strain relationship to be written
-\begin_inset Formula \begin{equation}
-\sigma_{ij}=C_{ijkl}\epsilon_{kl}+\sigma_{ij}^{0},\end{equation}
-
 \end_inset
 
-and we then obtain
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{4}(N_{,j}^{p}+N_{,i}^{p})C_{ijkl}\left(N_{,l}^{q}+N_{,k}^{q}\right)\, dV)\overrightarrow{U}=\\
-\sum_{elements}\left(\int_{V^{e}}N_{}^{p}f_{i}\: dV+\int_{S_{T}^{e}}N^{p}T_{i}\, dS-\int_{V^{e}}\frac{1}{2}\sigma_{ij}^{0}(N_{,j}^{p}+N_{,i}^{p})\: dV\right),\end{multline}
-
+, where 
+\begin_inset Formula $\delta\varepsilon_{ij}$
 \end_inset
 
-where 
-\begin_inset Formula $\overrightarrow{u}$
+ is the 
+\begin_inset Quotes eld
 \end_inset
 
- is the global displacement vector for all nodes in the finite element mesh.
- This leads to the global matrix problem
-\begin_inset Formula \begin{equation}
-\underline{K}\overrightarrow{u}=\overrightarrow{B}_{b}+\overrightarrow{B}_{t}-\overrightarrow{B}_{i},\end{equation}
-
+virtual
+\begin_inset Quotes erd
 \end_inset
 
-or
+ strain.
+ Using the definition of the Green-Lagrangian strain, we have
 \begin_inset Formula \begin{equation}
-\underline{K}\overrightarrow{u}=\overrightarrow{B}_{ext}-\overrightarrow{B}_{i}.\end{equation}
+\int_{V}S_{ij}\delta\varepsilon_{ij}\: dV=\int_{V}\frac{1}{2}S_{ij}(\delta u_{i,j}+\delta u_{j,i}+u_{k,i}\delta u_{k,j}+u_{k,j}\delta u_{k,i})\: dV.\end{equation}
 
 \end_inset
 
-The matrix 
-\begin_inset Formula $\underline{K}$
+Writing the displacements in terms of the basis functions and forcing the
+ terms associated with the arbitrary weighting function (
+\begin_inset Quotes eld
 \end_inset
 
- is the global stiffness matrix, and the vectors 
-\begin_inset Formula $\overrightarrow{B}\hphantom{}_{b}$
+virtual
+\begin_inset Quotes erd
 \end_inset
 
-, 
-\begin_inset Formula $\overrightarrow{B}\hphantom{}_{t}$
-\end_inset
+ strain) to zero yields the elastic term in the residual,
+\begin_inset Formula \begin{equation}
+r_{i}^{n}=\int_{V}S_{ij}(N_{,i}^{n}+(\sum_{m}a_{k}^{m}N_{,j}^{m})N_{,i}^{n})\: dV.\end{equation}
 
-, and 
-\begin_inset Formula $\overrightarrow{B}\hphantom{}_{i}$
 \end_inset
 
- represent the nodal force contributions from body forces, surface tractions,
- and initial stresses, respectively.
- The forces due to body forces and surface tractions represent the externally
- applied forces, given by 
-\begin_inset Formula $\overrightarrow{B}\hphantom{}_{ext}$
-\end_inset
+Thus, we have one additional term (the second term) compared with the residual
+ for infinitesimal strains.
+ Just as in the infinitesimal formulation, we evaluate the integral over
+ the volume using numerical quadrature with sums over the quadrature points
+ of each cell.
+\end_layout
 
-.
- This linear, sparse system may be solved by a number of available methods.
+\begin_layout Subsection
+Quasi-static Problems
 \end_layout
 
 \begin_layout Standard
-We are interested in computing the solution at time 
+The system Jacobian for quasi-static problems includes terms associated
+ with elasticity.
+ For the small strain formulation, we write the elasticity term at time
+ 
 \begin_inset Formula $t+\Delta t$
 \end_inset
 
-, given the solution at time 
-\begin_inset Formula $t$
-\end_inset
-
-.
- An equilibrium solution will balance the internal forces
+ and consider the first terms of the Taylor series expansion,
 \begin_inset Formula \begin{equation}
-\overrightarrow{B}\hphantom{}_{int}=\sum_{elements}(\int_{V^{e}}\frac{1}{2}\sigma_{ij}(N_{,j}^{p}+N_{,i}^{p})\, dV)\label{eq:qs-internal-force}\end{equation}
+\int_{v}S_{ij}(t+\Delta t)\delta\varepsilon_{ij}(t+\Delta t)\: dV=\int_{V}(S_{ij}(t)\delta\varepsilon_{ij}(t)+dS_{ij}(t)\delta\varepsilon_{ij}(t)+S_{ij}(t)d\delta\varepsilon_{ij}(t))\: dV.\end{equation}
 
 \end_inset
 
-with the external forces for any given time:
+We approximate the increment in the stress tensor using the elastic constants,
 \begin_inset Formula \begin{equation}
-\overrightarrow{F}(t+\Delta t)=\overrightarrow{B}_{ext}(t+\Delta t)-\overrightarrow{B}_{int}(t+\Delta t)=\overrightarrow{0}.\label{eq:qs-force-balance}\end{equation}
+dS_{ij}=C_{ijkl}d\varepsilon_{kl},\end{equation}
 
 \end_inset
 
-Note that the internal forces include the effects of initial stresses.
- Iterative methods such as Newton-Raphson may be used to solve Equation
- 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:qs-force-balance"
-
+and the increment in the 
+\begin_inset Quotes eld
 \end_inset
 
- for the unknown internal forces at time 
-\begin_inset Formula $t+\Delta t$
+virtual
+\begin_inset Quotes erd
 \end_inset
 
-.
- Since the internal forces at time 
-\begin_inset Formula $t$
-\end_inset
-
- are known, we have
+ strain via
 \begin_inset Formula \begin{equation}
-\overrightarrow{B}_{int}(t+\Delta t)=\overrightarrow{B}_{int}(t)+\Delta\overrightarrow{B}_{int}(t),\end{equation}
+d\delta\varepsilon_{ij}=\frac{1}{2}(du_{k,i}\delta u_{k,j}+du_{k,j}\delta u_{k,i}).\end{equation}
 
 \end_inset
 
-where 
-\family roman
-\series medium
-\shape up
-\size normal
-\emph off
-\bar no
-\noun off
-\color none
-
-\begin_inset Formula $\Delta\overrightarrow{B}_{int}(t)$
+We associate the system Jacobian with the terms involving the increment
+ in displacements.
+ After substituting in the expressions for the increment in the stresses
+ and the increment in the 
+\begin_inset Quotes eld
 \end_inset
 
- is the increment in nodal point forces corresponding to the increment in
- element displacements and stresses.
- This vector may be approximated as
-\begin_inset Formula \begin{equation}
-\Delta\overrightarrow{B}_{int}(t)\approx\underline{K}(t+\Delta t)\Delta\overrightarrow{u}(t),\end{equation}
-
+virtual
+\begin_inset Quotes erd
 \end_inset
 
-where 
-\begin_inset Formula $\Delta\overrightarrow{u}$
-\end_inset
-
- is a vector of displacement increments and
+ strains, we have
 \begin_inset Formula \begin{equation}
-\underline{K}(t+\Delta t)=-\frac{\partial\overrightarrow{F}(t+\Delta t)}{\partial\overrightarrow{u}(t+\Delta t)}=\frac{\partial\overrightarrow{B}_{int}(t+\Delta t)}{\partial\overrightarrow{u}(t+\Delta t)}=\sum_{elements}(\int_{V^{e}}\frac{1}{4}(N_{,j}^{p}+N_{,i}^{p})C_{ijkl}^{t+\Delta t}\left(N_{,l}^{q}+N_{,k}^{q}\right)\, dV).\end{equation}
+A_{ij}^{nm}=\int_{V}\frac{1}{4}C_{ijkl}(N_{,k}^{m}+(\sum_{r}a_{p}^{r}N_{,l}^{r})N_{,k}^{m})(N_{,i}^{n}+(\sum_{r}a_{p}^{r}N_{,j}^{r})N_{,i}^{n})+\frac{1}{2}S_{kl}N_{,l}^{m}N_{,l}^{n}\delta_{ij}\: dV.\end{equation}
 
 \end_inset
 
-Note that for a linear problem, the stiffness matrix remains constant, and
- no iterations are necessary.
- For a nonlinear problem, we begin the iterations using the stiffness matrix
- at time 
-\begin_inset Formula $t$
-\end_inset
+The small strain formulation produces additional terms associated with the
+ elastic constants and new a new term associated with the stress tensor.
+\end_layout
 
-, and recompute at specified iterations using the current estimates of stress,
- strain, and other state variables.
+\begin_layout Subsection
+Dynamic Problems
 \end_layout
 
+\begin_layout Standard
+The system Jacobian matrix in dynamic problems does not include any terms
+ associated with elasticity, so the system Jacobian matrix in the small
+ strain formulation matches the one used in the infinitesimal strain formulation.
+\end_layout
+
 \end_body
 \end_document

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/qstatic-smalldef.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/qstatic-smalldef.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/qstatic-smalldef.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,1306 +0,0 @@
-#LyX 1.4.4 created this file. For more info see http://www.lyx.org/
-\lyxformat 245
-\begin_document
-\begin_header
-\textclass article
-\language english
-\inputencoding auto
-\fontscheme default
-\graphics default
-\paperfontsize default
-\spacing single
-\papersize default
-\use_geometry true
-\use_amsmath 1
-\cite_engine basic
-\use_bibtopic false
-\paperorientation portrait
-\leftmargin 1in
-\topmargin 1in
-\rightmargin 1in
-\bottommargin 1in
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\defskip medskip
-\quotes_language english
-\papercolumns 1
-\papersides 1
-\paperpagestyle default
-\tracking_changes false
-\output_changes false
-\end_header
-
-\begin_body
-
-\begin_layout Section
-Governing Equations
-\end_layout
-
-\begin_layout Standard
-\begin_inset Tabular
-<lyxtabular version="3" rows="10" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true">
-<cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Symbol
-\end_layout
-
-\end_inset
-</cell>
-<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Index notation
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Vector notation
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $a_{i}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\overrightarrow{a}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Vector field a
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $a_{ij}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\underline{a}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Second order tensor field a
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $u_{i}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\overrightarrow{u}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Displacement vector field
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $f_{i}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\overrightarrow{f}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Body force vector field
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $T_{i}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\overrightarrow{T}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Traction vector field
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\sigma_{ij}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\underline{\sigma}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Stress tensor field
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $n_{i}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\overrightarrow{n}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Normal vector field
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\rho$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\rho$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Mass density scalar field
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Constitutive Model
-\end_layout
-
-\begin_layout Subsubsection
-Index Notation
-\end_layout
-
-\begin_layout Standard
-We consider a general class of quasi-static viscoelastic models under the
- assumption of infinitesimal strain, and the methods we derive are also
- appropriate for viscoplastic behavior.
- The stresses are considered to be a function of the total strains and possibly
- of other variables as well:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\sigma_{ij}=h_{ij}\left(\varepsilon_{ij},q_{k}\right)+\sigma_{ij}^{0}.\end{equation}
-
-\end_inset
-
-The strains are given by 
-\begin_inset Formula $\varepsilon_{ij}$
-\end_inset
-
-, while the 
-\begin_inset Formula $q_{k}$
-\end_inset
-
- represent additional variables upon which the stress depends.
- These additional variables follow the evolution equations
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\dot{q_{k}}=r_{k}\left(\varepsilon_{ij},q_{k}\right),\end{equation}
-
-\end_inset
-
-with the initial conditions 
-\begin_inset Formula $q_{k}\left(t_{0}\right)=q_{k}^{0}$
-\end_inset
-
-.
- The 
-\begin_inset Formula $\sigma_{ij}^{0}$
-\end_inset
-
- are the initial stresses in the material.
- To simplify our derivations, we consider the initial stresses to be included
- in the additional variables, 
-\begin_inset Formula $q_{k}$
-\end_inset
-
-.
- The strain tensor is given by
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\varepsilon_{ij}=\frac{1}{2}\left(u_{i,j}+u_{j,i}\right).\end{equation}
-
-\end_inset
-
-The stress can be either a linear or nonlinear function of strain and the
- additional variables, and in some cases the additional variables are not
- needed.
- In linear elastic behavior in the absence of initial stresses, for example,
- the stress is linearly dependent on the strain and there are no additional
- variables.
-\end_layout
-
-\begin_layout Subsubsection
-Vector Notation
-\end_layout
-
-\begin_layout Standard
-We consider a general class of quasi-static viscoelastic models under the
- assumption of infinitesimal strain, and the methods we derive are also
- appropriate for viscoplastic behavior.
- The stresses are considered to be a function of the total strains and possibly
- of other variables as well:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\boldsymbol{\underline{\sigma}}=\boldsymbol{\underline{h}}\left(\boldsymbol{\underline{\varepsilon}},\boldsymbol{q}\right)+\boldsymbol{\sigma}_{0}.\end{equation}
-
-\end_inset
-
-The strains are given by 
-\begin_inset Formula $\boldsymbol{\underline{\varepsilon}}$
-\end_inset
-
-, while the 
-\begin_inset Formula $\boldsymbol{q}$
-\end_inset
-
- represent additional variables upon which the stress depends.
- These additional variables follow the evolution equations
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\dot{\boldsymbol{q}}=\boldsymbol{r}\left(\boldsymbol{\underline{\varepsilon}},\boldsymbol{q}\right),\end{equation}
-
-\end_inset
-
-with the initial conditions 
-\begin_inset Formula $\boldsymbol{q}\left(t_{0}\right)=\boldsymbol{q}_{0}$
-\end_inset
-
-.
- The 
-\begin_inset Formula $\underline{\boldsymbol{\sigma}}_{0}$
-\end_inset
-
- are the initial stresses in the material.
- To simplify our derivations, we consider the initial stresses to be included
- in the additional variables, 
-\begin_inset Formula $\boldsymbol{q}$
-\end_inset
-
-.
- The strain tensor is given by
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\boldsymbol{\underline{\varepsilon}}=\frac{1}{2}\left(\boldsymbol{\bigtriangledown}\boldsymbol{u}+\boldsymbol{\bigtriangledown}^{T}\boldsymbol{u}\right).\end{equation}
-
-\end_inset
-
-The stress can be either a linear or nonlinear function of strain and the
- additional variables, and in some cases the additional variables are not
- needed.
- In linear elastic behavior in the absence of initial stresses, for example,
- the stress is linearly dependent on the strain and there are no additional
- variables.
-\end_layout
-
-\begin_layout Subsection
-Derivation of Equilibrium Equations
-\end_layout
-
-\begin_layout Subsubsection
-Index Notation
-\end_layout
-
-\begin_layout Standard
-Consider volume 
-\begin_inset Formula $V$
-\end_inset
-
- bounded by surface 
-\begin_inset Formula $S$
-\end_inset
-
-.
- Applying a Lagrangian description of the conservation of momentum (in the
- absence of accelerations) gives
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\int_{V}f_{i}\, dV+\int_{S}T_{i}\, dS=0.\label{eqn:momentum:index}\end{equation}
-
-\end_inset
-
-The traction vector field is related to the stress tensor through
-\begin_inset Formula \begin{equation}
-T_{i}=\sigma_{ij}n_{j},\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $n_{j}$
-\end_inset
-
- is the vector normal to 
-\begin_inset Formula $S$
-\end_inset
-
-.
- Substituting into 
-\begin_inset LatexCommand \eqref{eqn:momentum:index}
-
-\end_inset
-
- yields
-\begin_inset Formula \begin{equation}
-\int_{V}f_{i}\, dV+\int_{S}\sigma_{ij}n_{j}\, dS=0.\end{equation}
-
-\end_inset
-
-Applying the divergence theorem,
-\begin_inset Formula \begin{equation}
-\int_{V}a_{i,j}\: dV=\int_{S}a_{j}n_{j}\: dS,\end{equation}
-
-\end_inset
-
-to the surface integral results in
-\begin_inset Formula \begin{equation}
-\int_{V}f_{i}\, dV+\int_{V}\sigma_{ij,j}\, dV=0,\end{equation}
-
-\end_inset
-
-which we can rewrite as
-\begin_inset Formula \begin{equation}
-\int_{V}\left(f_{i}+\sigma_{ij,j}\right)\, dV=0.\end{equation}
-
-\end_inset
-
-Because the volume 
-\begin_inset Formula $V$
-\end_inset
-
- is arbitrary, the integrand must be zero at every location in the volume,
- so that we end up with
-\begin_inset Formula \begin{gather}
-f_{i}+\sigma_{ij,j}=0\text{ in }V,\\
-\sigma_{ij}n_{j}=T_{i}\text{ on }S_{T}\text{, and}\\
-u_{i}=u_{i}^{o}\text{ on }S_{u.}\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Note that since both 
-\begin_inset Formula $T_{i}$
-\end_inset
-
- and 
-\begin_inset Formula $u_{i}$
-\end_inset
-
- are vector quantities, there can be some spatial overlap of the conceptual
- surfaces 
-\begin_inset Formula $S_{T}$
-\end_inset
-
- and 
-\begin_inset Formula $S_{u}$
-\end_inset
-
-; however, the same degree of freedom cannot simultaneously have both types
- of boundary conditions.
-\end_layout
-
-\begin_layout Subsubsection
-Vector Notation
-\end_layout
-
-\begin_layout Standard
-Consider volume 
-\begin_inset Formula $V$
-\end_inset
-
- bounded by surface 
-\begin_inset Formula $S$
-\end_inset
-
-.
- Applying a Lagrangian description of the conservation of momentum (in the
- absence of accelerations) gives
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\int_{V}\overrightarrow{f}\, dV+\int_{S}\overrightarrow{T}\, dS=0.\label{eqn:momentum:vec}\end{equation}
-
-\end_inset
-
-The traction vector field is related to the stress tensor through
-\begin_inset Formula \begin{equation}
-\overrightarrow{T}=\underline{\sigma}\cdot\overrightarrow{n},\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\overrightarrow{n}$
-\end_inset
-
- is the vector normal to 
-\begin_inset Formula $S$
-\end_inset
-
-.
- Substituting into 
-\begin_inset LatexCommand \eqref{eqn:momentum:vec}
-
-\end_inset
-
- yields
-\begin_inset Formula \begin{equation}
-\int_{V}\overrightarrow{f}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\, dS=0.\end{equation}
-
-\end_inset
-
-Applying the divergence theorem,
-\begin_inset Formula \begin{equation}
-\int_{V}\nabla\cdot\overrightarrow{a}\: dV=\int_{S}\overrightarrow{a}\cdot\overrightarrow{n}\: dS,\end{equation}
-
-\end_inset
-
-to the surface integral results in
-\begin_inset Formula \begin{equation}
-\int_{V}\overrightarrow{f}\, dV+\int_{V}\nabla\cdot\underline{\sigma}\, dV=0,\end{equation}
-
-\end_inset
-
-which we can rewrite as
-\begin_inset Formula \begin{equation}
-\int_{V}\left(\overrightarrow{f}+\nabla\cdot\overrightarrow{\sigma}\right)\, dV=0.\end{equation}
-
-\end_inset
-
-Because the volume 
-\begin_inset Formula $V$
-\end_inset
-
- is arbitrary, the integrand must be zero at every location in the volume,
- so that we end up with
-\begin_inset Formula \begin{gather}
-\overrightarrow{f}+\nabla\cdot\overrightarrow{\sigma}=0\text{ in }V,\\
-\underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T}\text{, and}\\
-\overrightarrow{u}=\overrightarrow{u^{o}}\text{ on }S_{u.}\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Note that since both 
-\begin_inset Formula $\overrightarrow{T}$
-\end_inset
-
- and 
-\begin_inset Formula $\overrightarrow{u}$
-\end_inset
-
- are vector quantities, there can be some spatial overlap of the conceptual
- surfaces 
-\begin_inset Formula $S_{T}$
-\end_inset
-
- and 
-\begin_inset Formula $S_{u}$
-\end_inset
-
-; however, the same degree of freedom cannot simultaneously have both types
- of boundary conditions.
-\end_layout
-
-\begin_layout Subsection
-Finite-Element Formulation of Quasi-Static Equations
-\end_layout
-
-\begin_layout Subsubsection
-Index Notation
-\end_layout
-
-\begin_layout Standard
-We start with the strong form for the quasi-static problem under the assumption
- of infinitesimal strains,
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{gather}
-\sigma_{ij,j}+f_{i}=0\text{ in }V,\\
-\sigma_{ij}n_{j}=T_{i}\text{ on }S_{T},\\
-u_{i}=u_{i}^{o}\text{ on }S_{u},\\
-\sigma_{ij}=\sigma_{ji}\text{ (symmetric).}\end{gather}
-
-\end_inset
-
-We construct the weak form by multiplying the equation by a trial function
- and setting the integral over the domain to zero.
- The trial function is a piecewise differential vector field, 
-\begin_inset Formula $\phi_{i}$
-\end_inset
-
-, where 
-\begin_inset Formula $\phi_{i}=0$
-\end_inset
-
- on 
-\begin_inset Formula $S_{u}.$
-\end_inset
-
- Hence our weak form is
-\begin_inset Formula \begin{gather}
-\int_{V}\left(\sigma_{ij,j}+f_{i}\right)\phi_{i}\, dV=0\text{, or }\\
-\int_{V}\sigma_{ij,j}\phi_{i}\: dV+\int_{V}f_{i}\phi_{i}\: dV=0.\end{gather}
-
-\end_inset
-
-Consider the divergence theorem applied to the dot product of the stress
- tensor and the trial function, 
-\begin_inset Formula $\sigma_{ij}\phi_{i}$
-\end_inset
-
-,
-\begin_inset Formula \begin{equation}
-\int_{V}(\sigma_{ij}\phi_{i})_{,j}\, dV=\int_{S}(\sigma_{ij}\phi_{i})n_{i}\, dS.\end{equation}
-
-\end_inset
-
-Expanding the left hand side yields
-\begin_inset Formula \begin{gather}
-\int_{V}\sigma_{ij,j}\phi_{i}\: dV+\int_{V}\sigma_{ij}\phi_{i,j}\: dV=\int_{S}\sigma_{ij}\phi_{i}n_{i}\: dS,\text{ or}\\
-\int_{V}\sigma_{ij,j}\phi_{i}\: dV=-\int_{V}\sigma_{ij}\phi_{i,j}\, dV+\int_{S}\sigma_{ij}\phi_{i}n_{i}\, dS.\end{gather}
-
-\end_inset
-
-Substituting into the weak form gives
-\begin_inset Formula \begin{equation}
--\int_{V}\sigma_{ij}\phi_{i,j}\, dV+\int_{S}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV=0.\end{equation}
-
-\end_inset
-
-Now, 
-\begin_inset Formula $\sigma_{ij}\phi_{i,j}$
-\end_inset
-
- is a scalar, so it is symmetric,
-\begin_inset Formula \begin{equation}
-\sigma_{ij}\phi_{i,j}=\sigma_{ji}\phi_{j,i},\end{equation}
-
-\end_inset
-
-and we know that 
-\begin_inset Formula $\sigma_{ij}$
-\end_inset
-
- is symmetric, so
-\begin_inset Formula \begin{equation}
-\sigma_{ij}\phi_{i,j}=\sigma_{ij}\phi_{j,i},\end{equation}
-
-\end_inset
-
-which means
-\begin_inset Formula \begin{equation}
-\phi_{i,j}=\phi_{j,i},\end{equation}
-
-\end_inset
-
-which we can write as
-\begin_inset Formula \begin{equation}
-\phi_{i,j}=\frac{1}{2}(\phi_{i,j}+\phi_{j,i}).\end{equation}
-
-\end_inset
-
-Substituting into the first term gives
-\begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\sigma_{ij}\left(\phi_{i,j}+\phi_{j,i}\right)\, dV+\int_{S}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV=0.\end{equation}
-
-\end_inset
-
-Turning our attention to the second term, we separate the integration over
- 
-\begin_inset Formula $S$
-\end_inset
-
- into integration over 
-\begin_inset Formula $S_{T}$
-\end_inset
-
- and 
-\begin_inset Formula $S_{u}$
-\end_inset
-
-,
-\begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\sigma_{ij}(\phi_{i,j}+\phi_{j,i})\, dV+\int_{S_{T}}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{S_{u}}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV=0,\end{equation}
-
-\end_inset
-
-and recognize that
-\begin_inset Formula \begin{gather}
-\sigma_{ij}n_{i}=T_{i}\text{ on }S_{T}\text{ and}\\
-\phi_{i}=0\text{ on }S_{u},\end{gather}
-
-\end_inset
-
-so that the equation reduces to
-\begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\sigma_{ij}(\phi_{i,j}+\phi_{j,i})\: dV+\int_{S_{T}}T_{i}\phi_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV=0.\end{equation}
-
-\end_inset
-
-This is the equation we want to solve.
- Discretizing into finite-elements separates the integral over the domain
- and boundaries into a sum of integrals over elements and element boundaries,
-\begin_inset Formula \begin{equation}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\sigma_{ij}(\phi_{i,j}+\phi_{j,i})\, dV-\int_{V^{e}}f_{i}\phi_{i}\, dV-\int_{S_{t}^{e}}T_{i}\phi_{i}\, dS)=0.\end{equation}
-
-\end_inset
-
-Within an element we represent the fields as a linear combination of a set
- of basis functions and the values of the fields at vertices of the element,
-\begin_inset Formula \begin{equation}
-a_{i}=N^{m}a_{i}^{m},\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $N^{m}$
-\end_inset
-
- is the 
-\begin_inset Formula $m$
-\end_inset
-
-th basis function for an element and 
-\begin_inset Formula $a_{i}^{m}$
-\end_inset
-
- is the field at vertex 
-\begin_inset Formula $m$
-\end_inset
-
-.
- Rewriting the trial functions and displacement field in terms of the basis
- functions gives
-\begin_inset Formula \begin{gather}
-\phi_{i}=N^{m},\text{ and}\\
-u_{i}=N^{m}u_{i}^{m}.\end{gather}
-
-\end_inset
-
-We force the weak form to hold for each component in the vector space.
- For basis function 
-\begin_inset Formula $N^{p}$
-\end_inset
-
- and component 
-\begin_inset Formula $i$
-\end_inset
-
-, we have
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\sigma_{ij}(N_{,j}^{p}+N_{,i}^{p})\, dV-\int_{V^{e}}N_{}^{p}f_{i}\: dV-\int_{S_{T}^{e}}N_{}^{p}T_{i}\, dS)=0.\end{multline}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-Vector Notation
-\end_layout
-
-\begin_layout Standard
-We start with the strong form of the quasi-stati problem under the assumption
- of infinitesimal strains,
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{gather}
-\nabla\cdot\underline{\sigma}+\overrightarrow{f}=0\text{ in }V,\\
-\underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T},\\
-\overrightarrow{u}=\overrightarrow{u}^{o}\text{ on }S_{u},\\
-\underline{\sigma}=\underline{\sigma}^{T}\text{ (symmetric).}\end{gather}
-
-\end_inset
-
-We construct the weak form by multiplying the wave equation by a trial function
- and setting the integral over the domain to zero.
- The trial function is a piecewise differential vector field, 
-\begin_inset Formula $\overrightarrow{\phi}$
-\end_inset
-
-, where 
-\begin_inset Formula $\overrightarrow{\phi}=0$
-\end_inset
-
- on 
-\begin_inset Formula $S_{u}.$
-\end_inset
-
- Hence our weak form is
-\begin_inset Formula \begin{gather}
-\int_{V}\left(\nabla\cdot\underline{\sigma}+\overrightarrow{f}\right)\cdot\overrightarrow{\phi}\, dV=0\text{, or }\\
-\int_{V}(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}\: dV+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\: dV=0.\end{gather}
-
-\end_inset
-
- Consider the divergence theorem applied to the dot product of the stress
- tensor and the trial function, 
-\begin_inset Formula $\underline{\sigma}\cdot\overrightarrow{\phi}$
-\end_inset
-
-,
-\begin_inset Formula \begin{equation}
-\int_{V}\nabla\cdot(\underline{\sigma}\cdot\overrightarrow{\phi})\, dV=\int_{S}(\underline{\sigma}\cdot\overrightarrow{\phi})\cdot\overrightarrow{n}\, dS.\end{equation}
-
-\end_inset
-
-Expanding the left hand side yields
-\begin_inset Formula \begin{equation}
-\int_{V}(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}\: dV+\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\: dV=\int_{S}(\underline{\sigma}\cdot\overrightarrow{\phi})\cdot\overrightarrow{n}\: dS,\text{ or}\end{equation}
-
-\end_inset
-
-
-\begin_inset Formula \begin{equation}
-\int_{V}{(\nabla\cdot\underline{\sigma})\cdot\overrightarrow{\phi}}_{ij,j}\: dV=-\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS.\end{equation}
-
-\end_inset
-
-Substituting into the weak form gives
-\begin_inset Formula \begin{equation}
--\int_{V}\underline{\sigma}:\nabla\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\overrightarrow{\phi}\, dV=0.\end{equation}
-
-\end_inset
-
-Now, 
-\begin_inset Formula $\underline{\sigma}:\nabla\overrightarrow{\phi}$
-\end_inset
-
- is a scalar, so it is symmetric,
-\begin_inset Formula \begin{equation}
-{\underline{\sigma}:\nabla\overrightarrow{\phi}=(\underline{\sigma}:\nabla\overrightarrow{\phi})}^{T}=\underline{\sigma}^{T}:\overrightarrow{\phi}^{T}\nabla^{T},\end{equation}
-
-\end_inset
-
-and we know that 
-\begin_inset Formula $\underline{\sigma}$
-\end_inset
-
- is symmetric, so
-\begin_inset Formula \begin{equation}
-\underline{\sigma}:\nabla\overrightarrow{\phi}=\underline{\sigma}:\overrightarrow{\phi}^{T}\nabla^{T},\end{equation}
-
-\end_inset
-
-which means
-\begin_inset Formula \begin{equation}
-\nabla\overrightarrow{\phi}=\overrightarrow{\phi}^{T}\nabla^{T},\end{equation}
-
-\end_inset
-
-which we can write as
-\begin_inset Formula \begin{equation}
-\nabla\overrightarrow{\phi}=\frac{1}{2}(\nabla+\nabla^{T})\overrightarrow{\phi}.\end{equation}
-
-\end_inset
-
-Substituting into the first term gives
-\begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\, dV+\int_{S}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV=0.\end{equation}
-
-\end_inset
-
-Turning our attention to the second term, we separate the integration over
- 
-\begin_inset Formula $S$
-\end_inset
-
- into integration over 
-\begin_inset Formula $S_{T}$
-\end_inset
-
- and 
-\begin_inset Formula $S_{u}$
-\end_inset
-
-,
-\begin_inset Formula \begin{multline}
--\int_{V}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\, dV+\int_{S_{T}}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{S_{u}}\underline{\sigma}\cdot\overrightarrow{n}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV=0\\
-\\\end{multline}
-
-\end_inset
-
-and recognize that
-\begin_inset Formula \begin{gather}
-\underline{\sigma}\cdot\overrightarrow{n}=\overrightarrow{T}\text{ on }S_{T}\text{ and}\\
-\overrightarrow{\phi}=0\text{ on }S_{u},\end{gather}
-
-\end_inset
-
-so that the equation reduces to
-\begin_inset Formula \begin{equation}
--\int_{V}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\: dV+\int_{S_{T}}\overrightarrow{T}\cdot\overrightarrow{\phi}\, dS+\int_{V}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV=0.\end{equation}
-
-\end_inset
-
-This is the equation we want to solve.
- Discretizing into finite-elements separates the integral over the domain
- and boundaries into a sum of integrals over elements and element boundaries,
-\begin_inset Formula \begin{equation}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\overrightarrow{\phi}\, dV-\int_{V^{e}}\overrightarrow{f}\cdot\overrightarrow{\phi}\, dV-\int_{S_{t}^{e}}\overrightarrow{T}\cdot\overrightarrow{\phi}\, dS)=0.\end{equation}
-
-\end_inset
-
-Within an element we represent the fields as a linear combination of a set
- of basis functions and the values of the fields at vertices of the element,
-\begin_inset Marginal
-status open
-
-\begin_layout Standard
-Is this written correctly?
-\end_layout
-
-\end_inset
-
-
-\begin_inset Formula \begin{equation}
-\overrightarrow{a}=\underline{N}\cdot\overrightarrow{a^{e}},\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\underline{N}$
-\end_inset
-
- are the basis functions for an element and 
-\begin_inset Formula $\overrightarrow{a^{e}}$
-\end_inset
-
- is the field at an element's vertices.
- Rewriting the trial functions and displacement field in terms of the basis
- functions gives
-\begin_inset Marginal
-status open
-
-\begin_layout Standard
-Is the trial function expression correct?
-\end_layout
-
-\end_inset
-
-
-\begin_inset Formula \begin{equation}
-\overrightarrow{\phi}=\overrightarrow{N},\text{ and}\end{equation}
-
-\end_inset
-
-
-\begin_inset Formula \begin{equation}
-\overrightarrow{u}=\underline{N}\cdot\overrightarrow{u^{e}}.\end{equation}
-
-\end_inset
-
-Substituting into the integral equation yields
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\underline{\sigma}:(\nabla+\nabla^{T})\underline{N}\, dV-\int_{V^{e}}\underline{N}\cdot\overrightarrow{f^{e}}^{}\, dV-\int_{S_{T}}\underline{N}\cdot\overrightarrow{T^{e}}_{}\, dS)=0\end{multline}
-
-\end_inset
-
-For a linearly elastic material
-\begin_inset Formula \begin{equation}
-\underline{\sigma}=\underline{C}\cdot\underline{\varepsilon},\end{equation}
-
-\end_inset
-
-and for infinitesimal strains
-\begin_inset Formula \begin{equation}
-\underline{\varepsilon}=\frac{1}{2}(\nabla+\nabla^{T})\overrightarrow{u},\end{equation}
-
-\end_inset
-
-so in this case our integral equation becomes
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{4}(\nabla+\nabla^{T})\underline{N}:C\cdot(\nabla+\nabla^{T})\underline{N}\cdot\overrightarrow{u^{e}})\, dV+\int_{V^{e}}\rho\underline{N}\cdot\underline{N}\cdot\frac{\partial^{2}\overrightarrow{u^{e}}}{\partial t^{2}}\: dV-\int_{V^{e}}\underline{N}\cdot\underline{N}\cdot\overrightarrow{f^{e}}\, dV\\
--\int_{S_{T}}\underline{N}\cdot\underline{N}\cdot\overrightarrow{T^{e}}\, dS)=0.\end{multline}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Implicit Time Integration of Quasi-Static Equation
-\end_layout
-
-\begin_layout Subsubsection
-Index Notation
-\end_layout
-
-\begin_layout Standard
-Equation ??? may be linear or nonlinear, and may be solved using Newton-Raphson
- methods.
- We write a simplified version as a function of the displacements at time
- 
-\begin_inset Formula $n+1$
-\end_inset
-
-:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \begin{equation}
-\boldsymbol{P}\left(\boldsymbol{u}_{n+1}\right)-\boldsymbol{F}_{n+1}=\mathbf{0}\equiv\boldsymbol{R}_{n+1}\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Using the central difference method to approximate the acceleration (and
- velocity),
-\begin_inset Formula \begin{gather}
-\ddot{u}_{i}=\frac{1}{\Delta t^{2}}\left(u_{i}(t+\Delta t)-2u_{i}(t)+u_{i}(t-\Delta t)\right)\\
-\dot{u}_{i}=\frac{1}{2\Delta t}\left(u_{i}(t+\Delta t)-u_{i}(t-\Delta t)\right)\end{gather}
-
-\end_inset
-
-we have
-\begin_inset Formula \begin{multline}
-\sum_{elements}(\int_{V^{e}}\frac{1}{2}\sigma_{ij}(N_{,j}^{p}+N_{,i}^{p})\, dV+\int_{V^{e}}\rho N_{}^{p}\sum_{q}N_{}^{q}(u_{i}^{q}(t+\Delta t)-2u_{i}^{q}(t)+u_{i}^{q}(t-\Delta t))\: dV\\
--\int_{V^{e}}N^{p}f_{i}(t)\: dV-\int_{S_{T}}N^{p}T_{i}\: dS)=0,\end{multline}
-
-\end_inset
-
-which we can expand into
-\begin_inset Formula \begin{multline}
-\sum_{elements}({\frac{1}{\Delta t^{2}}\int}_{V^{e}}\rho N^{p}\sum_{q}N^{q}u_{i}^{q}(t+\Delta t)\, dV-\frac{2}{\Delta t^{2}}\int_{V^{e}}\rho N^{p}\sum_{q}N^{q}u_{i}^{q}(t)\, dV\\
-+\frac{1}{\Delta t^{2}}\int_{V^{e}}\rho N^{p}\sum_{q}N^{q}u_{i}^{q}(t-\Delta t)\, dV+{\frac{1}{2}\int}_{V^{e}}\sigma_{ij}(t)(N_{,j}^{p}+N_{,i}^{p})\: dV\\
--\int_{V^{e}}N^{p}f_{i}(t)\: dV-\int_{S_{T}}N^{p}T_{i}\: dS)=0\end{multline}
-
-\end_inset
-
-for the 
-\begin_inset Formula $i$
-\end_inset
-
-th component associated with basis function
-\begin_inset Formula $N^{p}$
-\end_inset
-
-.
- Isolating the term containing 
-\begin_inset Formula $u_{i}^{q}(t+\Delta t)$
-\end_inset
-
- yields
-\begin_inset Formula \begin{multline*}
-\frac{1}{\Delta t^{2}}\sum_{elements}\left(\int_{V^{e}}\rho N^{p}\sum_{q}N^{q}u_{i}^{q}(t+\Delta t)\, dV\right)=\frac{2}{\Delta t^{2}}\sum_{elements}\left(\int_{V^{e}}\rho N^{p}\sum_{q}N^{q}u_{i}^{q}(t)\, dV\right)\\
--\frac{1}{\Delta t^{2}}\sum_{elements}\left(\int_{V^{e}}\rho N^{p}\sum_{q}N^{q}u_{i}^{q}(t-\Delta t)\, dV\right)-\frac{1}{2}\sum_{elements}\left(\int_{V^{e}}\sigma_{ij}(t)(N_{,j}^{p}+N_{,i}^{p})\: dV\right)\\
-+\sum_{elements}\left(\int_{V^{e}}N^{p}f_{i}(t)\: dV\right)+\sum_{elements}\left(\int_{S_{T}}N^{p}T_{i}\: dS\right).\end{multline*}
-
-\end_inset
-
-We can rewrite the left-hand-side as a matrix-vector product where the vector
- is the displacement field at time 
-\begin_inset Formula $t+\Delta t$
-\end_inset
-
- and the element mass matrix is given by
-\begin_inset Formula \[
-M_{ij}^{pq}=\delta_{ij}\int_{V^{e}}\rho N^{p}N^{q}\, dV,\]
-
-\end_inset
-
-where 
-\begin_inset Formula $M_{ij}^{pq}$
-\end_inset
-
- is a 
-\begin_inset Formula $pn$
-\end_inset
-
- by 
-\begin_inset Formula $qn$
-\end_inset
-
- matrix (
-\begin_inset Formula $n$
-\end_inset
-
- is the dimension of the vector space), 
-\begin_inset Formula $p$
-\end_inset
-
- and 
-\begin_inset Formula $q$
-\end_inset
-
- refer to the basis functions and 
-\begin_inset Formula $i$
-\end_inset
-
- and 
-\begin_inset Formula $j$
-\end_inset
-
- are vector space components.
- 
-\end_layout
-
-\begin_layout Subsubsection
-Vector Notation
-\end_layout
-
-\begin_layout Standard
-Using the central difference method to approximate the acceleration (and
- velocity),
-\begin_inset Formula \begin{gather}
-\frac{\partial^{2}\overrightarrow{u}(t)}{\partial t^{2}}=\frac{1}{\Delta t^{2}}\left(\overrightarrow{u}(t+\Delta t)-2\overrightarrow{u}(t)+\overrightarrow{u}(t-\Delta t)\right)\\
-\frac{\partial\overrightarrow{u}(t)}{\partial t}=\frac{1}{2\Delta t}\left(\overrightarrow{u}(t+\Delta t)-\overrightarrow{u}(t-\Delta t)\right)\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\end_body
-\end_document

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -21,7 +21,16 @@
 \graphics default
 \paperfontsize default
 \spacing single
-\use_hyperref false
+\use_hyperref true
+\pdf_bookmarks true
+\pdf_bookmarksnumbered false
+\pdf_bookmarksopen false
+\pdf_bookmarksopenlevel 1
+\pdf_breaklinks true
+\pdf_pdfborder true
+\pdf_colorlinks true
+\pdf_backref false
+\pdf_pdfusetitle true
 \papersize default
 \use_geometry true
 \use_amsmath 1
@@ -70,7 +79,7 @@
  Help is available from both a CIG mailing list and CIG Roundup Bug Tracking
  System 
 \begin_inset Flex URL
-status collapsed
+status open
 
 \begin_layout Plain Layout
 
@@ -161,8 +170,8 @@
 \end_layout
 
 \begin_layout Standard
-Binary executables are available for Linux, Mac OS X (Power PC and Intel),
- and Windows from the PyLith web page 
+Binary executables are available for Linux, Mac OS X (Intel 10.5 and Intel
+ 10.6), and Windows from the PyLith web page 
 \begin_inset Flex URL
 status collapsed
 
@@ -202,7 +211,7 @@
 \begin_layout Enumerate
 Download the Linux tarball from the PyLith web page 
 \begin_inset Flex URL
-status collapsed
+status open
 
 \begin_layout Plain Layout
 
@@ -273,7 +282,7 @@
 
 \end_deeper
 \begin_layout Enumerate
-Download the Darwin tarball from the PyLith web page 
+Download the appropriate Darwin tarball from the PyLith web page 
 \begin_inset Flex URL
 status collapsed
 
@@ -284,7 +293,8 @@
 
 \end_inset
 
- and save it to the desired location, e.g., 
+ based on your operating system and save it to the desired location, e.g.,
+ 
 \family typewriter
 $HOME/pylith
 \family default
@@ -293,12 +303,12 @@
 
 \begin_layout Enumerate
 Unpack the tarball.
- For the PowerPC architecture,
+ For 10.5.x operating system,
 \end_layout
 
 \begin_deeper
 \begin_layout LyX-Code
-$ tar -xzf pylith-1.5.0-darwin-powerpc.tgz
+$ tar -xzf pylith-1.5.0-darwin-i386.tgz
 \end_layout
 
 \end_deeper
@@ -425,7 +435,7 @@
 \end_layout
 
 \begin_layout Itemize
-A Fortran compiler (optional)
+A FORTRAN compiler (optional)
 \end_layout
 
 \begin_layout Itemize
@@ -481,17 +491,17 @@
 \end_inset
 
 .
- (Note that Xcode does not include a Fortran compiler.)
+ (Note that Xcode does not include a FORTRAN compiler.)
 \end_layout
 
 \begin_layout Subsubsection
-Fortran Compiler (optional)
+FORTRAN Compiler (optional)
 \end_layout
 
 \begin_layout Standard
-To build PETSc, you need either a Fortran-77 or Fortran-9x compiler.
- There are several free Fortran compilers available.
- GCC 4 contains a Fortran-95 compiler called 
+To build PETSc, you need either a FORTRAN-77 or FORTRAN-9x compiler.
+ There are several free FORTRAN compilers available.
+ GCC 4 contains a FORTRAN-95 compiler called 
 \family typewriter
 gfortran
 \family default
@@ -517,7 +527,7 @@
  projects offer pre-built binaries for a variety of systems, including Mac
  OS X.
  A number of optional PETSc packages that provide additional preconditioners
- and solvers require a Fortran compiler.
+ and solvers require a FORTRAN compiler.
 \end_layout
 
 \begin_layout Subsubsection
@@ -791,24 +801,22 @@
 \end_inset
 
 ).
- We strongly recommend downloading the latest PyLith and PETSc source code
- directly from the source code repositories, instead of using the source
- packages; see Section 
+ Downloading the latest PyLith and PETSc source code directly from the source
+ code repositories, instead of using the source packages (see Section 
 \begin_inset CommandInset ref
 LatexCommand ref
 reference "sec:Software-Repository"
 
 \end_inset
 
- later in this chapter.
- Note that this requires additional tools; see Section 
+ later in this chapter) requires additional tools (see Section 
 \begin_inset CommandInset ref
 LatexCommand ref
 reference "sub:Additional-Tools"
 
 \end_inset
 
-.
+).
 \end_layout
 
 \begin_layout Subsection
@@ -941,8 +949,7 @@
 \begin_layout LyX-Code
 
 \size small
-http://geodynamics.org/cig/software/packages/short/pylith/petsc-dev-pylith-1_1_0.t
-gz
+http://geodynamics.org/cig/software/packages/short/pylith/petsc-dev-pylith-1.5.0.tgz
 \end_layout
 
 \begin_layout Standard
@@ -1217,7 +1224,7 @@
 
 \begin_layout Standard
 In our next example, we configure PETSc on a Mac OS X machine.
- We have installed Apple's Xcode and the G95 Fortran compiler.
+ We have installed Apple's Xcode and the G95 FORTRAN compiler.
  However, we don't have anything else preinstalled, so we instruct PETSc
  to download almost everything else, including MPICH.
  Intentionally, we don't specify anything about BLAS/LAPACK: PETSc automatically
@@ -1808,7 +1815,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-$ cd proj-4.6.1/nad$ unzip proj-datumgrid-1.5.zip
+$ cd proj-4.7.0/nad$ unzip proj-datumgrid-1.5.zip
 \end_layout
 
 \begin_layout Standard
@@ -2220,7 +2227,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-$ tar xzf spatialdata-0.5.2.tgz
+$ tar xzf spatialdata-0.6.0.tgz
 \end_layout
 
 \begin_layout Standard
@@ -2228,7 +2235,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-$ gunzip -c spatialdata-0.5.2.tgz | tar xf -
+$ gunzip -c spatialdata-0.6.0.tgz | tar xf -
 \end_layout
 
 \begin_layout Subsubsection

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -509,7 +509,7 @@
 \end_layout
 
 \begin_layout Standard
-PETSc includes interfaces for Fortran 77/90, C, C++, and Python for nearly
+PETSc includes interfaces for FORTRAN 77/90, C, C++, and Python for nearly
  all of the routines, and PETSc can be installed on most Unix systems.
  PETSc can be built with user-supplied, highly optimized linear algebra
  routines (e.g., ATLAS and commercial versions of BLAS/LAPACK), thereby improving

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq1.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq10.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq11.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq12.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq13.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq14.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq15.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq16.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq17.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq18.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq19.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq2.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq20.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq21.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq22.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq23.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq24.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq25.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq26.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq3.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq4.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq5.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq6.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq7.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq8.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-eq9.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-inlineeq1.eps
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/figs/ml-inlineeq2.eps
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/materials.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/materials.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/materials/materials.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -518,11 +518,12 @@
 
 
 \begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="3">
+<lyxtabular version="3" rows="6" columns="4">
 <features>
 <column alignment="center" valignment="top" width="1.5in">
 <column alignment="center" valignment="top" width="1.8in">
 <column alignment="center" valignment="top" width="1.5in">
+<column alignment="center" valignment="top" width="1.5in">
 <row>
 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
 \begin_inset Text
@@ -546,7 +547,7 @@
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
@@ -557,6 +558,17 @@
 
 \end_inset
 </cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Requires nonlinear solver?
+\end_layout
+
+\end_inset
+</cell>
 </row>
 <row>
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
@@ -579,7 +591,7 @@
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
@@ -590,6 +602,15 @@
 
 \end_inset
 </cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+No
+\end_layout
+
+\end_inset
+</cell>
 </row>
 <row>
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
@@ -612,7 +633,7 @@
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
@@ -629,6 +650,15 @@
 
 \end_inset
 </cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+No
+\end_layout
+
+\end_inset
+</cell>
 </row>
 <row>
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
@@ -663,7 +693,7 @@
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
@@ -682,6 +712,15 @@
 
 \end_inset
 </cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+No
+\end_layout
+
+\end_inset
+</cell>
 </row>
 <row>
 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
@@ -716,7 +755,7 @@
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
@@ -727,6 +766,15 @@
 
 \end_inset
 </cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Yes
+\end_layout
+
+\end_inset
+</cell>
 </row>
 <row>
 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
@@ -753,7 +801,7 @@
 
 \end_inset
 </cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
@@ -764,6 +812,15 @@
 
 \end_inset
 </cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Yes
+\end_layout
+
+\end_inset
+</cell>
 </row>
 </lyxtabular>
 
@@ -1940,6 +1997,13 @@
 
 \begin_layout Subsection
 Formulation for Generalized Maxwell Models
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Formulation-for-Gen-Max"
+
+\end_inset
+
+
 \end_layout
 
 \begin_layout Standard
@@ -2645,6 +2709,13 @@
 
 \begin_layout Subsubsection
 Power-Law Maxwell Viscoelastic Material
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Power-Law-Maxwell-Viscoelastic"
+
+\end_inset
+
+
 \end_layout
 
 \begin_layout Standard
@@ -3009,8 +3080,14 @@
 .
  The user then specifies either a reference stress or a reference strain
  rate, and a database suitable for PyLith is generated.
- This utility is described more fully in the Appendix.
- ***Maybe describe in Tutorials instead?***
+ This utility is described more fully in 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sub:Tutorial-Step08-Power-law"
+
+\end_inset
+
+.
 \end_layout
 
 \begin_layout Standard
@@ -4421,7 +4498,7 @@
 \begin_inset Formula $\lambda$
 \end_inset
 
- is now known, we can substitue 
+ is now known, we can substitute 
 \begin_inset CommandInset ref
 LatexCommand ref
 reference "eq:112"
@@ -4623,10 +4700,7 @@
 status open
 
 \begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
+\align center
 \begin_inset Caption
 
 \begin_layout Plain Layout
@@ -4829,10 +4903,6 @@
 
 \end_layout
 
-\begin_layout Plain Layout
-
-\end_layout
-
 \end_inset
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -167,19 +167,19 @@
 \begin_layout Itemize
 Aagaard, B., S.
  Kientz, M.
- Knepley, L.
+ Knepley, S.
+ Somala, L.
  Strand, and C.
  Williams (2009), 
 \emph on
-PyLith User Manual, Version 1.4.
+PyLith User Manual, Version 1.5.0.
 
 \emph default
  Pasadena, CA: Computational Infrastructure of Geodynamics.
- URL: geodynamics.org/cig/software/
 \begin_inset Newline newline
 \end_inset
 
-short/pylith/pylith_book-1.4.pdf
+URL: geodynamics.org/cig/software/short/pylith/pylith_manual-1.5.pdf
 \end_layout
 
 \begin_layout Section
@@ -253,13 +253,14 @@
 
 \begin_layout Standard
 Your suggestions and corrections can only improve this documentation.
- Please report any errors, inaccuracies, or typos to Sue Kientz 
+ Please report any errors, inaccuracies, or typos to the CIG Short-Term
+ Tectonics email list 
 \begin_inset Flex URL
-status collapsed
+status open
 
 \begin_layout Plain Layout
 
-sue at geodynamics.org
+cig-short at geodynamics.org
 \end_layout
 
 \end_inset

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/pylith_cover.pdf
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -224,7 +224,7 @@
 
 \begin_layout Standard
 All dimensional parameters require units.
- The units are specified using Python and Fortran syntax, so square meters
+ The units are specified using Python and FORTRAN syntax, so square meters
  is m**2.
  Whitespace is not allowed in the string, for units and dimensioned quantities
  are multiplied by the units string; for example, two meters per second
@@ -813,20 +813,6 @@
 \end_layout
 
 \begin_layout Standard
-ADD STUFF HERE 
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-ADD STUFF HERE ABOUT reorder_mesh AND OTHER MESH GENERATOR SETTINGS
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
 Geometrical and topological information for the finite element mesh may
  be provided by exporting an EXODUS format file from CUBIT, by exporting
  a GMV file and an accompanying Pset file from LaGriT, or by specifying
@@ -982,82 +968,19 @@
 \end_inset
 
 
-\begin_inset space ~
-\end_inset
+\begin_inset ERT
+status open
 
+\begin_layout Plain Layout
 
-\begin_inset space ~
-\end_inset
 
+\backslash
+hspace*{0.5in}
+\end_layout
 
-\begin_inset space ~
 \end_inset
 
 
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset space ~
-\end_inset
-
- 
 \begin_inset Graphics
 	filename figs/quad4.eps
 
@@ -1112,115 +1035,249 @@
 \end_inset
 
 
-\begin_inset space ~
-\end_inset
+\begin_inset ERT
+status open
 
+\begin_layout Plain Layout
 
-\begin_inset space ~
-\end_inset
 
+\backslash
+hspace*{0.5in}
+\end_layout
 
-\begin_inset space ~
 \end_inset
 
 
-\begin_inset space ~
+\begin_inset Graphics
+	filename figs/hex8.eps
+
 \end_inset
 
 
-\begin_inset space ~
-\end_inset
+\end_layout
 
+\begin_layout Plain Layout
+\begin_inset Caption
 
-\begin_inset space ~
+\begin_layout Plain Layout
+Linear cells available for 3D problems are the tetrahedron (left) and the
+ hexahedron (right).
+\begin_inset CommandInset label
+LatexCommand label
+name "fig:3D-linear-elements"
+
 \end_inset
 
 
-\begin_inset space ~
+\end_layout
+
 \end_inset
 
 
-\begin_inset space ~
+\end_layout
+
 \end_inset
 
 
-\begin_inset space ~
-\end_inset
+\end_layout
 
+\begin_layout Subsubsection
+Mesh Importer
+\end_layout
 
-\begin_inset space ~
-\end_inset
+\begin_layout Standard
+The default mesher component is MeshImporter, which provides the capabilities
+ of reading the mesh from files.
+ The MeshImporter has several properties and facilities:
+\end_layout
 
+\begin_layout Description
+reorder_mesh Reorder the vertices and cells using the reverse Cuthill-McKee
+ algorithm (default is False).
+\end_layout
 
-\begin_inset space ~
-\end_inset
+\begin_layout Description
+reader Reader for a given type of mesh (default is MeshIOAscii).
+\end_layout
 
+\begin_layout Description
+distributor Handles distribution of the mesh among processors.
+\end_layout
 
-\begin_inset space ~
-\end_inset
+\begin_layout Standard
+Reordering the mesh so that vertices and cells connected topologically also
+ reside close together in memory improves overall performance and can improve
+ solver performance as well.
+\end_layout
 
+\begin_layout Quote
 
-\begin_inset space ~
-\end_inset
+\color red
+Note:
+\color inherit
+ The coordinate system associated with the mesh must be a Cartesian coordinate
+ system.
+ This includes generic Cartesian coordinate systems as well as geographic
+ projections.
+\end_layout
 
+\begin_layout Subsubsection
+MeshIOAscii
+\end_layout
 
-\begin_inset space ~
+\begin_layout Standard
+The MeshIOAscii object is intended for reading small, simple ASCII files
+ containing a mesh constructed by hand.
+ We use this file format extensively in the examples.
+ Appendix 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:MeshIOAscii"
+
 \end_inset
 
+ describes the format of the files.
+ The properties and facilities of the MeshIOAscii object include:
+\end_layout
 
-\begin_inset space ~
-\end_inset
+\begin_layout Description
+filename Name of the mesh file.
+\end_layout
 
+\begin_layout Description
+coordsys Coordinate system associated with the mesh.
+\end_layout
 
-\begin_inset space ~
+\begin_layout Subsubsection
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:MeshIOCubit"
+
 \end_inset
 
+MeshIOCubit
+\end_layout
 
-\begin_inset space ~
-\end_inset
+\begin_layout Standard
+The MeshIOCubit object reads the NetCDF Exodus II files output from CUBIT.
+ Beginning with CUBIT 11.0, the names of the nodesets are included in the
+ Exodus II files and PyLith can use these nodeset names or revert to using
+ the nodeset ids.
+ The properties and facilities associated with the MeshIOCubit object are:
+\end_layout
 
+\begin_layout Description
+filename Name of the Exodus II file.
+\end_layout
 
-\begin_inset space ~
-\end_inset
+\begin_layout Description
+use_nodeset_names Identify nodesets by name rather than id (default is True).
+\end_layout
 
+\begin_layout Description
+coordsys Coordinate system associated with the mesh.
+\end_layout
 
-\begin_inset space ~
+\begin_layout Subsubsection
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:MeshIOLagrit"
+
 \end_inset
 
- 
-\begin_inset Graphics
-	filename figs/hex8.eps
+MeshIOLagrit
+\end_layout
 
-\end_inset
+\begin_layout Standard
+The MeshIOLagrit object is used to read ASCII and binary GMV and PSET files
+ output from LaGriT.
+ PyLith will automatically detect whether the files are ASCII or binary.
+ We attempt to provide support for experimental 64-bit versions of LaGriT
+ via flags indicating whether the FORTRAN code is using 32-bit or 64-bit
+ integers.
+ The MeshIOLagrit properties and facilities are:
+\end_layout
 
+\begin_layout Description
+filename_gmv Name of GMV file.
+\end_layout
 
+\begin_layout Description
+filename_pset Name of the PSET file.
 \end_layout
 
-\begin_layout Plain Layout
-\begin_inset Caption
+\begin_layout Description
+flip_endian Flip the endian of values when reading binary files (default
+ is False).
+\end_layout
 
-\begin_layout Plain Layout
-Linear cells available for 3D problems are the tetrahedron (left) and the
- hexahedron (right).
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:3D-linear-elements"
+\begin_layout Description
+io_int32 Flag indicating that PSET files use 32-bit integers (default is
+ True).
+\end_layout
 
-\end_inset
+\begin_layout Description
+record_header_32bt Flag indicating FORTRAN record header is 32-bit (default
+ is True)
+\end_layout
 
+\begin_layout Description
+coordsys Coordinate system associated with mesh.
+\end_layout
 
+\begin_layout Subsubsection
+Distributor
 \end_layout
 
+\begin_layout Standard
+The distributor users a partitioner to compute which cells should be placed
+ on each processor, computes the overlap among the processors, and then
+ distributes the mesh among the processors.
+ The properties and facilities of the Distributor include:
+\end_layout
+
+\begin_layout Description
+partitioner Choice of partitioner (
+\begin_inset Quotes eld
 \end_inset
 
+parmetis
+\begin_inset Quotes erd
+\end_inset
 
-\end_layout
+ or 
+\begin_inset Quotes eld
+\end_inset
 
+chaco
+\begin_inset Quotes erd
 \end_inset
 
+, default is 
+\begin_inset Quotes eld
+\end_inset
 
+chaco
+\begin_inset Quotes erd
+\end_inset
+
+).
 \end_layout
 
+\begin_layout Description
+writer_partition Flag indicating that the partition information should be
+ written to a file (default is False).
+\end_layout
+
+\begin_layout Description
+data_writer Writer for partition information (default is DataWriterVTKMesh
+ for VTK output).
+\end_layout
+
+\begin_layout Standard
+ParMETIS is not included in the PyLith binaries due to licensing issues.
+\end_layout
+
 \begin_layout Subsection
 Problem Specification (
 \family typewriter
@@ -1240,15 +1297,12 @@
  for use in static, quasi-static, and dynamic simulations.
  Future releases may contain multiple types of problems, for example, computing
  Green's functions, as additional applications are developed.
- The general components are:
+ The general facilities include:
 \end_layout
 
 \begin_layout Description
-normalizer Scales used to nondimensionalize the problem (default is 
-\family typewriter
-NondimElasticQuasistatic
-\family default
-).
+normalizer Scales used to nondimensionalize the problem (default is NondimElasti
+cQuasistatic).
 \end_layout
 
 \begin_layout Description
@@ -1425,6 +1479,12 @@
 \end_layout
 
 \begin_layout Subsection
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:petsc:options"
+
+\end_inset
+
 PETSc Settings (
 \family typewriter
 petsc
@@ -1433,7 +1493,8 @@
 \end_layout
 
 \begin_layout Standard
-PyLith relies on PETSc for the linear algebra computations.
+PyLith relies on PETSc for the linear algebra computations, including linear
+ Krylov subspace solvers and nonlinear solvers.
  PETSc options can be set in 
 \family typewriter
 .cfg
@@ -1455,8 +1516,18 @@
 \end_inset
 
 .
+ PETSc options are used to control the selection and settings for the solvers
+ underlying the SolverLinear and SolverNonlinear objects discussed in Section
+ 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:solvers"
+
+\end_inset
+
+.
  In many quasi-static or dynamic elasticity simulations, runtime can be
- reduced by replacing the Jacobi preconditioner with Additive Schwartz with
+ reduced by replacing the Jacobi preconditioner with additive Schwarz with
  Gram-Schmidt orthogonalization (see Table
 \begin_inset space ~
 \end_inset
@@ -1817,11 +1888,7 @@
 \begin_layout Plain Layout
 
 \family typewriter
-sub_pc_factor_shift_
-\begin_inset Newline newline
-\end_inset
-
-type
+sub_pc_factor_shift_type
 \end_layout
 
 \end_inset
@@ -1875,6 +1942,7 @@
 
 \begin_layout Plain Layout
 Maximum number of iterations.
+ Depends on problem size.
 \end_layout
 
 \end_inset
@@ -2067,45 +2135,72 @@
  facility to the general-problem.
  The formulation specifies the time-stepping formulation to integrate the
  elasticity equation.
- Implicit time stepping should be used for quasi-static problems, whereas
- explicit time stepping should be used for dynamic problems which include
- inertial terms.
- Two options for explicit time-stepping are available: using a full, consistent
- Jacobian matrix and a lumped Jacobian matrix.
- In the lumped Jacobian formulation, the Jacobian is a diagonal matrix and
- stored as a vector, and PyLith employs an optimized built-in solver rather
- than a PETSc solver.
+ PyLith provides several alternative formulations, each specific to a different
+ type of problem.
+ Future versions of PyLith will likely include support for additional formulatio
+ns, such as large deformations with a lumped Jacobian matrix.
 \end_layout
 
-\begin_layout Standard
-An example of setting the formulation facility to the implicit time stepping
- component is:
+\begin_layout Description
+Implicit Implicit time stepping for static and quasi-static problems with
+ infinitesimal strains.
+ The implicit formulation neglects inertial terms (see Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:elasticity:integral:quasistatic"
+
+\end_inset
+
+).
+ 
 \end_layout
 
-\begin_layout LyX-Code
-[pylithapp.timedependent]
+\begin_layout Description
+ImplicitLgDeform Implicit time stepping for static and quasi-static problems
+ including the effects of rigid body motion and small strains.
+ This formulation requires the use of the nonlinear solver, which is selected
+ automatically.
 \end_layout
 
-\begin_layout LyX-Code
-formulation = pylith.problems.Implicit
+\begin_layout Description
+Explicit Explicit time stepping for dynamic problems with infinitesimal
+ strains.
+ This formulation uses consistent mass and damping matrices for the system
+ Jacobian matrix.
 \end_layout
 
-\begin_layout Standard
-An example of setting the formulation facility to the explicit time stepping
- component is:
+\begin_layout Description
+ExplicitLgDeform Explicit time stepping for dynamic problems including the
+ effects of rigid body motion and small strains.
+ This formulation requires the use of the nonlinear solver, which is selected
+ automatically.
 \end_layout
 
-\begin_layout LyX-Code
-[pylithapp.timedependent]
+\begin_layout Description
+ExplicitLumped Explicit time stepping for dynamic problems with infinitesimal
+ strains and lumped system Jacobian.
+ The cell matrices are lumped before assembly, permitting use of a vector
+ for the diagonal system Jacobian matrix.
+ The built-in lumped solver is selected automatically.
 \end_layout
 
-\begin_layout LyX-Code
-formulation = pylith.problems.Explicit
+\begin_layout Description
+ExplicitLumpedTri3 Optimized elasticity formulation for linear triangular
+ cells with one point quadrature for dynamic problems with infinitesimal
+ strains and lumped system Jacobian.
+ The built-in lumped solver is selected automatically.
 \end_layout
 
+\begin_layout Description
+ExplicitLumpedTet4 Optimized elasticity formulation for linear tetrahedral
+ cells with one point quadrature for dynamic problems with infinitesimal
+ strains and lumped system Jacobian.The built-in lumped solver is selected
+ automatically.
+\end_layout
+
 \begin_layout Standard
-An example of setting the formulation facility to the lumped explicit time
- stepping component is:
+An example of setting the formulation facility to the implicit time stepping
+ component is:
 \end_layout
 
 \begin_layout LyX-Code
@@ -2113,9 +2208,13 @@
 \end_layout
 
 \begin_layout LyX-Code
-formulation = pylith.problems.ExplicitLumped
+formulation = pylith.problems.Implicit
 \end_layout
 
+\begin_layout Standard
+The formulation can be set to the other formulations in a similar fashion.
+\end_layout
+
 \begin_layout Subsection
 Time-Stepping Formulation
 \end_layout
@@ -2131,7 +2230,7 @@
 \end_layout
 
 \begin_layout Description
-solver Type of solver to use (default is linear).
+solver Type of solver to use (default is SolverLinear).
 \end_layout
 
 \begin_layout Description
@@ -2190,7 +2289,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-matrix_type = sbaij ; Nonsymmetric sparse matrix is aij
+matrix_type = sbaij ; Non-symmetric sparse matrix is aij
 \end_layout
 
 \begin_layout LyX-Code
@@ -2198,6 +2297,48 @@
 \end_layout
 
 \begin_layout Subsection
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:solvers"
+
+\end_inset
+
+Solvers
+\end_layout
+
+\begin_layout Standard
+PyLith supports three types of solvers.
+ The linear solver, SolverLinear, corresponds to the PETSc KSP solver and
+ is used in linear problems with linear elastic and viscoelastic bulk constituti
+ve models and kinematic fault ruptures.
+ The nonlinear solver, SolverNonlinear, corresponds to the PETSc SNES solver
+ and is used in nonlinear problems with nonlinear viscoelastic or elastoplastic
+ bulk constitutive models or dynamic fault ruptures.
+ The lumped solver (SolverLumped) is a specialized solver used with the
+ lumped system Jacobian matrix.
+ The options for the PETSc KSP and SNES solvers are set via the top-level
+ PETSc options (see Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:petsc:options"
+
+\end_inset
+
+ and the PETSc documentation 
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+www.mcs.anl.gov/petsc/petsc-as/documentation/index.html
+\end_layout
+
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Subsection
 Time Stepping
 \end_layout
 
@@ -3064,7 +3205,7 @@
  history may be shifted with a spatial variation in the onset time and scaled
  with a spatial variation in the amplitude.
  The time history database uses a simple ASCII file which is simpler than
- the one used by the SimpleDB spatial databse.
+ the one used by the SimpleDB spatial database.
  The file format is described in Section 
 \begin_inset CommandInset ref
 LatexCommand ref
@@ -3122,10 +3263,18 @@
  material model and quadrature rule.
  For boundary conditions, the ``label'' is a string used to associate groups
  of vertices (psets in LaGriT and nodesets in CUBIT) with a boundary condition.
- Note that some mesh generators use strings (LaGriT) to identify groups
- of nodes while others use integers (CUBIT Exodus files).
- Although CUBIT permits associated strings with nodesets, they are not included
- in the Exodus files, so we must rely on the nodeset ID.
+ Some mesh generators use strings (LaGriT) to identify groups of nodes while
+ others (CUBIT) use strings and integers.
+ The default behavior in PyLith is to use strings to identify groups for
+ both LaGriT and CUBIT meshes, but the behavior for CUBIT meshes can be
+ changed to use the nodeset id (see Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:MeshIOCubit"
+
+\end_inset
+
+).
  PyLith 1.0 had an ``id'' for boundary conditions, but we removed it from
  subsequent releases because it was not used.
  For faults the ``label'' is used in the same manner as the ``label'' for
@@ -3465,7 +3614,8 @@
 The rate of convergence in quasi-static (implicit) problems can sometimes
  be improved by renumbering the vertices in the finite-element mesh to reduce
  the bandwidth of the sparse matrix.
- LaGriT contains routines to do this, but CUBIT does not.
+ PyLith can use the reverse Cuthill-McKee algorithm to reorder the vertices
+ and cells.
 \end_layout
 
 \begin_layout Itemize

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/3dhex8.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/3dhex8.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/3dhex8.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -60,10 +60,14 @@
 \end_layout
 
 \begin_layout Standard
-PyLith features discussed in this tutorial:
+PyLith features discussed in this set of tutorials:
 \end_layout
 
 \begin_layout Itemize
+Static solution
+\end_layout
+
+\begin_layout Itemize
 Quasi-static solution
 \end_layout
 
@@ -72,11 +76,11 @@
 \end_layout
 
 \begin_layout Itemize
-Gravitational body forces
+Trilinear hexahedral cells
 \end_layout
 
 \begin_layout Itemize
-Initial stresses
+VTK output
 \end_layout
 
 \begin_layout Itemize
@@ -84,10 +88,38 @@
 \end_layout
 
 \begin_layout Itemize
+Neumann traction boundary conditions and time-varying tractions
+\end_layout
+
+\begin_layout Itemize
+ZeroDispDB spatial database
+\end_layout
+
+\begin_layout Itemize
+SimpleDB spatial database
+\end_layout
+
+\begin_layout Itemize
+UniformDB spatial database
+\end_layout
+
+\begin_layout Itemize
+Static fault rupture
+\end_layout
+
+\begin_layout Itemize
 Multiple kinematic fault ruptures
 \end_layout
 
 \begin_layout Itemize
+Specifying more than one material
+\end_layout
+
+\begin_layout Itemize
+Nonlinear solver
+\end_layout
+
+\begin_layout Itemize
 Linearly elastic isotropic material
 \end_layout
 
@@ -96,34 +128,54 @@
 \end_layout
 
 \begin_layout Itemize
-Specifying more than one material
+Generalized Maxwell linear viscoelastic material
 \end_layout
 
 \begin_layout Itemize
-VTK output
+Power-law viscoelastic material
 \end_layout
 
 \begin_layout Itemize
-Trilinear hexahedral cells
+Drucker-Prager elastoplastic material
 \end_layout
 
 \begin_layout Itemize
-SimpleDB spatial database
+Adaptive time stepping
 \end_layout
 
 \begin_layout Itemize
-ZeroDispDB spatial database
+Static fault friction
 \end_layout
 
+\begin_layout Itemize
+Slip-weakening fault friction
+\end_layout
+
+\begin_layout Itemize
+Rate-and-state fault friction
+\end_layout
+
+\begin_layout Itemize
+Gravitational body forces
+\end_layout
+
+\begin_layout Itemize
+Initial stresses
+\end_layout
+
+\begin_layout Itemize
+Finite strain
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout
 
 \begin_layout Standard
-This tutorial is a simple 3D example of a quasi-static finite element problem.
- It is a mesh composed of 144 trilinear hexahedra subject to displacement
- boundary conditions.
- This example demonstrates the usage of the CUBIT mesh generation package
+This tutorial is meant to demonstrate most of the important features of
+ PyLith as a quasi-static finite element code, using a sequence of example
+ problems.
+ All problems use the same 3D hexahedral mesh generated using the CUBIT
  
 \begin_inset Flex URL
 status collapsed
@@ -135,12 +187,29 @@
 
 \end_inset
 
+ mesh generation package.
+ Each example builds on the previous examples, as we demonstrate new features.
+ As in the other examples, the files include extensive comments.
+ We start with the generation of the mesh, which is composed of 144 trilinear
+ hexahedra.
+ The tutorial demonstrates the usage of the CUBIT mesh generation package
  to create a mesh, as well as describing how to use a CUBIT-generated mesh
  in PyLith.
- In this tutorial, we will walk through the steps necessary to construct,
- run, and view several problems that use the same mesh.
- In addition to this manual, each of the files for the example problems
- includes extensive comments.
+ Following the discussion of how to generate the mesh, there is a discussion
+ of the 
+\family typewriter
+pylithapp.cfg
+\family default
+ file, which contains information common to all the simulations.
+ The tutorial is then subdivided into four sections, each pertaining to
+ a particular set of PyLith features.
+ It is suggested that users go through each of these sections in order as
+ the complexity increases at each step.
+ All of the files to run the examples are contained in the directory 
+\family typewriter
+examples/3d/hex8
+\family default
+.
 \end_layout
 
 \begin_layout Subsection
@@ -159,14 +228,14 @@
  Although it would be possible to generate this mesh by hand, it is much
  simpler to use a mesh generation package, and we use the CUBIT mesh generation
  package for this example.
- For this simple example, we provide documented journal files in 
+ We provide documented journal files in 
 \family typewriter
-examples/3d/hex8.
+examples/3d/hex8/mesh.
 
 \family default
- Investigation of these journal files should provide some insight into how
+ Dissection of these journal files should provide some insight into how
  to use CUBIT with PyLith.
- For more detailed information on using CUBIT, refer to the CUBIT web site
+ For more detailed information on using CUBIT, refer to the CUBIT documentation
  
 \begin_inset Flex URL
 status collapsed
@@ -262,7 +331,7 @@
 box_hex8_1000m.exo
 \family default
 , which contains all of the mesh information.
- This includes all of the information included in PyLith mesh ASCII format,
+ This information is similar to that included in PyLith mesh ASCII format,
  but the information is contained in an Exodus file, which is a specialized
  netCDF file.
  If you have the 
@@ -277,10 +346,6 @@
 \end_layout
 
 \begin_layout Standard
-This mesh may then be used for the examples described below.
-\end_layout
-
-\begin_layout Standard
 \noindent
 \align center
 \begin_inset Float figure
@@ -293,7 +358,7 @@
 \begin_inset Graphics
 	filename figs/hex8-mesh.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 
@@ -305,7 +370,7 @@
 
 \begin_layout Plain Layout
 Mesh composed of trilinear hexahedral cells generated by CUBIT used for
- the example problems.
+ the suite of example problems.
  The different colors represent the two different materials.
 \begin_inset CommandInset label
 LatexCommand label
@@ -331,7 +396,7 @@
 \end_layout
 
 \begin_layout Standard
-In addition to the mesh, the example problems share additional information.
+In addition to the mesh, the example problems share other information.
  As in previous examples, we place this information in 
 \family typewriter
 pylithapp.cfg
@@ -362,12 +427,12 @@
 \end_layout
 
 \begin_layout LyX-Code
-filename = box_hex8_1000m.exo
+filename = mesh/box_hex8_1000m.exo
 \end_layout
 
 \begin_layout Standard
-This example differs from most other examples, because we specify two material
- groups:
+This example differs from some earlier examples, because we specify two
+ material groups:
 \end_layout
 
 \begin_layout LyX-Code
@@ -375,23 +440,19 @@
 \end_layout
 
 \begin_layout LyX-Code
-materials = [elastic,viscoelastic]
+materials = [upper_crust,lower_crust]
 \end_layout
 
 \begin_layout LyX-Code
-materials.viscoelastic = pylith.materials.MaxwellIsotropic3D
-\end_layout
 
-\begin_layout LyX-Code
-
 \end_layout
 
 \begin_layout LyX-Code
-[pylithapp.timedependent.materials.elastic]
+[pylithapp.timedependent.materials.upper_crust]
 \end_layout
 
 \begin_layout LyX-Code
-label = Elastic material
+label = Upper crust material
 \end_layout
 
 \begin_layout LyX-Code
@@ -399,7 +460,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-db.iohandler.filename = mat_elastic.spatialdb
+db.iohandler.filename = spatialdb/mat_elastic.spatialdb
 \end_layout
 
 \begin_layout LyX-Code
@@ -415,11 +476,11 @@
 \end_layout
 
 \begin_layout LyX-Code
-[pylithapp.timedependent.materials.viscoelastic]
+[pylithapp.timedependent.materials.lower_crust]
 \end_layout
 
 \begin_layout LyX-Code
-label = Viscoelastic material
+label = Lower crust material
 \end_layout
 
 \begin_layout LyX-Code
@@ -427,7 +488,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-db.iohandler.filename = mat_viscoelastic.spatialdb
+db.iohandler.filename = spatialdb/mat_elastic.spatialdb
 \end_layout
 
 \begin_layout LyX-Code
@@ -448,1379 +509,75 @@
 \end_inset
 
 .
- Because the two materials have different physical properties, we use a
- different spatial database for each material.
- Although the material groups are specified in 
+ The usage of two material groups allows us to specify different material
+ types or material variations for the upper crust and lower crust, if desired.
+ For now, we retain the default 
 \family typewriter
-pylithapp.cfg
+ElasticIsotropic3D
 \family default
-, the physical properties for the material models are given in 
+ material type for both materials.
+ This behavior will be overriden by example-specific
 \family typewriter
-mat_elastic.spatialdb
+.cfg
 \family default
-, and 
+ files in some of the examples.
+ Although the material groups are specified in 
 \family typewriter
-mat_viscoelastic.spatialdb
-\family default
-.
- For this example, values describing the physical properties are given at
- a single point, resulting in uniform properties within each material.
-\end_layout
-
-\begin_layout Subsection
-Shear Displacement Example
-\end_layout
-
-\begin_layout Standard
-The first example problem is shearing of the mesh along the y-direction,
- with displacement boundary conditions applied on the planes corresponding
- to the minimum and maximum x-values.
- Parameter settings that override or augment those in 
-\family typewriter
 pylithapp.cfg
 \family default
- are contained in the file 
+, the physical properties for the material models are given in 
 \family typewriter
-shearxy.cfg
+spatialdb/mat_elastic.spatialdb
 \family default
 .
- These settings include:
+ This spatial database provides values at a single point, resulting in uniform
+ properties within the material.
 \end_layout
 
-\begin_layout Description
-pylithapp.timedependent.implicit Specifies an array of two output managers,
- one for the full domain, and another for a subdomain corresponding to the
- ground surface.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.x_pos Specifies the boundary conditions for the
- right side of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-x
-\family default
- and 
-\family typewriter
-y
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points desired, assigning a label to the boundary condition
- set, and giving the name of the spatial database defining the boundary
- conditions (
-\family typewriter
-fixeddisp_shear.spatialdb
-\family default
-).
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.x_neg Specifies the boundary conditions for the
- left side of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-x
-\family default
- and 
-\family typewriter
-y
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points desired, assigning a label to the boundary condition
- set, and giving the name of the spatial database defining the boundary
- conditions (
-\family typewriter
-fixeddisp_shear.spatialdb
-\family default
-).
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.z_neg Specifies the boundary conditions for the
- bottom of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-x
-\family default
- and 
-\family typewriter
-y
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points desired, assigning a label to the boundary condition
- set, and giving the name of the spatial database defining the boundary
- conditions (
-\family typewriter
-fixeddisp_shear.spatialdb
-\family default
-).
-\end_layout
-
-\begin_layout Description
-pylithapp.problem.formulation.output.subdomain Gives the label of the nodeset
- defining the subdomain and gives the base filename for VTK output over
- the subdomain corresponding to the ground surface (
-\family typewriter
-shearxy-groundsurf.vtk
-\family default
-).
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.materials.elastic.output Gives the base filename for
- state variable output files for the elastic material (
-\family typewriter
-shearxy-statevars-elastic.vtk
-\family default
-), and causes state variables to be averaged over all quadrature points
- in each cell.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.materials.viscoelastic.output Gives the base filename
- for state variable output files for the viscoelastic material (
-\family typewriter
-shearxy-statevars-viscoelastic.vtk
-\family default
-), and causes state variables to be averaged over all quadrature points
- in each cell.
-\end_layout
-
-\begin_layout Standard
-The values for the Dirichlet boundary conditions are described in the file
- 
-\family typewriter
-fixeddisp_shear.spatialdb
-\family default
-, as specified in 
-\family typewriter
-shearxy.cfg
-\family default
-.
- The files containing common information (
-\family typewriter
-box_hex8_1000m.exo
-\family default
-, 
-\family typewriter
-pylithapp.cfg
-\family default
-, 
-\family typewriter
-mat_elastic.spatialdb
-\family default
-, and 
-\family typewriter
-mat_viscoelastic.spatialdb
-\family default
-) along with the problem-specific files (
-\family typewriter
-shearxy.cfg
-\family default
-, 
-\family typewriter
-fixeddisp_shear.spatialdb
-\family default
-) provide a complete description of the problem, and we can then run this
- example by typing
-\end_layout
-
-\begin_layout LyX-Code
-pylith shearxy.cfg
-\end_layout
-
-\begin_layout Standard
-The output file 
-\family typewriter
-shearxy-statevars-elastic_t0000000.vtk
-\family default
- contains the state variables for each cell in the material group 
-\family typewriter
-elastic
-\family default
-.
- The default fields are the total strain and stress fields and are computed
- at each quadrature point in the cell.
- There are eight quadrature points for each cell; however, we have requested
- that these values be averaged, so there is a single set of values per cell.
- The third file (
-\family typewriter
-shearxy-statevars-elastic
-\begin_inset Newline newline
-\end_inset
-
-_info.vtk
-\family default
-) gives the material properties used for the upper elastic material.
- Since we have not specified which properties to write, the default properties
- (
-\family typewriter
-mu
-\family default
-, 
-\family typewriter
-lambda
-\family default
-, 
-\family typewriter
-density
-\family default
-) are written.
- The files for the viscoelastic material 
-\family typewriter
-(shearxy-statevars-viscoelastic_t0000000.vtk
-\family default
- and 
-\family typewriter
-shearxy-statevars-viscoelastic_
-\begin_inset Newline newline
-\end_inset
-
-info.vtk
-\family default
-) are exactly analogous to the corresponding files for the elastic material.
- The file 
-\family typewriter
-shearxy-groundsurf
-\begin_inset Newline newline
-\end_inset
-
-_t0000000.vtk
-\family default
- is analogous to 
-\family typewriter
-shearxy_t0000000.vtk
-\family default
-, but in this case the results are only given for a subset of the mesh correspon
-ding to the ground surface.
- Also, the cells in this file are one dimension lower than the cells described
- in 
-\family typewriter
-shearxy_t0000000.vtk
-\family default
-, so they are quadrilaterals rather than hexahedra.
- If the problem ran correctly, you should be able to generate a figure such
- as 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "fig:3dhex8-shear"
-
-\end_inset
-
-, which was generated using ParaView.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Graphics
-	filename figs/shear.jpg
-	lyxscale 50
-	scale 45
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Color contours and vectors of displacement for the shear displacement example
- using a mesh composed of trilinear hexahedral cells generated by CUBIT.
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:3dhex8-shear"
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
 \begin_layout Subsection
-Kinematic Fault Slip Example
+Example Problems
 \end_layout
 
 \begin_layout Standard
-The next example problem is a right-lateral fault slip applied on the vertical
- fault defined by 
-\family typewriter
-x = 0
-\family default
-.
- The left and right sides of the mesh are fixed in the 
-\family typewriter
-x
-\family default
- and 
-\family typewriter
-y
-\family default
- directions, while the bottom is fixed in the 
-\family typewriter
-z
-\family default
- direction.
- Parameter settings that override or augment those in 
-\family typewriter
-pylithapp.cfg
-\family default
- are contained in the file 
-\family typewriter
-dislocation.cfg
-\family default
-.
- 
+The example problems are divided into categories that roughly correspond
+ to simple static problems, quasi-static problems, problems involving fault
+ friction, and problems where gravity is used.
+ For the most part, each successive example involves just adding or changing
+ a few parameters from the previous example.
+ For this reason, it is advisable to go through each example in order, starting
+ with the simplest (static problems).
 \end_layout
 
 \begin_layout Standard
-The fault example requires three additional database files that were not
- needed for the simple displacement example.
- The first file (
-\family typewriter
-finalslip.spatialdb
-\family default
-) specifies a constant value of 2 m of right-lateral fault slip that then
- tapers linearly to zero from 2 km to 4 km depth, and a linearly-varying
- amount of reverse slip, with a maximum of 0.25 m at the surface, linearly
- tapering to 0 m at 2 km depth.
- The data dimension is one since the data vary linearly along a vertical
- line.
- The default slip time function is a step-function, so we also must provide
- the time at which slip begins.
- The elastic solution is associated with advancing from 
-\begin_inset Formula $t=-dt$
-\end_inset
+\begin_inset CommandInset include
+LatexCommand input
+filename "static/static.lyx"
 
- to 
-\begin_inset Formula $t=0$
 \end_inset
 
-, so we set the slip initiation time for the step-function to 0 in 
-\family typewriter
-dislocation_sliptime.spatialdb
-\family default
-.
-\end_layout
 
-\begin_layout Standard
-The files containing common information (
-\family typewriter
-\size small
-box_hex8_1000m.exo
-\family default
-, 
-\family typewriter
-pylithapp.cfg
-\family default
-, 
-\family typewriter
-mat_elastic.spatialdb
-\family default
-\size default
-, and 
-\family typewriter
-mat_viscoelastic.spatialdb
-\family default
-) along with the problem-specific files (
-\family typewriter
-\size small
-dislocation.cfg
-\family default
-, 
-\family typewriter
-finalslip.spatialdb
-\family default
-, 
-\family typewriter
-sliptime.spatialdb
-\family default
-\size default
-) provide a complete description of the problem, and we can then run this
- example by typing
-\end_layout
+\begin_inset CommandInset include
+LatexCommand input
+filename "quasistatic/quasistatic.lyx"
 
-\begin_layout LyX-Code
-pylith dislocation.cfg
-\end_layout
-
-\begin_layout Standard
-If the problem ran correctly, you should be able to generate a figure such
- as Figure 
-\begin_inset CommandInset ref
-LatexCommand vref
-reference "fig:3dhex-disloc"
-
 \end_inset
 
-, which was generated using ParaView.
-\end_layout
 
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float figure
-wide false
-sideways false
-status open
+\begin_inset CommandInset include
+LatexCommand input
+filename "friction/friction.lyx"
 
-\begin_layout Plain Layout
-\align center
-\begin_inset Graphics
-	filename figs/dislocation.jpg
-	lyxscale 50
-	scale 45
-
 \end_inset
 
 
-\end_layout
+\begin_inset CommandInset include
+LatexCommand input
+filename "gravity/gravity.lyx"
 
-\begin_layout Plain Layout
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Color contours and vectors of displacement for the kinematic fault example
- using a mesh composed of trilinear hexahedral cells generated by CUBIT.
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:3dhex-disloc"
-
 \end_inset
 
 
 \end_layout
 
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Gravitational Body Force Example
-\end_layout
-
-\begin_layout Standard
-The next example is a simple problem where we apply the body forces due
- to gravitational acceleration.
- All sides are fixed in the normal direction, with the exception of the
- upper surface, which is left free.
- The resulting stress field is
-\begin_inset Formula \begin{equation}
-\sigma_{zz}=\rho gz,\:\sigma_{xx}=\sigma_{yy}=\frac{\nu\rho gz}{1-\nu},\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\rho$
-\end_inset
-
- is the density of the material, 
-\begin_inset Formula $g$
-\end_inset
-
- is the gravitational acceleration, 
-\begin_inset Formula $h$
-\end_inset
-
- is the elevation (negative elevations for points below the upper surface),
- and 
-\begin_inset Formula $\nu$
-\end_inset
-
- is Poisson's ratio.
- Parameter settings that override or augment those in 
-\family typewriter
-pylithapp.cfg
-\family default
- are contained in the file 
-\family typewriter
-gravity.cfg
-\family default
-.
- These settings include:
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent Specifies an implicit formulation for the problem,
- the array of boundary conditions, and the specification of the 
-\family typewriter
-use_gravity
-\family default
- flag as 
-\family typewriter
-true
-\family default
-.
- The default values of 
-\family typewriter
-acceleration
-\family default
- and 
-\family typewriter
-gravity_dir
-\family default
- are used.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.x_pos Specifies the boundary conditions for the
- right side of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-x
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_
-\begin_inset Newline newline
-\end_inset
-
-1000m.exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.x_neg Specifies the boundary conditions for the
- left side of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-x
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_
-\begin_inset Newline newline
-\end_inset
-
-1000m.exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.y_pos Specifies the boundary conditions for the
- back of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-y
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.y_neg Specifies the boundary conditions for the
- front of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-y
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.z_neg Specifies the boundary conditions for the
- bottom of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-z
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.
-\begin_inset Newline newline
-\end_inset
-
-exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
-\end_layout
-
-\begin_layout Standard
-The files containing common information (
-\family typewriter
-\size small
-box_hex8_1000m.exo
-\family default
-, 
-\family typewriter
-pylithapp.cfg
-\family default
-, 
-\family typewriter
-mat_elastic.spatialdb
-\family default
-\size default
-, 
-\family typewriter
-mat_
-\begin_inset Newline newline
-\end_inset
-
-viscoelastic.spatialdb
-\family default
-) along with the problem-specific file (
-\family typewriter
-\size small
-gravity.cfg
-\family default
-\size default
-) provide a complete description of the problem, and we can then run this
- example by typing
-\end_layout
-
-\begin_layout LyX-Code
-pylith gravity.cfg
-\end_layout
-
-\begin_layout Standard
-If the problem ran correctly, you should be able to generate a figure such
- as
-\begin_inset CommandInset ref
-LatexCommand vref
-reference "fig:3dhex-gravity"
-
-\end_inset
-
-, which was generated using ParaView.
- Note that the stress values for the example problem match the analytical
- solution given at the beginning of this problem description, recalling
- that the solution is at the center of each cell.
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Graphics
-	filename figs/hex8-gravity.jpg
-	lyxscale 50
-	scale 45
-
-\end_inset
-
-
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Color contours of vertical stress and vectors of displacement for the gravitatio
-nal body force example using a mesh composed of trilinear hexahedral cells
- generated by CUBIT.
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:3dhex-gravity"
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Gravitational Body Forces With Initial Stresses
-\end_layout
-
-\begin_layout Standard
-In the previous example, the application of body forces resulted in large
- amounts of vertical deformation, which is generally not desirable in a
- simulation.
- To avoid this difficulty, initial stresses may be specified to exactly
- balance the stresses due to gravitational body forces.
- The problem is identical to the previous problem, except for the use of
- initial stresses.
- The stress solution should be identical, but there should be no displacements
- or strains.
- Parameter settings that override or augment those in 
-\family typewriter
-pylithapp.cfg
-\family default
- are contained in the file 
-\family typewriter
-gravity_istress.cfg
-\family default
-.
- These settings include:
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent Specifies an implicit formulation for the problem,
- the array of boundary conditions, and the specification of the 
-\family typewriter
-use_gravity
-\family default
- flag as 
-\family typewriter
-true
-\family default
-.
- The default values of 
-\family typewriter
-acceleration
-\family default
- and 
-\family typewriter
-gravity_dir
-\family default
- are used.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.materials.elastic Sets the 
-\family typewriter
-use_initial_state
-\family default
- flag to 
-\family typewriter
-True
-\family default
- and provides the initial state database file (
-\family typewriter
-initial_state.spatialdb
-\family default
-) as the filename for 
-\family typewriter
-initial_state_db.iohandler.
-\begin_inset Newline newline
-\end_inset
-
-filename
-\family default
-.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.materials.viscoelastic Sets the 
-\family typewriter
-use_initial_state
-\family default
- flag to 
-\family typewriter
-True
-\family default
- and provides the initial state database file (
-\family typewriter
-initial_state.spatialdb
-\family default
-) as the filename for 
-\family typewriter
-initial_state_db.
-\begin_inset Newline newline
-\end_inset
-
-iohandler.filename
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-The files containing common information (
-\family typewriter
-\size small
-box_hex8_1000m.exo
-\family default
-, 
-\family typewriter
-pylithapp.cfg
-\family default
-, 
-\family typewriter
-mat_elastic.spatialdb
-\family default
-\size default
-, 
-\family typewriter
-mat_
-\begin_inset Newline newline
-\end_inset
-
-viscoelastic.spatialdb
-\family default
-, 
-\family typewriter
-initial_state.spatialdb
-\family default
-) along with the problem-specific file (
-\family typewriter
-\size small
-gravity_istress.cfg
-\family default
-\size default
-) provide a complete description of the problem, and we can then run this
- example by typing
-\end_layout
-
-\begin_layout LyX-Code
-pylith gravity_istress.cfg
-\end_layout
-
-\begin_layout Standard
-If the problem ran correctly, you should be able to generate a figure such
- as 
-\begin_inset CommandInset ref
-LatexCommand vref
-reference "fig:3dhex-gravity_istress"
-
-\end_inset
-
-, which was generated using ParaView.
- Note that the stress values are identical to those for the previous example,
- while the displacements are zero.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Graphics
-	filename figs/hex8-gravity_istress.jpg
-	lyxscale 50
-	scale 45
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Color contours of vertical displacement for the gravitational body force
- example with initial stresses using a mesh composed of trilinear hexahedral
- cells generated by CUBIT.
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:3dhex-gravity_istress"
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Multiple Kinematic Ruptures Example
-\end_layout
-
-\begin_layout Standard
-The next example problem involves right-lateral slip applied on the vertical
- fault defined by 
-\family typewriter
-x = 0,
-\family default
- where the slip is constant aseismic creep below 
-\family typewriter
-z=-2km
-\family default
- and repeated earthquake ruptures every 200 years above 
-\family typewriter
-z=
-\family default
--2km.
- The left and right sides of the mesh are fixed in the x direction and have
- constant velocities 
-\family typewriter
-in the y
-\family default
- directions, while the bottom is fixed in the 
-\family typewriter
-z
-\family default
- direction.
- This is similar to the Savage-Prescott problem for repeated strike-slip
- earthquakes on an infinite strike-slip fault.
- Parameter settings that override or augment those in 
-\family typewriter
-pylithapp.cfg
-\family default
- are contained in the file 
-\family typewriter
-savageprescott.cfg
-\family default
-.
- These settings include:
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent Specifies an implicit formulation for the problem,
- the array of boundary conditions, and the array of interfaces.
- The total time of the simulation is 700 years with a time step of 10 years.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.x_pos Specifies the boundary conditions for the
- right side of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-x
-\family default
- and 
-\family typewriter
-y
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
- We also assign nonzero rates for the y degree of freedom, corresponding
- to a velocity of -1.0 cm/year.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.x_neg Specifies the boundary conditions for the
- left side of the mesh, defining which degrees of freedom are being constrained
- (
-\family typewriter
-x
-\family default
- and 
-\family typewriter
-y
-\family default
-), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
- We also assign nonzero rates for the y degree of freedom, corresponding
- to a velocity of 1.0 cm/year.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.bc.z_neg Specifies the boundary conditions for the
- bottom of the mesh, defining which degrees of freedom are being constrained
- (z), providing the label (defined in 
-\family typewriter
-box_hex8_1000m.
-\begin_inset Newline newline
-\end_inset
-
-exo
-\family default
-) defining the points desired, and assigning a label to the boundary condition
- set.
- Rather than specifying a spatial database file to define the boundary condition
-s, we use the default spatial database (ZeroDispDB) for the Dirichlet boundary
- condition, which sets the displacements to zero.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.interfaces Gives the label (defined in 
-\family typewriter
-box_hex8_1000m.exo
-\family default
-) defining the points on the fault, provides quadrature information, the
- array of kinematic ruptures, and the database names for material properties
- (needed for conditioning), fault slip, and fault slip time.
- The origin time determines when each earthquake source begins, and the
- corresponding slip and slip time databases are then applied beginning at
- that time.
-\end_layout
-
-\begin_layout Description
-pylithapp.problem.formulation.output.output.writer Gives the base filename for
- VTK output over the entire domain (
-\family typewriter
-savageprescott.vtk
-\family default
-).
- To simplify the names of the generated VTK files, the timestamp is created
- in units of one year.
-\end_layout
-
-\begin_layout Description
-pylithapp.problem.formulation.output.subdomain Gives the label of the nodeset
- defining the subdomain and gives the base filename for VTK output over
- the subdomain corresponding to the ground surface (
-\family typewriter
-savageprescott-groundsurf.vtk
-\family default
-).
- To simplify the names of the generated VTK files, the timestamp is created
- in units of one year.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.interfaces.fault.output.writer Gives the base filename
- for cohesive cell output files (
-\family typewriter
-savageprescott-fault.vtk
-\family default
-).
- To simplify the names of the generated VTK files, the timestamp is created
- in units of one year.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.materials.elastic.output Gives the base filename for
- state variable output files for the elastic material (
-\family typewriter
-savageprescott-elastic.vtk
-\family default
-), and causes state variables to be averaged over all quadrature points
- in each cell.
- To simplify the names of the generated VTK files, the timestamp is created
- in units of one year.
-\end_layout
-
-\begin_layout Description
-pylithapp.timedependent.materials.viscoelastic.output Gives the base filename
- for state variable output files for the viscoelastic material (
-\family typewriter
-savageprescott-viscoelastic.vtk
-\family default
-), and causes state variables to be averaged over all quadrature points
- in each cell.
- To simplify the names of the generated VTK files, the timestamp is created
- in units of one year.
-\end_layout
-
-\begin_layout Standard
-The multiple earthquake ruptures and fault creep each require their own
- spatial database files to specify the slip.
- With the depth variation in slip for the creep and earthquake ruptures,
- the data dimension in the slip spatial database files is one since the
- data vary linearly along a vertical line.
- Because we use identical, repeating ruptures for the earthquakes, we use
- the same set of spatial database files for each rupture.
- The file (
-\family typewriter
-sliprate_creep.spatialdb
-\family default
-) specifies a constant, uniform right-lateral slip rate of 2 cm/yr over
- the bottom half (z < -2 km) of the fault.
- The creep commences at the beginning of the simulation, so the origin time
- of the creep is 
-\family typewriter
-t=0
-\family default
- s.
- Each earthquake rupture prescribes 4.0 m of uniform right-lateral slip for
- z > -2.0 km repeat every 200 years with the first rupture at 
-\family typewriter
-t=200
-\family default
- years.
- We use the step-function for the slip-time function in the earthquake ruptures
- with origin times of 200, 400, and 600 years.
-\end_layout
-
-\begin_layout Standard
-The files containing common information (
-\family typewriter
-\size small
-box_hex8_1000m.exo
-\family default
-, 
-\family typewriter
-pylithapp.cfg
-\family default
-, 
-\family typewriter
-mat_elastic.spatialdb
-\family default
-\size default
-, and 
-\family typewriter
-\size small
-mat_viscoelastic.spatialdb
-\family default
-\size default
-) along with the problem-specific files (
-\family typewriter
-\size small
-savageprescott.cfg
-\family default
-, 
-\family typewriter
-finalslip_
-\begin_inset Newline newline
-\end_inset
-
-rupture.spatialdb
-\family default
-, 
-\family typewriter
-sliprate_creep.spatialdb
-\family default
-, 
-\family typewriter
-sliptime.spatialdb
-\family default
-\size default
-) provide a complete description of the problem, and we can then run this
- example by typing
-\end_layout
-
-\begin_layout LyX-Code
-pylith savageprescott.cfg
-\end_layout
-
-\begin_layout Standard
-Running the problem produces a number of output files.
- The solution over the entire volume and state variables are output once
- every 100 years (skipping 9 time steps) while the fault and ground surface
- information is output every time step.
- The time stamp in the VTK files is normalized by the value of 1 year, so
- the numbers in the VTK filenames correspond to the time in years.
- As in the other simulations, the files in the form 
-\family typewriter
-savageprescott_tXXXX.vtk
-\family default
- contain the displacement values at the mesh vertices.
- The files of the form 
-\family typewriter
-savageprescott-elastic_tXXXX.vtk
-\family default
- contain the state variables for each cell in the material group 
-\family typewriter
-elastic
-\family default
-.
- The default fields are the total strain and stress fields.
- These values are computed at each quadrature point in the cell.
- There are eight quadrature points for each cell; however, we have requested
- that these values be averaged, so there is a single set of values per cell.
- The file 
-\family typewriter
-savageprescott-elastic_info.vtk
-\family default
- gives the material properties used for the elastic material.
- The files for the viscoelastic material,
-\end_layout
-
-\begin_layout LyX-Code
-
-\family typewriter
-savageprescott-viscoelastic_tXXXX.vtk 
-\family roman
-and
-\end_layout
-
-\begin_layout LyX-Code
-
-\family typewriter
-savageprescott-viscoelastic_info.vtk
-\end_layout
-
-\begin_layout Standard
-are exactly analogous to the corresponding files for the elastic material.
- The files of the form 
-\end_layout
-
-\begin_layout LyX-Code
-
-\family typewriter
-savageprescott-groundsurf_tXXXX.vtk
-\family default
- 
-\end_layout
-
-\begin_layout Standard
-are analogous to 
-\family typewriter
-savageprescott_t0000000.vtk
-\family default
-, but in this case the results are only given for a subset of the mesh correspon
-ding to the ground surface (and are output more frequently).
- The files of the form 
-\end_layout
-
-\begin_layout LyX-Code
-
-\family typewriter
-savageprescott-fault_tXXXX.vtk
-\family default
- 
-\end_layout
-
-\begin_layout Standard
-give the fault slip for each vertex on the fault, along with the computed
- traction change for the cohesive cell.
- The final file
-\end_layout
-
-\begin_layout LyX-Code
-
-\family typewriter
-savageprescott-fault_info.vtk
-\family default
- 
-\end_layout
-
-\begin_layout Standard
-provides information such as the normal direction and final slip and slip
- time for each vertex on the fault for each fault rupture.
- The desired output fields are specified as 
-\end_layout
-
-\begin_layout LyX-Code
-
-\family typewriter
-pylithapp.timedependent.interfaces.fault.output.vertex_info_fields
-\family default
- 
-\end_layout
-
-\begin_layout Standard
-in the file 
-\family typewriter
-savageprescott.cfg
-\family default
-.
- If the problem ran correctly, you should be able to generate a figure such
- as Figure 
-\begin_inset CommandInset ref
-LatexCommand vref
-reference "fig:3dhex:savageprescott"
-
-\end_inset
-
-, which was generated using ParaView.
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Graphics
-	filename figs/savageprescott-t100.jpg
-	lyxscale 50
-	scale 45
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Color contours and vectors of displacement at t = 100 years for the multiple
- kinematic fault rupture example using a mesh composed of trilinear hexahedral
- cells generated by CUBIT.
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:3dhex:savageprescott"
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
 \end_body
 \end_document

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/figs/hex8-mesh.jpg
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/friction (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/3dhex8/friction)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/gravity (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/3dhex8/gravity)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/quasistatic (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/3dhex8/quasistatic)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/static (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/3dhex8/static)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/bar.eps (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/bar.eps)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/bar.svg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/bar.svg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/bar.svg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/bar.svg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="499.30875"
+   height="101.508"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47pre4 r22446"
+   sodipodi:docname="New document 1">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3691"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(0.6,0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         id="path3694"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Send"
+       style="overflow:visible">
+      <path
+         id="path3700"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective3604"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3630"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective5618"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend-6"
+       style="overflow:visible">
+      <path
+         id="path3694-4"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.5761988"
+     inkscape:cx="254.70322"
+     inkscape:cy="69.631404"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     units="in"
+     inkscape:window-width="1216"
+     inkscape:window-height="817"
+     inkscape:window-x="277"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="0.05in"
+       spacingy="0.05in"
+       units="in" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-42.69125,-773.47)">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:#1e6e96;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
+       id="rect2818"
+       width="495"
+       height="22.5"
+       x="45"
+       y="112.5"
+       transform="translate(0,692.362)"
+       ry="0" />
+    <path
+       style="fill:none;stroke:#c90003;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 292.5,804.862 c 0,45 0,22.5 0,22.5"
+       id="path3592"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 270,791.362 c 0,0 -8.11799,5.03292 -13.5,4.5 -4.22199,-0.41806 -9,-9 -9,-9 -3.82426,-3.82426 -8.11799,9.53292 -13.5,9 -4.22199,-0.41806 -9,-4.5 -9,-4.5"
+       id="path3594"
+       sodipodi:nodetypes="csssc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 364.5,791.362 c 0,0 -8.11799,-5.03292 -13.5,-4.5 -4.22199,0.41806 -9,9 -9,9 -3.82426,3.82427 -8.11799,-9.53292 -13.5,-9 -4.22199,0.41806 -9,4.5 -9,4.5"
+       id="path3594-0"
+       sodipodi:nodetypes="csssc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend)"
+       d="m 211.5,791.362 c -18,0 -18,0 -18,0"
+       id="path3618" />
+    <path
+       style="fill:none;stroke:#60cc0e;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 539.69125,113.00172 540,135"
+       id="path3620"
+       transform="translate(0,692.362)" />
+    <path
+       style="fill:none;stroke:#60cc0e;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 44.69125,805.36372 45,827.362"
+       id="path3620-7" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans"
+       x="112.5"
+       y="872.362"
+       id="text3644"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3646"
+         x="112.5"
+         y="872.362">Absorbing boundaries</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans"
+       x="315"
+       y="872.362"
+       id="text3648"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3650"
+         x="315"
+         y="872.362">Fault</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans"
+       x="256.5"
+       y="782.362"
+       id="text3652"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3654"
+         x="256.5"
+         y="782.362">Shear waves</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 45,139.5 c 126,27 126,27 126,27 l 369,-27"
+       id="path3656"
+       transform="translate(0,692.362)"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 324,166.5 -31.5,-27"
+       id="path3658"
+       transform="translate(0,692.362)"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend)"
+       d="m 283.5,809.362 0,13.5"
+       id="path3660" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:none"
+       d="M 301.58159,809.43685 301.5,822.862"
+       id="path3662" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow2Mend)"
+       d="m 373.5,791.362 c 18,0 18,0 18,0"
+       id="path3618-6" />
+  </g>
+</svg>

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/hex8deform30.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/hex8deform30.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/hex8mesh.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/hex8mesh.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4kinematic30.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/quad4kinematic30.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4mesh.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/quad4mesh.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4ratestateageing30.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/quad4ratestateageing30.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4slipweakening30.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/quad4slipweakening30.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/quad4staticfriction30.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/quad4staticfriction30.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tet4deform30.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/tet4deform30.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tet4mesh.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/tet4mesh.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tri3deform30.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/tri3deform30.jpg)
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/figs/tri3mesh.jpg (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/figs/tri3mesh.jpg)
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/hex8.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/hex8.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/hex8.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -135,9 +135,9 @@
 \begin_layout Plain Layout
 \align center
 \begin_inset Graphics
-	filename figs/hex8_mesh.jpg
+	filename figs/hex8mesh.jpg
 	lyxscale 50
-	scale 45
+	scale 50
 
 \end_inset
 
@@ -175,8 +175,8 @@
 
 \begin_layout Standard
 The simulation parameters match those in the tri3 and tet4 examples.
- As in the tet4 example, we both the longiudinal degree of freedom and the
- out-of-plane tranverse degree of freedom.
+ As in the tet4 example, we both the longitudinal degree of freedom and
+ the out-of-plane transverse degree of freedom.
  Using eight-point quadrature permits use of a time step of 1/20 s, which
  is slightly larger than the time step of 1/30 s used in the tri3 and tet4
  simulations.
@@ -235,7 +235,7 @@
 
 \begin_layout Plain Layout
 Displacement field in the bar at 3.0 s.
- Deformation has been exaggerated by a factor of 200.
+ Deformation has been exaggerated by a factor of 800.
 \begin_inset CommandInset label
 LatexCommand label
 name "fig:shearwave:hex8:deform"

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/quad4.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/quad4.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/quad4.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -143,9 +143,9 @@
 \begin_layout Plain Layout
 \align center
 \begin_inset Graphics
-	filename figs/quad4_mesh.jpg
+	filename figs/quad4mesh.jpg
 	lyxscale 50
-	scale 45
+	scale 50
 
 \end_inset
 
@@ -261,7 +261,7 @@
 
 \begin_layout Plain Layout
 Displacement field in the bar at 3.0 s.
- Deformation has been exaggerated by a factor of 200.
+ Deformation has been exaggerated by a factor of 800.
 \begin_inset CommandInset label
 LatexCommand label
 name "fig:shearwave:quad4:kinematic"
@@ -369,10 +369,10 @@
 \end_inset
 
 , which was generated using ParaView.
- The steady-state solution is a constant slip rate of ?? m/s, a uniform
- shear strain of ?? in the bar with uniform, constant velocities in the
- y-direction of +?? m/s and -?? m/s on the -x and +x sides of the fault,
- respectively.
+ The steady-state solution is a constant slip rate of 0.08 m/s and shear
+ traction of 6.0 MPa on the fault surface, a uniform shear strain of 2e-5
+ in the bar with uniform, constant velocities in the y-direction of +0.04
+ m/s and -0.04 m/s on the -x and +x sides of the fault, respectively.
 \end_layout
 
 \begin_layout Standard
@@ -399,8 +399,9 @@
 \begin_inset Caption
 
 \begin_layout Plain Layout
-Displacement field in the bar at 3.0 s.
- Deformation has been exaggerated by a factor of 200.
+Velocity field in the bar at 3.0 s for the static friction fault constitutive
+ model.
+ Deformation has been exaggerated by a factor of 800.
 \begin_inset CommandInset label
 LatexCommand label
 name "fig:shearwave:quad4:staticfriction"
@@ -454,7 +455,10 @@
 
 \begin_layout LyX-Code
 vertex_info_fields = [strike_dir,normal_dir,initial_traction,static_coefficient,
- dynamic_coefficient,slip_weakening_parameter,cohesion]
+\begin_inset Newline newline
+\end_inset
+
+dynamic_coefficient,slip_weakening_parameter,cohesion]
 \end_layout
 
 \begin_layout LyX-Code
@@ -492,10 +496,10 @@
 \end_inset
 
 , which was generated using ParaView.
- The steady-state solution is a constant slip rate of ?? m/s, a uniform
- shear strain of ?? in the bar with uniform, constant velocities in the
- y-direction of +?? m/s and -?? m/s on the -x and +x sides of the fault,
- respectively.
+ The steady-state solution is a constant slip rate of 0.88 m/s and shear
+ traction of 5.0 MPa on the fault surface, a uniform shear strain of 2.2e-4
+ in the bar with uniform, constant velocities in the y-direction of +0.44
+ m/s and -0.44 m/s on the -x and +x sides of the fault, respectively.
 \end_layout
 
 \begin_layout Standard
@@ -522,8 +526,9 @@
 \begin_inset Caption
 
 \begin_layout Plain Layout
-Displacement field in the bar at 3.0 s.
- Deformation has been exaggerated by a factor of 200.
+Velocity field in the bar at 3.0 s for the slip-weakening friction fault
+ constitutive model.
+ Deformation has been exaggerated by a factor of 800.
 \begin_inset CommandInset label
 LatexCommand label
 name "fig:shearwave:quad4:slipweakening"
@@ -565,7 +570,7 @@
 \begin_layout Standard
 and use a UniformDB to set the static friction parameters.
  We use a reference coefficient of friction of 0.6, reference slip rate of
- 1.0e-6 m/s, characterisitc slip distance of 0.037 m, coefficients a and b
+ 1.0e-6 m/s, characteristic slip distance of 0.037 m, coefficients a and b
  of 0.0125 and 0.0172, and no cohesion (0 MPa).
  The parameters specific to this example are in dynamic_
 \family typewriter
@@ -597,10 +602,10 @@
 \end_inset
 
 , which was generated using ParaView.
- The steady-state solution is a constant slip rate of ?? m/s, a uniform
- shear strain of ?? in the bar with uniform, constant velocities in the
- y-direction of +?? m/s and -?? m/s on the -x and +x sides of the fault,
- respectively.
+ The steady-state solution is a constant slip rate of 0.572 m/s and shear
+ traction of 5.385 MPa on the fault surface, a uniform shear strain of 1.43e-4
+ in the bar with uniform, constant velocities in the y-direction of +0.286
+ m/s and -0.286 m/s on the -x and +x sides of the fault, respectively.
 \end_layout
 
 \begin_layout Standard
@@ -627,8 +632,9 @@
 \begin_inset Caption
 
 \begin_layout Plain Layout
-Displacement field in the bar at 3.0 s.
- Deformation has been exaggerated by a factor of 200.
+Velocity field in the bar at 3.0 s for the rate- and state-friction fault
+ constitutive model.
+ Deformation has been exaggerated by a factor of 800.
 \begin_inset CommandInset label
 LatexCommand label
 name "fig:shearwave:quad4:ratestateageing"

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/shearwave.lyx (from rev 16998, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave/shearwave.lyx)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/shearwave.lyx	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/shearwave.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,162 @@
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
+\begin_document
+\begin_header
+\textclass book
+\begin_preamble
+
+\end_preamble
+\use_default_options false
+\language english
+\inputencoding latin1
+\font_roman default
+\font_sans default
+\font_typewriter default
+\font_default_family default
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
+
+\graphics default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry true
+\use_amsmath 1
+\use_esint 0
+\cite_engine basic
+\use_bibtopic false
+\paperorientation portrait
+\leftmargin 1in
+\topmargin 1in
+\rightmargin 1in
+\bottommargin 2in
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\papercolumns 1
+\papersides 2
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\author "" 
+\author "" 
+\end_header
+
+\begin_body
+
+\begin_layout Section
+Shear Wave in a Bar
+\end_layout
+
+\begin_layout Standard
+This suite of examples focuses on the dynamics of a shear wave propagating
+ down an 8 km long bar with a 400 m wide cross-section.
+ Motion is limited to shear deformation by fixing the longitudinal degree
+ of freedom.
+ For each cell type (tri3, quad4, tet4, and hex8) we generate a shear wave
+ using a kinematic fault rupture with simultaneous slip over the fault surface,
+ which we place at the center of the bar.
+ The discretization size is 200 m in all cases.
+ The slip time histories follows the integral of Brune's far-field time
+ function with slip initiating at 0.1 s, a left-lateral final slip of 1.0
+ m, and a rise time of 2.0 s.
+ The shear wave speed in the bar is 1.0 km/s, so the shear wave reaches each
+ end of the bar at 4.1 s.
+ Absorbing boundaries on the ends of the bar prevent significant reflections.
+ The bar comes to a rest with a static offset.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status collapsed
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+	filename figs/bar.eps
+	lyxscale 50
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Domain for shear wave propagation in a 8.0 km bar with 400 m cross-section.
+ We generate a shear wave via slip on a fault located in the middle of the
+ bar while limiting deformation to the transverse direction.
+\begin_inset CommandInset label
+LatexCommand label
+name "fig:shearwave:domain"
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+For the bar discretized with quad4 cells we also consider the fault subjected
+ to frictional sliding controlled by static friction, linear slip-weakening
+ friction, and rate- and state-friction.
+ We use initial tractions applied to the fault to drive the dislocation
+ and generate the shear wave.
+ Because the fault tractions are constant in time, they continue to drive
+ the motion even after the shear wave reaches the absorbing boundary, leading
+ to a steady state solution with uniform shear deformation in the bar and
+ a constant slip rate on the fault.
+ 
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "tri3.lyx"
+
+\end_inset
+
+
+\begin_inset CommandInset include
+LatexCommand input
+filename "tet4.lyx"
+
+\end_inset
+
+
+\begin_inset CommandInset include
+LatexCommand input
+filename "hex8.lyx"
+
+\end_inset
+
+
+\begin_inset CommandInset include
+LatexCommand input
+filename "quad4.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tet4.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tet4.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tet4.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -134,9 +134,9 @@
 \begin_layout Plain Layout
 \align center
 \begin_inset Graphics
-	filename figs/tet4_mesh.jpg
+	filename figs/tet4mesh.jpg
 	lyxscale 50
-	scale 45
+	scale 50
 
 \end_inset
 
@@ -177,7 +177,7 @@
  of using the LaGriT mesh reader and switching the from a two-dimensional
  problem to a three-dimensional problem.
  In addition to fixing the longitudinal degree of freedom, we also fix the
- out-of-plane tranverse degree of freedom.
+ out-of-plane transverse degree of freedom.
  Because the fault separates two material regions in LaGriT, we use two
  materials in PyLith.
  All of the parameters are set in the pylithapp.cfg file.
@@ -235,7 +235,7 @@
 
 \begin_layout Plain Layout
 Displacement field in the bar at 3.0 s.
- Deformation has been exaggerated by a factor of 200.
+ Deformation has been exaggerated by a factor of 800.
 \begin_inset CommandInset label
 LatexCommand label
 name "fig:shearwave:tet4:deform"

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tri3.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tri3.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/tri3.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -143,9 +143,9 @@
 \begin_layout Plain Layout
 \align center
 \begin_inset Graphics
-	filename figs/tri3_mesh.jpg
+	filename figs/tri3mesh.jpg
 	lyxscale 50
-	scale 45
+	scale 50
 
 \end_inset
 
@@ -299,7 +299,7 @@
 
 \begin_layout Plain Layout
 Displacement field in the bar at 3.0 s.
- Deformation has been exaggerated by a factor of 200.
+ Deformation has been exaggerated by a factor of 800.
 \begin_inset CommandInset label
 LatexCommand label
 name "fig:shearwave:tri3:deform"

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -208,129 +208,25 @@
 
 \begin_inset CommandInset include
 LatexCommand input
-filename "3dhex8/3dhex8.lyx"
-
-\end_inset
-
-
-\begin_inset CommandInset include
-LatexCommand input
 filename "3dtet4/3dtet4.lyx"
 
 \end_inset
 
 
-\end_layout
-
-\begin_layout Section
-Shear Wave in a Bar
-\end_layout
-
-\begin_layout Standard
-This suite of examples focuses on the dynamics of a shear wave propagating
- down an 8 km long bar with a 400 m wide cross-section.
- Motion is limited to shear deformation by fixing the longitudinal degree
- of freedom.
- For each cell type (tri3, quad4, tet4, and hex8) we generate a shear wave
- using a kinematic fault rupture with simultaneous slip over the fault surface,
- which we place at the center of the bar.
- The discretization size is 200 m in all cases.
- The slip time histories follows the integral of Brune's far-field time
- function with slip initiating at 0.1 s, a left-lateral final slip of 1.0
- m, and a rise time of 2.0 s.
- The shear wave speed in the bar is 1.0 km/s, so the shear wave reaches each
- end of the bar at 4.1 s.
- Absorbing boundaries on the ends of the bar prevent significant reflections.
- The bar comes to a rest with a static offset.
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Graphics
-	filename figs/bar.eps
-	lyxscale 50
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Domain for shear wave propagation in a 8.0 km bar with 400 m cross-section.
- We generate a shear wave via slip on a fault located in the middle of the
- bar while limiting deformation to the transverse direction.
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:shearwave:domain"
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-For the bar discretized with quad4 cells we also consider the fault subjected
- to frictional sliding controlled by static friction, linear slip-weakening
- friction, and rate- and state-friction.
- We use initial tractions applied to the fault to drive the dislocation
- and generate the shear wave.
- Because the fault tractions are constant in time, they continue to drive
- the motion even after the shear wave reaches the absorbing boundary, leading
- to a steady state solution with uniform shear deformation in the bar and
- a constant slip rate on the fault.
- 
-\end_layout
-
-\begin_layout Standard
 \begin_inset CommandInset include
 LatexCommand input
-filename "shearwave/tri3.lyx"
+filename "3dhex8/3dhex8.lyx"
 
 \end_inset
 
 
 \begin_inset CommandInset include
 LatexCommand input
-filename "shearwave/tet4.lyx"
+filename "shearwave/shearwave.lyx"
 
 \end_inset
 
 
-\begin_inset CommandInset include
-LatexCommand input
-filename "shearwave/hex8.lyx"
-
-\end_inset
-
-
-\begin_inset CommandInset include
-LatexCommand input
-filename "shearwave/quad4.lyx"
-
-\end_inset
-
-
 \end_layout
 
 \begin_layout Section

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/figs/axialdisp.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/figs/dislocation.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/figs/sheardisp.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/twohex8.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/twohex8.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twohex8/twohex8.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -468,7 +468,7 @@
 \begin_inset Graphics
 	filename figs/axialdisp.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 
@@ -615,7 +615,7 @@
 \begin_inset Graphics
 	filename figs/sheardisp.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 
@@ -794,7 +794,7 @@
 \begin_inset Graphics
 	filename figs/dislocation.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/axialdisp.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/axialtract.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/dislocation.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/figs/sheardispl.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/twoquad4.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/twoquad4.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twoquad4/twoquad4.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -344,7 +344,7 @@
 \begin_inset Graphics
 	filename figs/axialdisp.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 
@@ -506,7 +506,7 @@
 \begin_inset Graphics
 	filename figs/sheardispl.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 
@@ -702,7 +702,7 @@
 \begin_inset Graphics
 	filename figs/dislocation.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 
@@ -940,7 +940,7 @@
 \begin_inset Graphics
 	filename figs/axialtract.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/figs/axialdisp.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/figs/dislocation.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/twotet4.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/twotet4.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4/twotet4.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -304,7 +304,7 @@
 \begin_inset Graphics
 	filename figs/axialdisp.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 
@@ -488,7 +488,7 @@
 \begin_inset Graphics
 	filename figs/dislocation.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4-geoproj/figs/dislocation.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -515,7 +515,7 @@
 \begin_inset Graphics
 	filename figs/dislocation.jpg
 	lyxscale 50
-	scale 45
+	scale 33
 
 \end_inset
 

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/axialdisp.eps
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/axialdisp.jpg
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/dislocation.eps
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/dislocation.jpg
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/sheardisp.eps
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/figs/sheardisp.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/twotri3.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/twotri3.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/twotri3/twotri3.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
@@ -461,7 +461,7 @@
 \begin_inset Graphics
 	filename figs/axialdisp.jpg
 	lyxscale 50
-	scale 50
+	scale 33
 
 \end_inset
 
@@ -608,7 +608,7 @@
 \begin_inset Graphics
 	filename figs/sheardisp.jpg
 	lyxscale 50
-	scale 50
+	scale 33
 
 \end_inset
 
@@ -809,7 +809,7 @@
 \begin_inset Graphics
 	filename figs/dislocation.jpg
 	lyxscale 50
-	scale 44
+	scale 33
 
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,14 +1,14 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
 \lyxformat 345
 \begin_document
 \begin_header
 \textclass book
 \begin_preamble
-\usepackage{hyperref}
+%\usepackage{hyperref}
 
-\let\myUrl\url
-\renewcommand{\url}[1]{(\myUrl{#1})}
-\newcommand\Prefix[3]{\vphantom{#3}#1#2#3}
+%\let\myUrl\url
+%\renewcommand{\url}[1]{(\myUrl{#1})}
+%\newcommand\Prefix[3]{\vphantom{#3}#1#2#3}
 \end_preamble
 \use_default_options false
 \language english
@@ -23,9 +23,19 @@
 \font_tt_scale 100
 
 \graphics default
+\float_placement tbph
 \paperfontsize default
 \spacing single
-\use_hyperref false
+\use_hyperref true
+\pdf_bookmarks true
+\pdf_bookmarksnumbered false
+\pdf_bookmarksopen false
+\pdf_bookmarksopenlevel 1
+\pdf_breaklinks true
+\pdf_pdfborder true
+\pdf_colorlinks true
+\pdf_backref false
+\pdf_pdfusetitle true
 \papersize default
 \use_geometry true
 \use_amsmath 1
@@ -671,5 +681,99 @@
 , 157–165.
 \end_layout
 
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+label "18"
+key "Bathe:1995"
+
+\end_inset
+
+Bathe, K.-J.
+ (1995), 
+\shape italic
+Finite-Element Procedures
+\shape default
+, Prentice Hall, Upper Saddle River, New Jersey, 1037 pp.
+\end_layout
+
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+label "19"
+key "Liu:etal:2006"
+
+\end_inset
+
+Liu, P., R.J.
+ Archuleta, S.H.
+ Hartzell (2006), Prediction of broadband ground-motion time histories:
+ Hybrid low/high-frequency method with correlated random source parameters,
+ 
+\shape italic
+Bull.
+ Seismol.
+ Soc.
+ Am.
+\shape default
+, 96, 2118-2130.
+\end_layout
+
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+label "20"
+key "BenZion:Rice:1997"
+
+\end_inset
+
+Ben-Zion, Y.
+ and J.R.
+ Rice (1997), Dynamic simulations of slip on a smooth fault in an elastic
+ solid, J.
+ Geophys.
+ Res., 102, 17,771–17,784.
+\end_layout
+
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+label "21"
+key "Kaneko:etal:2008"
+
+\end_inset
+
+Kaneko, Y., N.
+ Lapusta, and J.-P.
+ Ampuero (2008), Spectral element modeling of spontaneous earthquake rupture
+ on rate and state faults: Effect of velocity-strengthening friction at
+ shallow depths, 
+\shape italic
+Journal of Geophysical Research
+\shape default
+, 113, B09317, doi:10.1029/2007JB005553.
+\end_layout
+
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+label "22"
+key "McGarr:1988"
+
+\end_inset
+
+McGarr, A.
+ (1988), On the state of lithospheric stress in the absence of applied tectonic
+ forces, 
+\shape italic
+Journal of Geophysical Research
+\shape default
+, 
+\shape italic
+93
+\shape default
+, 13,609-13,617.
+\end_layout
+
 \end_body
 \end_document

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -10,6 +10,49 @@
 # ----------------------------------------------------------------------
 #
 
-dist_noinst_DATA =
+dist_noinst_DATA = \
+	README \
+	pylithapp.cfg \
+	step01.cfg \
+	step02.cfg \
+	step03.cfg \
+	step04.cfg \
+	step05.cfg \
+	step06.cfg \
+	step07.cfg \
+	step08.cfg \
+	step09.cfg \
+	step10.cfg \
+	step11.cfg \
+	step12.cfg \
+	step13.cfg \
+	step14.cfg \
+	step15.cfg \
+	step16.cfg \
+	step17.cfg \
+	mesh/geometry.jou \
+	mesh/mesh_hex8_1000m.jou \
+	mesh/box_hex8_1000m.exo \
+	spatialdb/finalslip_rupture.spatialdb \
+	spatialdb/finalslip.spatialdb \
+	spatialdb/fixeddisp_axial_shear.spatialdb \
+	spatialdb/initial_stress.spatialdb \
+	spatialdb/mat_druckerprager.spatialdb \
+	spatialdb/mat_elastic.spatialdb \
+	spatialdb/mat_genmaxwell.spatialdb \
+	spatialdb/mat_maxwell.spatialdb \
+	spatialdb/mat_powerlaw.spatialdb \
+	spatialdb/sliprate_creep.spatialdb \
+	spatialdb/sliptime.spatialdb \
+	spatialdb/tractions_axial_shear.spatialdb \
+	spatialdb/powerlaw/powerlaw_gendb.cfg \
+	spatialdb/powerlaw/powerlaw_params.spatialdb \
+	spatialdb/powerlaw/powerlaw_points.txt \
+	spatialdb/powerlaw/temperature.spatialdb
 
+
+SUBDIRS = \
+	output
+
+
 # End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/README	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/README	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,7 +1,7 @@
-The examples in this directory include (1) simple shearing of a box
-and (2) slip on a through-going, vertical, strike-slip fault in a box
-that is 6 km x 6 km x 4 km with linear hexahedral cells that have
-edges 1.0 km long.
+The examples in this directory form a step-by-step sequence of 17 problems,
+each building on the one before (for the most part). All of the examples
+use the same mesh, which was created by Cubit.  The mesh is 6 km x 6 km x 4
+km with linear hexahedral cells that have edges 1.0 km long.
 
 The box spans the volume:
 
@@ -9,9 +9,9 @@
   -3 km <= y <= +3 km
   -6 km <= z <= 0  km.
 
-The mesh is generated using CUBIT. Journal files are included and are
-annotated to guide you through the GUI to replicate the commands in
-the journal files should you prefer to use the GUI.
+The mesh is generated using CUBIT. Journal files are included in the mesh
+directory and are annotated to guide you through the GUI to replicate the
+commands in the journal files should you prefer to use the GUI.
 
 NOTE: Importing Exodus files into PyLith requires the netcdf
 library. This is included in the PyLith binary distribution. If you
@@ -23,59 +23,97 @@
 You can examine the Exodus file exported from CUBIT using the ncdump
 command.
 
-See the configuration files shearxy.cfg and dislocation.cfg on
-instructions on how to run these simulations. The configuration files
-also contain information about the simulation parameters.
+The examples are all described in the PyLith manual. Results of each
+example are put in the stepxx directories after running the simulation.
+Each simulation may be run by typing:
 
+pylith stepxx.cfg
 
+where xx is the number of the desired example.
+
+
 DESCRIPTION OF FILES
 
-box_hex8_1000m.exo - Exodus file containing mesh exported from CUBIT
+README - This file.
 
-dislocation.cfg - Simulation parameters for fault slip problem
+pylithapp.cfg - PyLith configuration file containing parameters common to
+all simulations.
 
-finalslip.spatialdb - Spatial database for spatial variation of final slip
+figures/hex8-mesh.jpg - JPEG image showing mesh (generated with ParaView).
 
-finalslip_rupture.spatialdb - Spatial database for spatial variation
-of final slip for earthquake rupture in Savage-Prescot type problem.
+mesh/box_hex8_1000m.exo - Exodus file containing mesh exported from Cubit.
 
-fixeddisp_shear.spatialdb - Spatial database for spatial variation of
-the displacement field in the Dirichlet (prescribed displacement)
-boundary conditions for the shear problem
+mesh/geometry.jou - Cubit journal file (script) to generate solid model
+geometry
 
-geometry.jou - CUBIT journal file (script) to generate solid model geometry
+mesh/mesh_hex8_1000m.jou - Cubit journal file (script) to run geometry
+script, generate the mesh, create blocks and nodesets, and export the
+mesh to an Exodus file
 
-gravity.cfg - Simulation parameters for gravitational body forces problem
+spatialdb/finalslip.spatialdb - Spatial database defining fault slip for
+example step03.
 
-mat_elastic.spatialdb - Spatial database specifying the parameters for
-the physical properties of a 3-D elastic, isotropic material.
+spatialdb/finalslip_rupture.spatialdb - Spatial database defining fault
+rupture for examples step06, step07, step08, and step09.
 
-mat_maxwell.spatialdb - Spatial database specifying the parameters for
-the physical properties of a 3-D Maxwell viscoelastic, isotropic
-material.
+spatialdb/initial_stress.spatialdb - Spatial database defining initial
+stresses for example step16.
 
-mat_genmaxwell.spatialdb - Spatial database specifying the parameters for
-the physical properties of a 3-D generalized Maxwell viscoelastic, isotropic
-material.
+spatialdb/mat_druckerprager.spatialdb - Spatial database defining
+Drucker-Prager elastoplastic material properties for example step09.
 
-mat_powerlaw.spatialdb - Spatial database specifying the parameters for
-the physical properties of a 3-D power-law viscoelastic, isotropic
-material.
+spatialdb/mat_elastic.spatialdb - Spatial database defining elastic
+material properties for all examples.
 
-mesh_hex8_1000m.cub - Native CUBIT file containing finite-element mesh
+spatialdb/mat_genmaxwell.spatialdb - Spatial database defining
+generalized Maxwell viscoelastic material properties for examples step15,
+step16, and step17.
 
-mesh_hex8_1000m.jou - CUBIT journal file (script) to run geometry
-script, generate the mesh, create blocks and nodesets, and export the
-mesh to an Exodus file
+spatialdb/mat_maxwell.spatialdb - Spatial database defining Maxwell
+viscoelastic material properties for examples step04, step05, step06,
+and step07.
 
-pylithapp.cfg - General simulation parameters for the mesh
+spatialdb/mat_powerlaw.spatialdb - Spatial database defining power-law
+viscoelastic material properties for example step08.
 
-savageprescott.cfg - Simulation parameters for Savage-Prescott type problem
+spatialdb/sliprate_creep.spatialdb - Spatial database defining slip on the
+creeping portion of the fault for examples step06, step07, step08, and
+step09.
 
-shearxy.cfg - Simulation parameters for the shear problem
+spatialdb/sliptime.spatialdb - Spatial database defining the distribution
+of slip initial time over the fault for examples step03, step06, step07,
+step08, and step09.
 
-sliprate_creep.spatialdb - Spatial database for spatial variation
-of slip rate for creepin portion of fault in Savage-Prescot type problem.
+spatialdb/tractions_axial_shear.spatialdb - Spatial database defining
+axial and shear tractions for example step02.
 
-sliptime.spatialdb - Spatial database for spatial variation of slip
-initiation time
+spatialdb/powerlaw - This directory contains files needed to generate
+power-law properties for PyLith, given the power-law parameters, a
+temperature distribution, and a set of points for which properties are
+desired. The powerlaw_gendb.py utility code is used from this directory
+to create spatialdb/mat_powerlaw.spatialdb.
+
+stepxx.cfg - PyLith configuration file containing parameters for a
+particular example. The example problems are briefly described below:
+
+step01: Dirichlet BC (static)
+step02: Neumann BC (static)
+step03: Earthquake rupture (static)
+step04: Dirichlet BC (quasi-static)
+step05: Dirichlet + Neumann (quasi-static)
+step06: Multiple earthquake rupture + creep (quasi-static)
+step07: Earthquake rupture + creep + Dirichlet BC (quasi-static)
+step08: Same as step07 with power-law rheology (quasi-static)
+step09: Same as step08 with Drucker-Prager elastoplastic rheology
+        (quasi-static)
+step10: Static friction (stick) + Dirichlet BC (static)
+step11: Static friction (slip) + Dirichlet BC (static)
+step12: Static friction + Dirichlet BC (quasi-static)
+step13: Slip-weakening friction + Dirichlet BC (quasi-static)
+step14: Rate- and state-friction + Dirichlet BC (quasi-static)
+step15: Gravitational body forces with generalized Maxwell rheology
+        (quasi-static)
+step16: Gravitational body forces + initial stresses with generalized
+        Maxwell rheology (quasi-static)
+step17: Gravitational body forces + finite strain with generalized Maxwell
+        rheology (quasi-static)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/dislocation.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/dislocation.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,116 +0,0 @@
-# -*- Python -*-
-[pylithapp]
-
-# This is not a self-contained simulation configuration file. This
-# file only specifies parameters specific to the boundary and
-# interface conditions. The general parameters are specificed in the
-# pylithapp.cfg file which PyLith reads by default.
-#
-# To run the simulation:
-# pylith dislocation.cfg
-
-# ----------------------------------------------------------------------
-# problem
-# ----------------------------------------------------------------------
-[pylithapp.timedependent]
-# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
-bc = [x_pos,x_neg,z_neg]
-
-# Set interfaces to an array of 1 fault: 'fault'.
-interfaces = [fault]
-
-[pylithapp.timedependent.implicit]
-# Set the output to an array of 2 output managers.
-# We will output the solution over the domain and the ground surface.
-output = [domain,subdomain]
-
-# Set subdomain component to OutputSolnSubset (subset of domain).
-output.subdomain = pylith.meshio.OutputSolnSubset
-
-# ----------------------------------------------------------------------
-# materials
-# ----------------------------------------------------------------------
-
-# We specifically define the database info for the viscoelastic material
-# for each model, since the type of spatialdb can be different.
-
-[pylithapp.timedependent.materials.viscoelastic]
-db_properties.iohandler.filename = mat_maxwell.spatialdb
-
-# ----------------------------------------------------------------------
-# boundary conditions
-# ----------------------------------------------------------------------
-
-# We use the default spatial database for the Dirichlet BC which sets
-# the displacements to zero for all time.
-#
-# Set the parameters for the desired boundary conditions.
-#
-# Note: A more natural set of boundary conditions involves pinning the
-# z-DOF on the bottom (-z) face. Howver, the current release of PyLith
-# does not permit overlapping fault interfaces and Dirichlet boundary
-# conditions with the block Jacobi preconditioner.
-
-# The label corresponds to the nodeset ID in CUBIT.
-
-[pylithapp.timedependent.bc.x_pos]
-bc_dof = [0, 1]
-label = 11
-db_initial.label = Dirichlet BC on +x
-
-[pylithapp.timedependent.bc.x_neg]
-bc_dof = [0, 1]
-label = 12
-db_initial.label = Dirichlet BC on -x
-
-[pylithapp.timedependent.bc.z_neg]
-bc_dof = [2]
-label = 16
-db_initial.label = Dirichlet BC on -z
-
-# ----------------------------------------------------------------------
-# faults
-# ----------------------------------------------------------------------
-[pylithapp.timedependent.interfaces]
-# Set the type of fault interface condition.
-fault = pylith.faults.FaultCohesiveKin
-
-# Set the parameters for the fault interface condition.
-
-[pylithapp.timedependent.interfaces.fault]
-label = 10
-quadrature.cell = pylith.feassemble.FIATLagrange
-quadrature.cell.dimension = 2
-
-[pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
-slip.iohandler.filename = finalslip.spatialdb
-slip_time.iohandler.filename = sliptime.spatialdb
-
-
-# ----------------------------------------------------------------------
-# output
-# ----------------------------------------------------------------------
-# Give basename for VTK domain output of solution over domain.
-[pylithapp.problem.formulation.output.domain.writer]
-filename = dislocation.vtk
-
-# Give basename for VTK domain output of solution over ground surface.
-[pylithapp.problem.formulation.output.subdomain]
-label = 17 ; nodeset for subdomain
-writer.filename = dislocation-groundsurf.vtk
-
-# Give basename for vtk fault output.
-[pylithapp.timedependent.interfaces.fault.output.writer]
-filename = dislocation-fault.vtk
-
-# Give basename for VTK output of state variables.
-[pylithapp.timedependent.materials.elastic.output]
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = dislocation-elastic.vtk
-
-[pylithapp.timedependent.materials.viscoelastic.output]
-cell_info_fields = [density,mu,lambda,maxwell_time]
-cell_data_fields = [total_strain,stress,viscous_strain]
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = dislocation-viscoelastic.vtk
-

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/dislocation.jpg
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,103 +0,0 @@
-# -*- Python -*-
-[pylithapp]
-
-
-# This is not a self-contained simulation configuration file. This
-# file only specifies parameters specific to the boundary
-# conditions. The general parameters are specificed in the pylithapp.cfg
-# file which PyLith reads by default.
-#
-# To run the simulation:
-# pylith gravity.cfg
-
-# ----------------------------------------------------------------------
-# problem
-# ----------------------------------------------------------------------
-[pylithapp.timedependent]
-# Set bc to an array of 5 boundary conditions: 'x_pos','x_neg', 'y_pos',
-# 'y_neg', and 'z_neg'.
-bc = [x_pos,x_neg,y_pos,y_neg,z_neg]
-
-# Set gravity field (default is None)
-gravity_field = spatialdata.spatialdb.GravityField
-
-[pylithapp.timedependent.implicit]
-# Set the output to an array of 2 output managers.
-# We will output the solution over the domain and the ground surface.
-output = [domain,subdomain]
-
-# Set subdomain component to OutputSolnSubset (subset of domain).
-output.subdomain = pylith.meshio.OutputSolnSubset
-
-# ----------------------------------------------------------------------
-# materials
-# ----------------------------------------------------------------------
-
-# We specifically define the database info for the viscoelastic material
-# for each model, since the type of spatialdb can be different.
-
-[pylithapp.timedependent.materials.viscoelastic]
-db_properties.iohandler.filename = mat_maxwell.spatialdb
-
-# ----------------------------------------------------------------------
-# boundary conditions
-# ----------------------------------------------------------------------
-# Use the default FixedDOFDB, which has a uniform spatial distribution.
-
-# Set the parameters for Dirichlet boundary conditions applied on the
-# +x, -x, +y, -y, and -z faces of the box. Note that we only use a subset of the
-# boundary conditions provided in the 6 BC container.
-
-# We fix the x degree of freedom on the +x and -x faces, the y degree of
-# freedom on the +y and -y faces, and the z degree of freedom on the
-# bottom face.
-
-# The label corresponds to the nodeset ID in CUBIT.
-
-[pylithapp.timedependent.bc.x_pos]
-bc_dof = [0]
-label = 11
-db_initial.label = Dirichlet BC on +x
-
-[pylithapp.timedependent.bc.x_neg]
-bc_dof = [0]
-label = 12
-db_initial.label = Dirichlet BC on -x
-
-[pylithapp.timedependent.bc.y_pos]
-bc_dof = [1]
-label = 13
-db_initial.label = Dirichlet BC on +y
-
-[pylithapp.timedependent.bc.y_neg]
-bc_dof = [1]
-label = 14
-db_initial.label = Dirichlet BC on -y
-
-[pylithapp.timedependent.bc.z_neg]
-bc_dof = [2]
-label = 15
-db_initial.label = Dirichlet BC on -z
-
-# ----------------------------------------------------------------------
-# output
-# ----------------------------------------------------------------------
-# Give basename for VTK domain output of solution over domain.
-[pylithapp.problem.formulation.output.domain.writer]
-filename = gravity.vtk
-
-# Give basename for VTK domain output of solution over ground surface.
-[pylithapp.problem.formulation.output.subdomain]
-label = 17 ; nodeset for subdomain
-writer.filename = gravity-groundsurf.vtk
-
-# Give basename for VTK output of state variables.
-[pylithapp.timedependent.materials.elastic.output]
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = gravity-elastic.vtk
-
-[pylithapp.timedependent.materials.viscoelastic.output]
-cell_info_fields = [density,mu,lambda,maxwell_time]
-cell_data_fields = [total_strain,stress,viscous_strain]
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = gravity-viscoelastic.vtk

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity_istress.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity_istress.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/gravity_istress.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,116 +0,0 @@
-# -*- Python -*-
-[pylithapp]
-
-
-# This is not a self-contained simulation configuration file. This
-# file only specifies parameters specific to the boundary
-# conditions. The general parameters are specificed in the pylithapp.cfg
-# file which PyLith reads by default.
-#
-# To run the simulation:
-# pylith gravity_istress.cfg
-
-# ----------------------------------------------------------------------
-# problem
-# ----------------------------------------------------------------------
-[pylithapp.timedependent]
-# Set bc to an array of 5 boundary conditions: 'x_pos','x_neg', 'y_pos',
-# 'y_neg', and 'z_neg'.
-bc = [x_pos,x_neg,y_pos,y_neg,z_neg]
-
-# Set gravity field (default is None)
-gravity_field = spatialdata.spatialdb.GravityField
-
-[pylithapp.timedependent.implicit]
-# Set the output to an array of 2 output managers.
-# We will output the solution over the domain and the ground surface.
-output = [domain,subdomain]
-
-# Set subdomain component to OutputSolnSubset (subset of domain).
-output.subdomain = pylith.meshio.OutputSolnSubset
-
-# ----------------------------------------------------------------------
-# materials
-# ----------------------------------------------------------------------
-
-# We specifically define the database info for the viscoelastic material
-# for each model, since the type of spatialdb can be different.
-
-[pylithapp.timedependent.materials.viscoelastic]
-db_properties.iohandler.filename = mat_maxwell.spatialdb
-
-# ----------------------------------------------------------------------
-# initial stresses
-# ----------------------------------------------------------------------
-[pylithapp.timedependent.materials.elastic]
-db_initial_stress = spatialdata.spatialdb.SimpleDB
-db_initial_stress.iohandler.filename = initial_stress.spatialdb
-db_initial_stress.query_type = linear
-
-[pylithapp.timedependent.materials.viscoelastic]
-db_initial_stress = spatialdata.spatialdb.SimpleDB
-db_initial_stress.iohandler.filename = initial_stress.spatialdb
-db_initial_stress.query_type = linear
-
-# ----------------------------------------------------------------------
-# boundary conditions
-# ----------------------------------------------------------------------
-# Use the default FixedDOFDB, which has a uniform spatial distribution.
-
-# Set the parameters for Dirichlet boundary conditions applied on the
-# +x, -x, +y, -y, and -z faces of the box. Note that we only use a subset of the
-# boundary conditions provided in the 6 BC container.
-
-# We fix the x degree of freedom on the +x and -x faces, the y degree of
-# freedom on the +y and -y faces, and the z degree of freedom on the
-# bottom face.
-
-# The label corresponds to the nodeset ID in CUBIT.
-
-[pylithapp.timedependent.bc.x_pos]
-bc_dof = [0]
-label = 11
-db_initial.label = Dirichlet BC on +x
-
-[pylithapp.timedependent.bc.x_neg]
-bc_dof = [0]
-label = 12
-db_initial.label = Dirichlet BC on -x
-
-[pylithapp.timedependent.bc.y_pos]
-bc_dof = [1]
-label = 13
-db_initial.label = Dirichlet BC on +y
-
-[pylithapp.timedependent.bc.y_neg]
-bc_dof = [1]
-label = 14
-db_initial.label = Dirichlet BC on -y
-
-[pylithapp.timedependent.bc.z_neg]
-bc_dof = [2]
-label = 15
-db_initial.label = Dirichlet BC on -z
-
-# ----------------------------------------------------------------------
-# output
-# ----------------------------------------------------------------------
-# Give basename for VTK domain output of solution over domain.
-[pylithapp.problem.formulation.output.domain.writer]
-filename = gravity_istress.vtk
-
-# Give basename for VTK domain output of solution over ground surface.
-[pylithapp.problem.formulation.output.subdomain]
-label = 17 ; nodeset for subdomain
-writer.filename = gravity_istress-groundsurf.vtk
-
-# Give basename for VTK output of state variables.
-[pylithapp.timedependent.materials.elastic.output]
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = gravity_istress-elastic.vtk
-
-[pylithapp.timedependent.materials.viscoelastic.output]
-cell_info_fields = [density,mu,lambda,maxwell_time]
-cell_data_fields = [total_strain,stress,viscous_strain]
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = gravity_istress-viscoelastic.vtk

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/hex8-gravity.jpg
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/hex8-gravity_istress.jpg
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/hex8-mesh.jpg
===================================================================
(Binary files differ)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/output (from rev 16998, short/3D/PyLith/trunk/examples/3d/hex8/output)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -77,7 +77,7 @@
 
 # Convergence parameters.
 ksp_rtol = 1.0e-8
-ksp_atol = 1.0e-15
+ksp_atol = 1.0e-12
 ksp_max_it = 100
 ksp_gmres_restart = 50
 
@@ -88,7 +88,7 @@
 
 # Nonlinear solver monitoring options.
 snes_rtol = 1.0e-8
-snes_atol = 1.0e-15
+snes_atol = 1.0e-12
 snes_max_it = 100
 snes_monitor = true
 snes_view = true

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/savageprescott-t100.jpg
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/savageprescott.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/savageprescott.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/savageprescott.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,198 +0,0 @@
-# -*- Python -*-
-[pylithapp]
-
-# This is not a self-contained simulation configuration file. This
-# file only specifies parameters specific to the boundary and
-# interface conditions. The general parameters are specificed in the
-# pylithapp.cfg file which PyLith reads by default.
-#
-# To run the simulation:
-# pylith savageprescott.cfg
-
-# ----------------------------------------------------------------------
-# problem
-# ----------------------------------------------------------------------
-[pylithapp.timedependent]
-# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
-bc = [x_pos,x_neg,z_neg]
-
-# Set interfaces to an array of 1 fault: 'fault'.
-interfaces = [fault]
-
-# Change time stepping algorithm from uniform time step, to adaptive
-# time stepping.
-implicit.time_step = pylith.problems.TimeStepAdapt
-
-[pylithapp.timedependent.implicit.time_step]
-# Define the total time for the simulation and the default time step size.
-# Overwrite values in pylithapp.cfg
-total_time = 700.0*year ; total time of simulation
-max_dt = 10.0*year ; time step
-stability_factor = 1.0 ; use time step equal to stable value from materials
-
-[pylithapp.timedependent.implicit]
-# Set the output to an array of 2 output managers.
-# We will output the solution over the domain and the ground surface.
-output = [domain,subdomain]
-
-# Set subdomain component to OutputSolnSubset (subset of domain).
-output.subdomain = pylith.meshio.OutputSolnSubset
-
-# ----------------------------------------------------------------------
-# materials
-# ----------------------------------------------------------------------
-
-# Users can switch between linear Maxwell rheology and power-law
-# rheology by commenting and uncommenting the lines in the appropriate
-# section.
-# *** BEGIN MAXWELL SECTION ***
-# [pylithapp.timedependent.materials.viscoelastic]
-# db_properties.iohandler.filename = mat_maxwell.spatialdb
-# output.cell_info_fields = [density,mu,lambda,maxwell_time]
-# output.cell_data_fields = [total_strain,stress,viscous_strain]
-# *** END MAXWELL SECTION ***
-
-# *** BEGIN POWER-LAW SECTION ***
-#[pylithapp.timedependent]
-#implicit.solver = pylith.problems.SolverNonlinear
-#implicit.time_step.max_dt = 10.0*year
-#implicit.time_step.adapt_skip = 0
-#materials.viscoelastic = pylith.materials.PowerLaw3D
-#
-#[pylithapp.timedependent.materials.viscoelastic]
-#db_properties = spatialdata.spatialdb.CompositeDB
-#db_properties.db_A = spatialdata.spatialdb.SimpleDB
-#db_properties.db_B = spatialdata.spatialdb.SimpleDB
-#output.cell_info_fields = [density,mu,lambda,reference_strain_rate,reference_stress,power_law_exponent]
-#output.cell_data_fields = [total_strain,stress,viscous_strain]
-#
-#[pylithapp.timedependent.materials.viscoelastic.db_properties]
-#values_A = [density,vs,vp]
-#db_A.label = Elastic properties
-#db_A.iohandler.filename = spatialdb/mat_elastic.spatialdb
-#
-#values_B = [reference-stress,reference-strain-rate,power-law-exponent]
-#db_B.label = Power-law properties
-#db_B.iohandler.filename = spatialdb/mat_powerlaw.spatialdb
-# *** END POWER-LAW SECTION ***
-
-# ----------------------------------------------------------------------
-# boundary conditions
-# ----------------------------------------------------------------------
-
-# We change spatial database for the rate of change from FixedDOFDB
-# (which has zero velocity) to UniformDB (which allows nonzero
-# velocities).
-
-# Set the parameters for the desired boundary conditions.
-#
-# The label corresponds to the nodeset ID in CUBIT.
-
-[pylithapp.timedependent.bc.x_pos]
-bc_dof = [0, 1]
-label = 11
-db_initial.label = Dirichlet BC on +x
-db_rate = spatialdata.spatialdb.UniformDB
-db_rate.label = Dirichlet rate BC on +x
-db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
-db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
-
-[pylithapp.timedependent.bc.x_neg]
-bc_dof = [0, 1]
-label = 12
-db_initial.label = Dirichlet BC on -x
-db_rate = spatialdata.spatialdb.UniformDB
-db_rate.label = Dirichlet rate BC on -x
-db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
-db_rate.data = [0.0*cm/year,+1.0*cm/year,0.0*year]
-
-[pylithapp.timedependent.bc.z_neg]
-bc_dof = [2]
-label = 16
-db_initial.label = Dirichlet BC on -z
-
-# ----------------------------------------------------------------------
-# faults
-# ----------------------------------------------------------------------
-[pylithapp.timedependent.interfaces]
-
-# Set the parameters for the fault interface conditions.
-
-[pylithapp.timedependent.interfaces.fault]
-label = 10
-quadrature.cell = pylith.feassemble.FIATLagrange
-quadrature.cell.dimension = 2
-
-output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
-
-# Set earthquake ruptures
-eq_srcs = [creep,one,two,three]
-eq_srcs.creep.origin_time = 00.0*year
-eq_srcs.one.origin_time = 200.0*year
-eq_srcs.two.origin_time = 400.0*year
-eq_srcs.three.origin_time = 600.0*year
-
-# one
-[pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
-slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
-slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
-
-# two
-[pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
-slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
-slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
-
-# three
-[pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
-slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
-slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
-
-# creep
-[pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
-slip_function = pylith.faults.ConstRateSlipFn
-origin_time = 0.0*s
-slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
-slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
-
-# ----------------------------------------------------------------------
-# output
-# ----------------------------------------------------------------------
-# Give basename for VTK domain output of solution over domain.
-[pylithapp.problem.formulation.output.domain]
-output_freq = time_step
-time_step = 50.0*year
-writer.filename = savageprescott.vtk
-writer.time_format = %04.0f
-writer.time_constant = 1.0*year
-
-# Give basename for VTK domain output of solution over ground surface.
-[pylithapp.problem.formulation.output.subdomain]
-label = 17 ; nodeset for subdomain
-skip = 0
-writer.filename = savageprescott-groundsurf.vtk
-writer.time_format = %04.0f
-writer.time_constant = 1.0*year
-
-# Give basename for vtk fault rupture output.
-[pylithapp.timedependent.interfaces.fault.output]
-skip = 0
-writer.filename = savageprescott-fault.vtk
-writer.time_format = %04.0f
-writer.time_constant = 1.0*year
-
-# Give basename for VTK output of state variables.
-[pylithapp.timedependent.materials.elastic.output]
-output_freq = time_step
-time_step = 50.0*year
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = savageprescott-elastic.vtk
-writer.time_format = %04.0f
-writer.time_constant = 1.0*year
-
-[pylithapp.timedependent.materials.viscoelastic.output]
-output_freq = time_step
-time_step = 50.0*year
-cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = savageprescott-viscoelastic.vtk
-writer.time_format = %04.0f
-writer.time_constant = 1.0*year

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/shear.jpg
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,29 +0,0 @@
-// -*- C++ -*- (tell Emacs to use C++ mode for syntax highlighting)
-//
-// This spatial database specifies the distribution of the
-// displacement field for Dirichlet boundary conditions associated
-// with axial displacements on -x and +x
-//
-//
-#SPATIAL.ascii 1
-SimpleDB {
-  num-values = 3
-  value-names =  dof-0  dof-1  dof-2
-  value-units =  m  m  m
-  num-locs = 2
-  data-dim = 1 // locations form a line
-  space-dim = 3
-  cs-data = cartesian {
-    to-meters = 1.0e+3 // specify coordinates in km
-    space-dim = 3
-  }
-}
-// Columns are
-// (1) x coordinate (km)
-// (2) y coordinate (km)
-// (3) z coordinate (km)
-// (4) Ux (m)
-// (5) Uy (m)
-// (6) Uz (m)
--3.0  0.0  0.0   +1.0   0.0  0.0
-+3.0  0.0  0.0   -1.0   0.0  0.0

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,28 +0,0 @@
-// -*- C++ -*- (tell Emacs to use C++ mode for syntax highlighting)
-//
-// This spatial database specifies the distribution of the
-// displacement field for Dirichlet boundary conditions associated
-// with shear in the xy plane.
-//
-#SPATIAL.ascii 1
-SimpleDB {
-  num-values = 3
-  value-names =  displacement-x  displacement-y  displacement-z
-  value-units =  m  m  m
-  num-locs = 2
-  data-dim = 1 // locations form a line
-  space-dim = 3
-  cs-data = cartesian {
-    to-meters = 1.0e+3 // specify coordinates in km
-    space-dim = 3
-  }
-}
-// Columns are
-// (1) x coordinate (km)
-// (2) y coordinate (km)
-// (3) z coordinate (km)
-// (4) Ux (m)
-// (5) Uy (m)
-// (6) Uz (m)
--3.0  0.0  0.0    0.0  -1.0  0.0
-+3.0  0.0  0.0    0.0  +1.0  0.0

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb	2010-06-11 23:01:21 UTC (rev 16999)
@@ -4,6 +4,15 @@
 // properties for a Generalized Maxwell viscoelastic material. In
 // this case, the material properties are uniform.
 //
+// The first viscosity corresponds to a Maxwell time of 10 years, the
+// second corresponds to a Maxwell time of 100 years, and the third
+// corresponds to a Maxwell time of 1000 years. The shear ratio is set so
+// that the first two models are weighted by 0.4 and the third is weighted
+// by 0.2. Since these add up to 1.0, the material is still a fluid. If
+// the sum of the shear ratios was less than one, the remainder goes into a
+// spring in parallel with the Maxwell models (and the material is thus a
+// solid).
+//
 #SPATIAL.ascii 1
 SimpleDB {
   num-values = 9 // number of material property values
@@ -30,4 +39,4 @@
 // (10) viscosity 1 (Pa-s)
 // (11) viscosity 2 (Pa-S)
 // (12) viscosity 3 (Pa-s)
-0.0  0.0  0.0   2700.0  1054.09255338946   1825.741858350554    0.5  0.5  0.0  1.0e19  1.0e18  1.0e20
+0.0  0.0  0.0   2500.0  3000.0  5291.502622129181  0.4  0.4  0.2  7.10046e18 7.10046e19 7.10046e20

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_powerlaw.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_powerlaw.spatialdb	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_powerlaw.spatialdb	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,30 +1,23 @@
-// -*- C++ -*- (tell Emacs to use C++ mode for syntax highlighting)
-//
-// This spatial database specifies the distribution of material
-// properties for a power-law viscoelastic material. In this case,
-// the material properties are uniform.
-//
 #SPATIAL.ascii 1
 SimpleDB {
-  num-values = 6 // number of material property values
-  value-names =  density vs vp reference-strain-rate reference-stress power-law-exponent // names of the material property values
-  value-units =  kg/m**3  m/s  m/s 1/s Pa None // units
-  num-locs = 1 // number of locations
-  data-dim = 0
-  space-dim = 3
+  num-values =      3
+  value-names =  reference-stress  reference-strain-rate  power-law-exponent
+  value-units =  Pa  1/s  none
+  num-locs =     10
+  data-dim =    1
+  space-dim =    3
   cs-data = cartesian {
-    to-meters = 1.0
-    space-dim = 3
-  }
+  to-meters = 1
+  space-dim = 3
 }
-// Columns are
-// (1) x coordinate (m)
-// (2) y coordinate (m)
-// (3) z coordinate (m)
-// (4) density (kg/m^3)
-// (5) vs (m/s)
-// (6) vp (m/s)
-// (7) reference-strain-rate (1/s)
-// (8) reference-stress (Pa)
-// (8) power-law-exponent (no units)
-0.0  0.0  0.0   2500.0  3000.0  5291.502622129181 1.0e-6 1.25992105e+10 3.0
+}
+  0.000000e+00  0.000000e+00  0.000000e+00  1.818610e+16  1.000000e-06  1.500000e+00
+  0.000000e+00  0.000000e+00 -5.000000e+02  1.977176e+13  1.000000e-06  1.500000e+00
+  0.000000e+00  0.000000e+00 -1.000000e+03  2.801905e+11  1.000000e-06  1.500000e+00
+  0.000000e+00  0.000000e+00 -1.500000e+03  1.528518e+10  1.000000e-06  1.500000e+00
+  0.000000e+00  0.000000e+00 -1.900000e+03  2.687566e+09  1.000000e-06  1.500000e+00
+  0.000000e+00  0.000000e+00 -2.100000e+03  1.201397e+12  1.000000e-06  3.500000e+00
+  0.000000e+00  0.000000e+00 -2.500000e+03  1.483187e+11  1.000000e-06  3.500000e+00
+  0.000000e+00  0.000000e+00 -3.000000e+03  1.798919e+10  1.000000e-06  3.500000e+00
+  0.000000e+00  0.000000e+00 -3.500000e+03  3.284422e+09  1.000000e-06  3.500000e+00
+  0.000000e+00  0.000000e+00 -4.000000e+03  8.099233e+08  1.000000e-06  3.500000e+00

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw/powerlaw_gendb.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw/powerlaw_gendb.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw/powerlaw_gendb.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -2,6 +2,7 @@
 [powerlaw_gendb]
 
 reference_value = strain_rate
+reference_strain_rate = 1.0e-6/s
 
 [powerlaw_gendb.db_exponent]
 label = Power-law exponent
@@ -26,4 +27,4 @@
 reader.filename = powerlaw_points.txt
 
 [powerlaw_gendb.iohandler]
-filename = powerlaw_properties.spatialdb
+filename = ../mat_powerlaw.spatialdb

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw_properties.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw_properties.spatialdb	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/powerlaw_properties.spatialdb	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,23 +0,0 @@
-#SPATIAL.ascii 1
-SimpleDB {
-  num-values =      3
-  value-names =  reference-stress  reference-strain-rate  power-law-exponent
-  value-units =  Pa  1/s  none
-  num-locs =     10
-  data-dim =    1
-  space-dim =    3
-  cs-data = cartesian {
-  to-meters = 1
-  space-dim = 3
-}
-}
-  0.000000e+00  0.000000e+00  0.000000e+00  1.818610e+16  1.000000e-06  1.500000e+00
-  0.000000e+00  0.000000e+00 -5.000000e+02  1.977176e+13  1.000000e-06  1.500000e+00
-  0.000000e+00  0.000000e+00 -1.000000e+03  2.801905e+11  1.000000e-06  1.500000e+00
-  0.000000e+00  0.000000e+00 -1.500000e+03  1.528518e+10  1.000000e-06  1.500000e+00
-  0.000000e+00  0.000000e+00 -1.900000e+03  2.687566e+09  1.000000e-06  1.500000e+00
-  0.000000e+00  0.000000e+00 -2.100000e+03  1.201397e+12  1.000000e-06  3.500000e+00
-  0.000000e+00  0.000000e+00 -2.500000e+03  1.483187e+11  1.000000e-06  3.500000e+00
-  0.000000e+00  0.000000e+00 -3.000000e+03  1.798919e+10  1.000000e-06  3.500000e+00
-  0.000000e+00  0.000000e+00 -3.500000e+03  3.284422e+09  1.000000e-06  3.500000e+00
-  0.000000e+00  0.000000e+00 -4.000000e+03  8.099233e+08  1.000000e-06  3.500000e+00

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -25,7 +25,7 @@
 # To run the simulation:
 # pylith step01.cfg
 #
-# Output will be directed to the directory step01.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -88,22 +88,22 @@
 # ----------------------------------------------------------------------
 # Give basename for VTK domain output of solution over domain.
 [pylithapp.problem.formulation.output.domain.writer]
-filename = step01/step01.vtk
+filename = output/step01.vtk
 
 # Give basename for VTK domain output of solution over ground surface.
 [pylithapp.problem.formulation.output.subdomain]
 # Name of nodeset for ground surface.
 label = face_zpos
-writer.filename = step01/step01-groundsurf.vtk
+writer.filename = output/step01-groundsurf.vtk
 
 # Give basename for VTK output of upper_crust state variables.
 [pylithapp.timedependent.materials.upper_crust.output]
 # Average values over quadrature points.
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step01/step01-upper_crust.vtk
+writer.filename = output/step01-upper_crust.vtk
 
 # Give basename for VTK output of lower_crust state variables.
 [pylithapp.timedependent.materials.lower_crust.output]
 # Average values over quadrature points.
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step01/step01-lower_crust.vtk
+writer.filename = output/step01-lower_crust.vtk

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -28,7 +28,7 @@
 # To run the simulation:
 # pylith step03.cfg
 #
-# Output will be directed to directory step03.
+# Output will be directed to directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -108,23 +108,23 @@
 # ----------------------------------------------------------------------
 # Give basename for VTK domain output of solution over domain.
 [pylithapp.problem.formulation.output.domain.writer]
-filename = step03/step03.vtk
+filename = output/step03.vtk
 
 # Give basename for VTK domain output of solution over ground surface.
 [pylithapp.problem.formulation.output.subdomain]
 label = face_zpos ; Name of nodeset for ground surface.
-writer.filename = step03/step03-groundsurf.vtk
+writer.filename = output/step03-groundsurf.vtk
 
 # Give basename for VTK fault output.
 [pylithapp.problem.interfaces.fault.output]
-writer.filename = step03/step03-fault.vtk
+writer.filename = output/step03-fault.vtk
 
 # Give basename for VTK output of upper_crust state variables.
 [pylithapp.timedependent.materials.upper_crust.output]
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step03/step03-upper_crust.vtk
+writer.filename = output/step03-upper_crust.vtk
 
 # Give basename for VTK output of lower_crust state variables.
 [pylithapp.timedependent.materials.lower_crust.output]
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step03/step03-lower_crust.vtk
+writer.filename = output/step03-lower_crust.vtk

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -26,7 +26,7 @@
 # To run the simulation:
 # pylith step04.cfg
 #
-# Output will be directed to the directory step04.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -124,7 +124,7 @@
 # the time stamp.
 output_freq = time_step
 time_step = 40.0*year
-writer.filename = step04/step04.vtk
+writer.filename = output/step04.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -135,7 +135,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step04/step04-groundsurf.vtk
+writer.filename = output/step04-groundsurf.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -145,7 +145,7 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 40.0*year
-writer.filename = step04/step04-upper_crust.vtk
+writer.filename = output/step04-upper_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -155,6 +155,6 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 40.0*year
-writer.filename = step04/step04-lower_crust.vtk
+writer.filename = output/step04-lower_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -35,7 +35,7 @@
 # To run the simulation:
 # pylith step05.cfg
 #
-# Output will be directed to the directory step05.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -129,7 +129,7 @@
 db_initial.data = [0.0*cm,-0.5*cm]
 # Velocities.
 db_rate = spatialdata.spatialdb.UniformDB
-db_rate.label = Dirichlet rate BC on +x
+db_rate.label = Dirichlet rate BC on -x
 db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
 db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
 
@@ -150,7 +150,7 @@
 # the time stamp.
 output_freq = time_step
 time_step = 40.0*year
-writer.filename = step05/step05.vtk
+writer.filename = output/step05.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -161,7 +161,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step05/step05-groundsurf.vtk
+writer.filename = output/step05-groundsurf.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -171,7 +171,7 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 40.0*year
-writer.filename = step05/step05-upper_crust.vtk
+writer.filename = output/step05-upper_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -181,6 +181,6 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 40.0*year
-writer.filename = step05/step05-lower_crust.vtk
+writer.filename = output/step05-lower_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -34,7 +34,7 @@
 # To run the simulation:
 # pylith step06.cfg
 #
-# Output will be directed to the directory step06.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -132,10 +132,6 @@
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
-# Due to the complex time history used for the fault, a number of additional
-# info fields are available.
-output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
-
 # Set earthquake sources to an array consisting of creep and 3 ruptures.
 eq_srcs = [creep,one,two,three]
 eq_srcs.creep.origin_time = 00.0*year
@@ -161,10 +157,14 @@
 # Define slip rate and origin time for fault creep.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
 slip_function = pylith.faults.ConstRateSlipFn
-origin_time = 0.0*s
 slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
 slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
+# Due to the complex time history used for the fault, a number of additional
+# info fields are available.
+[pylithapp.timedependent.interfaces.fault]
+output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
+
 # ----------------------------------------------------------------------
 # output
 # ----------------------------------------------------------------------
@@ -176,7 +176,7 @@
 # the time stamp.
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step06/step06.vtk
+writer.filename = output/step06.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -187,7 +187,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step06/step06-groundsurf.vtk
+writer.filename = output/step06-groundsurf.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -196,7 +196,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step06/step06-fault.vtk
+writer.filename = output/step06-fault.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -206,7 +206,7 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step06/step06-upper_crust.vtk
+writer.filename = output/step06-upper_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -216,6 +216,6 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step06/step06-lower_crust.vtk
+writer.filename = output/step06-lower_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -34,7 +34,7 @@
 # To run the simulation:
 # pylith step07.cfg
 #
-# Output will be directed to the directory step07.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -146,10 +146,6 @@
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
-# Due to the complex time history used for the fault, a number of additional
-# info fields are available.
-output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
-
 # Set earthquake sources to an array consisting of creep and 3 ruptures.
 eq_srcs = [creep,one,two,three]
 eq_srcs.creep.origin_time = 00.0*year
@@ -175,10 +171,14 @@
 # Define slip rate and origin time for fault creep.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
 slip_function = pylith.faults.ConstRateSlipFn
-origin_time = 0.0*s
 slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
 slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
+# Due to the complex time history used for the fault, a number of additional
+# info fields are available.
+[pylithapp.timedependent.interfaces.fault]
+output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
+
 # ----------------------------------------------------------------------
 # output
 # ----------------------------------------------------------------------
@@ -188,9 +188,11 @@
 # ask for output every 50 years. The time stamps of the output files are
 # in years (rather than the default of seconds), and we give a format for
 # the time stamp.
+# We also request velocity output in addition to displacements.
+vertex_data_fields = [displacement,velocity]
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step07/step07.vtk
+writer.filename = output/step07.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -198,10 +200,12 @@
 [pylithapp.problem.formulation.output.subdomain]
 # Name of nodeset for ground surface.
 label = face_zpos
+# We also request velocity output in addition to displacements.
+vertex_data_fields = [displacement,velocity]
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step07/step07-groundsurf.vtk
+writer.filename = output/step07-groundsurf.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -210,7 +214,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step07/step07-fault.vtk
+writer.filename = output/step07-fault.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -220,7 +224,7 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step07/step07-upper_crust.vtk
+writer.filename = output/step07-upper_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -230,6 +234,6 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step07/step07-lower_crust.vtk
+writer.filename = output/step07-lower_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -27,7 +27,7 @@
 # To run the simulation:
 # pylith step08.cfg
 #
-# Output will be directed to the directory step08.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -79,12 +79,6 @@
 db_properties = spatialdata.spatialdb.CompositeDB
 db_properties.db_A = spatialdata.spatialdb.SimpleDB
 db_properties.db_B = spatialdata.spatialdb.SimpleDB
-# Since there are additional properties and state variables for the
-# power-law model, we explicitly request that they be output. Properties are
-# named in cell_info_fields and state variables are named in
-# cell_data_fields.
-output.cell_info_fields = [density,mu,lambda,reference_strain_rate,reference_stress,power_law_exponent]
-output.cell_data_fields = [total_strain,stress,viscous_strain]
 
 # Provide the values to be obtained from each database and the database
 # name.
@@ -96,6 +90,14 @@
 db_B.label = Power-law properties
 db_B.iohandler.filename = spatialdb/mat_powerlaw.spatialdb
 
+# Since there are additional properties and state variables for the
+# power-law model, we explicitly request that they be output. Properties are
+# named in cell_info_fields and state variables are named in
+# cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+output.cell_info_fields = [density,mu,lambda,reference_strain_rate,reference_stress,power_law_exponent]
+output.cell_data_fields = [total_strain,stress,viscous_strain]
+
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
@@ -205,7 +207,7 @@
 # the time stamp.
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step08/step08.vtk
+writer.filename = output/step08.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -216,7 +218,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step08/step08-groundsurf.vtk
+writer.filename = output/step08-groundsurf.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -225,7 +227,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step08/step08-fault.vtk
+writer.filename = output/step08-fault.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -235,7 +237,7 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step08/step08-upper_crust.vtk
+writer.filename = output/step08-upper_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -245,6 +247,6 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step08/step08-lower_crust.vtk
+writer.filename = output/step08-lower_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -28,7 +28,7 @@
 # To run the simulation:
 # pylith step09.cfg
 #
-# Output will be directed to the directory step09.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -80,12 +80,6 @@
 db_properties = spatialdata.spatialdb.CompositeDB
 db_properties.db_A = spatialdata.spatialdb.SimpleDB
 db_properties.db_B = spatialdata.spatialdb.SimpleDB
-# Since there are additional properties and state variables for the
-# Drucker-Prager model, we explicitly request that they be output.
-# Properties are named in cell_info_fields and state variables are named in
-# cell_data_fields.
-output.cell_info_fields = [density,mu,lambda,alpha_yield,beta,alpha_flow]
-output.cell_data_fields = [total_strain,stress,plastic_strain]
 
 # Provide the values to be obtained from each database and the database
 # name.
@@ -97,6 +91,14 @@
 db_B.label = Drucker-Prager properties
 db_B.iohandler.filename = spatialdb/mat_druckerprager.spatialdb
 
+# Since there are additional properties and state variables for the
+# Drucker-Prager model, we explicitly request that they be output.
+# Properties are named in cell_info_fields and state variables are named in
+# cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+output.cell_info_fields = [density,mu,lambda,alpha_yield,beta,alpha_flow]
+output.cell_data_fields = [total_strain,stress,plastic_strain]
+
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
@@ -206,7 +208,7 @@
 # the time stamp.
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step09/step09.vtk
+writer.filename = output/step09.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -217,7 +219,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step09/step09-groundsurf.vtk
+writer.filename = output/step09-groundsurf.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -226,7 +228,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step09/step09-fault.vtk
+writer.filename = output/step09-fault.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -236,7 +238,7 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step09/step09-upper_crust.vtk
+writer.filename = output/step09-upper_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -246,6 +248,6 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 50.0*year
-writer.filename = step09/step09-lower_crust.vtk
+writer.filename = output/step09-lower_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -24,7 +24,7 @@
 # To run the simulation:
 # pylith step10.cfg
 #
-# Output will be directed to the directory step10.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -123,7 +123,7 @@
 # ----------------------------------------------------------------------
 # PETSc settings
 # ----------------------------------------------------------------------
-# NOTE: There are additional setting specific to fault friction.
+# NOTE: There are additional settings specific to fault friction.
 [pylithapp.petsc]
 
 # Friction sensitivity solve used to compute the increment in slip
@@ -143,26 +143,26 @@
 # ----------------------------------------------------------------------
 # Give basename for VTK domain output of solution over domain.
 [pylithapp.problem.formulation.output.domain.writer]
-filename = step10/step10.vtk
+filename = output/step10.vtk
 
 # Give basename for VTK domain output of solution over ground surface.
 [pylithapp.problem.formulation.output.subdomain]
 # Name of nodeset for ground surface.
 label = face_zpos
-writer.filename = step10/step10-groundsurf.vtk
+writer.filename = output/step10-groundsurf.vtk
 
 # Give basename for VTK fault output.
 [pylithapp.problem.interfaces.fault.output]
-writer.filename = step10/step10-fault.vtk
+writer.filename = output/step10-fault.vtk
 
 # Give basename for VTK output of upper_crust state variables.
 [pylithapp.timedependent.materials.upper_crust.output]
 # Average values over quadrature points.
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step10/step10-upper_crust.vtk
+writer.filename = output/step10-upper_crust.vtk
 
 # Give basename for VTK output of lower_crust state variables.
 [pylithapp.timedependent.materials.lower_crust.output]
 # Average values over quadrature points.
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step10/step10-lower_crust.vtk
+writer.filename = output/step10-lower_crust.vtk

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -22,7 +22,7 @@
 # To run the simulation:
 # pylith step11.cfg
 #
-# Output will be directed to the directory step11.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -125,7 +125,7 @@
 # ----------------------------------------------------------------------
 # PETSc settings
 # ----------------------------------------------------------------------
-# NOTE: There are additional setting specific to fault friction.
+# NOTE: There are additional settings specific to fault friction.
 [pylithapp.petsc]
 
 # Friction sensitivity solve used to compute the increment in slip
@@ -145,26 +145,26 @@
 # ----------------------------------------------------------------------
 # Give basename for VTK domain output of solution over domain.
 [pylithapp.problem.formulation.output.domain.writer]
-filename = step11/step11.vtk
+filename = output/step11.vtk
 
 # Give basename for VTK domain output of solution over ground surface.
 [pylithapp.problem.formulation.output.subdomain]
 # Name of nodeset for ground surface.
 label = face_zpos
-writer.filename = step11/step11-groundsurf.vtk
+writer.filename = output/step11-groundsurf.vtk
 
 # Give basename for VTK fault output.
 [pylithapp.problem.interfaces.fault.output]
-writer.filename = step11/step11-fault.vtk
+writer.filename = output/step11-fault.vtk
 
 # Give basename for VTK output of upper_crust state variables.
 [pylithapp.timedependent.materials.upper_crust.output]
 # Average values over quadrature points.
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step11/step11-upper_crust.vtk
+writer.filename = output/step11-upper_crust.vtk
 
 # Give basename for VTK output of lower_crust state variables.
 [pylithapp.timedependent.materials.lower_crust.output]
 # Average values over quadrature points.
 cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step11/step11-lower_crust.vtk
+writer.filename = output/step11-lower_crust.vtk

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -9,12 +9,12 @@
 # This problem demonstrates the use of static fault friction for a
 # quasi-static problem.
 # The problem is similar to example 11, except that velocity boundary
-# conditions are applied rather than displacement BC. Rather than applying
-# axial displacements, normal tractions (compressional) are applied on the
-# +x face, while the -x face is held fixed in the x-direction. This
-# maintains a normal stress on the fault.  The model is run for 200 years,
-# resulting in periodic fault slip as the friction threshold is reached on
-# the fault.
+# conditions are applied rather than displacement BC. Axial (x)
+# displacements are applied on the -x and +x faces to maintain a normal
+# stress on the fault, and velocities in the -y and +y directions are
+# applied on the same faces to yield a left-lateral sense of shear.
+# The model is run for 200 years. Since there is no slip weakening, the
+# fault slips at a steady rate once the fault friction has been overcome.
 
 # ----------------------------------------------------------------------
 # RUNNING THE SIMULATON
@@ -28,7 +28,7 @@
 # To run the simulation:
 # pylith step12.cfg
 #
-# Output will be directed to the directory step12.
+# Output will be directed to the directory output.
 
 # ----------------------------------------------------------------------
 # problem
@@ -131,7 +131,7 @@
 quadrature.cell.dimension = 2
 
 # Set static friction model parameters using a uniform DB. Set the
-# static coefficient of friction to 0.6 and cohesion to 0.0 Pa.
+# static coefficient of friction to 0.6 and cohesion to 2.0 MPa.
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Static friction
 friction.db_properties.values = [friction-coefficient,cohesion]
@@ -140,7 +140,7 @@
 # ----------------------------------------------------------------------
 # PETSc settings
 # ----------------------------------------------------------------------
-# NOTE: There are additional setting specific to fault friction.
+# NOTE: There are additional settings specific to fault friction.
 [pylithapp.petsc]
 
 # Friction sensitivity solve used to compute the increment in slip
@@ -166,7 +166,7 @@
 # the time stamp.
 output_freq = time_step
 time_step = 20.0*year
-writer.filename = step12/step12.vtk
+writer.filename = output/step12.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -177,7 +177,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step12/step12-groundsurf.vtk
+writer.filename = output/step12-groundsurf.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -186,7 +186,7 @@
 # We keep the default output frequency behavior (skip every n steps), and
 # ask to skip 0 steps between output, so that we get output every time step.
 skip = 0
-writer.filename = step12/step12-fault.vtk
+writer.filename = output/step12-fault.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -196,7 +196,7 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 20.0*year
-writer.filename = step12/step12-upper_crust.vtk
+writer.filename = output/step12-upper_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year
 
@@ -206,6 +206,6 @@
 cell_filter = pylith.meshio.CellFilterAvgMesh
 output_freq = time_step
 time_step = 20.0*year
-writer.filename = step12/step12-lower_crust.vtk
+writer.filename = output/step12-lower_crust.vtk
 writer.time_format = %04.0f
 writer.time_constant = 1.0*year

Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step13.cfg (from rev 16998, short/3D/PyLith/trunk/examples/3d/hex8/step13.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step13.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step13.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,211 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of slip-weakening fault friction for a
+# quasi-static problem.
+# The problem is similar to example 12, except that a different friction
+# model is used. The model is run for 200 years. Slip begins to occur
+# at about 80 years, and continues in each step after that.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step13.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step13.cfg
+#
+# Output will be directed to the directory output.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos', 'x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Fault friction is a nonlinear problem so we need to use the nonlinear
+# solver.
+solver = pylith.problems.SolverNonlinear
+
+# Change the total simulation time to 200 years, and use a constant time
+# step size of 5 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 200.0*year
+dt = 5.0*year
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# On the -x and +x faces, we fix the x degrees of freedom and apply
+# velocities in the y-direction. We fix the z degree of freedom on the
+# bottom (-z) face.
+#
+# We use a UniformDB to apply the displacements and velocities, while
+# retaining the default ZeroDispDB for zero x-displacements on the -x
+# face and and zero z-displacements on -z.
+#
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face -- Dirichlet
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0,1]
+label = face_xpos
+
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Dirichlet BC on +x
+db_initial.values = [displacement-x,displacement-y]
+db_initial.data = [-1.0*m,0.0*m]
+
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,1.0*cm/year,0.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on -x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+# Change fault to dynamic fault interface.
+fault = pylith.faults.FaultCohesiveDyn
+
+[pylithapp.timedependent.interfaces.fault]
+# The label corresponds to the name of the nodeset in CUBIT.
+label = fault
+
+# Use the slip-weakening friction model.
+friction = pylith.friction.SlipWeakening
+
+# We must define the quadrature information for fault cells.
+# The fault cells are 2D (surface).
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Set slip-weakening friction model parameters using a uniform DB. Set the
+# parameters as follows:
+# static coefficient of friction: 0.6
+# dynamic coefficient of friction: 0.5
+# slip-weakening parameter: 0.2 m
+# cohesion: 0 Pa
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Slip weakening
+friction.db_properties.values = [static-coefficient,dynamic-coefficient,slip-weakening-parameter,cohesion]
+friction.db_properties.data = [0.6,0.5,0.2*m,0.0*Pa]
+
+# ----------------------------------------------------------------------
+# PETSc settings
+# ----------------------------------------------------------------------
+# NOTE: There are additional settings specific to fault friction.
+[pylithapp.petsc]
+
+# Friction sensitivity solve used to compute the increment in slip
+# associated with changes in the Lagrange multiplier imposed by the
+# fault constitutive model.
+friction_pc_type = asm
+friction_sub_pc_factor_shift_type = nonzero
+friction_ksp_max_it = 25
+friction_ksp_gmres_restart = 30
+# Uncomment to view details of friction sensitivity solve.
+#friction_ksp_monitor = true
+#friction_ksp_view = true
+friction_ksp_converged_reason = true
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 20 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = output/step13.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = output/step13-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK fault output.
+[pylithapp.problem.interfaces.fault.output]
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = output/step13-fault.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = output/step13-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = output/step13-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year

Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step14.cfg (from rev 16998, short/3D/PyLith/trunk/examples/3d/hex8/step14.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step14.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step14.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,220 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of rate-and-state friction for a
+# quasi-static problem, using the aging law for evolution of the state
+# variable.
+# The problem is similar to example 13, except that a different friction
+# model is used. The model is run for 200 years. Slip begins to occur
+# at about 45 years, and continues in each step after that.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step14.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step14.cfg
+#
+# Output will be directed to the directory output.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos', 'x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Fault friction is a nonlinear problem so we need to use the nonlinear
+# solver.
+solver = pylith.problems.SolverNonlinear
+
+# Change the total simulation time to 200 years, and use a constant time
+# step size of 5 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 200.0*year
+dt = 5.0*year
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# On the -x and +x faces, we fix the x degrees of freedom and apply
+# velocities in the y-direction. We fix the z degree of freedom on the
+# bottom (-z) face.
+#
+# We use a UniformDB to apply the displacements and velocities, while
+# retaining the default ZeroDispDB for zero x-displacements on the -x
+# face and and zero z-displacements on -z.
+#
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face -- Dirichlet
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0,1]
+label = face_xpos
+
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Dirichlet BC on +x
+db_initial.values = [displacement-x,displacement-y]
+db_initial.data = [-1.0*m,0.0*m]
+
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,1.0*cm/year,0.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on -x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+# Change fault to dynamic fault interface.
+fault = pylith.faults.FaultCohesiveDyn
+
+[pylithapp.timedependent.interfaces.fault]
+# The label corresponds to the name of the nodeset in CUBIT.
+label = fault
+
+# Use the rate-and-state aging friction model.
+friction = pylith.friction.RateStateAgeing
+
+# We must define the quadrature information for fault cells.
+# The fault cells are 2D (surface).
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Set rate-and-state parameters using a uniform DB. Set the parameters as
+# follows:
+# reference coefficient of friction: 0.6
+# reference slip rate: 1.0e-06 m/s
+# slip-weakening parameter: 0.037 m
+# a: 0.0125
+# b: 0.0172
+# cohesion: 0 Pa
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Rate Stete Ageing
+friction.db_properties.values = [reference-friction-coefficient,reference-slip-rate,characteristic-slip-distance,constitutive-parameter-a,constitutive-parameter-b,cohesion]
+friction.db_properties.data = [0.6,1.0e-6*m/s,0.0370*m,0.0125,0.0172,0.0*Pa]
+
+# Set spatial database for the initial value of the state variable.
+friction.db_initial_state = spatialdata.spatialdb.UniformDB
+friction.db_initial_state.label = Rate State Ageing State
+friction.db_initial_state.values = [state-variable]
+friction.db_initial_state.data = [92.7*s]
+
+# ----------------------------------------------------------------------
+# PETSc settings
+# ----------------------------------------------------------------------
+# NOTE: There are additional settings specific to fault friction.
+[pylithapp.petsc]
+
+# Friction sensitivity solve used to compute the increment in slip
+# associated with changes in the Lagrange multiplier imposed by the
+# fault constitutive model.
+friction_pc_type = asm
+friction_sub_pc_factor_shift_type = nonzero
+friction_ksp_max_it = 25
+friction_ksp_gmres_restart = 30
+# Uncomment to view details of friction sensitivity solve.
+#friction_ksp_monitor = true
+#friction_ksp_view = true
+friction_ksp_converged_reason = true
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 20 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = output/step14.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = output/step14-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK fault output.
+[pylithapp.problem.interfaces.fault.output]
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = output/step14-fault.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = output/step14-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = output/step14-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year

Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step15.cfg (from rev 16998, short/3D/PyLith/trunk/examples/3d/hex8/step15.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step15.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step15.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,162 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of gravitational body forces for an
+# elastic problem. The boundary conditions are extremely simple, and are
+# applied to the -x, +x, -y, +y, and -z faces. For each of these faces,
+# displacements are pinned in the direction normal to the face.
+# The gravity field is specified using spatialdata.spatialdb.GravityField,
+# which can be used for either Cartesian or projected coordinate systems.
+# For Cartesian coordinate systems, users can also specify gravity_dir
+# (the default is [0.0,0.0,-1.0]).
+# The resulting stress field should be rho*g*h for Stress_zz, and should
+# be rho*g*h*pr/(1-pr), for Stress_xx and Stress_yy, where pr is Poisson's
+# ratio.
+# We make the lower_crust material generalized Maxwell viscoelastic, and
+# allow the stresses to relax for 200 years, so they begin approaching and
+# isotropic stress state in the lower crust.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step15.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step15.cfg
+#
+# Output will be directed to the directory output.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 5 boundary conditions: 'x_pos','x_neg', 'y_pos',
+# 'y_neg', and 'z_neg'.
+bc = [x_pos,x_neg,y_pos,y_neg,z_neg]
+
+# Set gravity field (default is None)
+gravity_field = spatialdata.spatialdb.GravityField
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (subset of domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change time stepping algorithm from uniform time step, to adaptive
+# time stepping.
+time_step = pylith.problems.TimeStepAdapt
+
+# Change the total simulation time to 200 years, and set the maximum time
+# step size to 10 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 200.0*year
+max_dt = 10.0*year
+stability_factor = 1.0 ; use time step equal to stable value from materials
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to generalized Maxwell viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.GenMaxwellIsotropic3D
+
+# Provide a spatial database from which to obtain property values.
+# Since there are additional properties and state variables for the
+# generalized Maxwell model, we explicitly request that they be output.
+# Properties are named in cell_info_fields and state variables are named in
+# cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties.iohandler.filename = spatialdb/mat_genmaxwell.spatialdb
+output.cell_info_fields = [density,mu,lambda,shear_ratio,maxwell_time]
+output.cell_data_fields = [total_strain,stress,viscous_strain_1,viscous_strain_2,viscous_strain_3]
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# We use the default ZeroDispDB for all boundaries, since we just want
+# zero displacements in the direction normal to each face.
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+
+[pylithapp.timedependent.bc.y_pos]
+bc_dof = [1]
+label = face_ypos
+db_initial.label = Dirichlet BC on +y
+
+[pylithapp.timedependent.bc.y_neg]
+bc_dof = [1]
+label = face_yneg
+db_initial.label = Dirichlet BC on -y
+
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 40 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step15.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = output/step15-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step15-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step15-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year

Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step16.cfg (from rev 16998, short/3D/PyLith/trunk/examples/3d/hex8/step16.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step16.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step16.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,178 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of gravitational body forces for an
+# elastic problem. This problem is identical to example 15 except that
+# initial stresses corresponding to lithostatic stress (rho*g*h) are
+# applied for Stress_xx, Stress_yy, and Stress_zz. This accomplishes two
+# things:
+# 1. First, this means that the stress state is isotropic, which is an
+# appropriate stress state for many tectonic problems in the absence of
+# tectonic stresses (e.g., stresses are due purely to gravity).
+# 2. Using initial stresses to balance the gravitational stresses prevents
+# the large initial deformation that would otherwise occur when gravity is
+# suddenly 'turned on'.
+# As a consequence of balancing the stress field, there should be no
+# stress relaxation within the viscoelastic portion of the mesh, and there
+# should be essentially zero displacements throughout the simulation.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step16.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step16.cfg
+#
+# Output will be directed to the directory output.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 5 boundary conditions: 'x_pos','x_neg', 'y_pos',
+# 'y_neg', and 'z_neg'.
+bc = [x_pos,x_neg,y_pos,y_neg,z_neg]
+
+# Set gravity field (default is None)
+gravity_field = spatialdata.spatialdb.GravityField
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (subset of domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change time stepping algorithm from uniform time step, to adaptive
+# time stepping.
+time_step = pylith.problems.TimeStepAdapt
+
+# Change the total simulation time to 200 years, and set the maximum time
+# step size to 10 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 200.0*year
+max_dt = 10.0*year
+stability_factor = 1.0 ; use time step equal to stable value from materials
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to generalized Maxwell viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.GenMaxwellIsotropic3D
+
+# Provide a spatial database from which to obtain property values.
+# Since there are additional properties and state variables for the
+# generalized Maxwell model, we explicitly request that they be output.
+# Properties are named in cell_info_fields and state variables are named in
+# cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties.iohandler.filename = spatialdb/mat_genmaxwell.spatialdb
+output.cell_info_fields = [density,mu,lambda,shear_ratio,maxwell_time]
+output.cell_data_fields = [total_strain,stress,viscous_strain_1,viscous_strain_2,viscous_strain_3]
+
+# ----------------------------------------------------------------------
+# initial stresses
+# ----------------------------------------------------------------------
+# We must specify initial stresses for each material.
+# We provide a filename for the spatial database that gives the stresses,
+# and we change the query_type from the default 'nearest' to 'linear'.
+[pylithapp.timedependent.materials.upper_crust]
+db_initial_stress = spatialdata.spatialdb.SimpleDB
+db_initial_stress.iohandler.filename = spatialdb/initial_stress.spatialdb
+db_initial_stress.query_type = linear
+
+[pylithapp.timedependent.materials.lower_crust]
+db_initial_stress = spatialdata.spatialdb.SimpleDB
+db_initial_stress.iohandler.filename = spatialdb/initial_stress.spatialdb
+db_initial_stress.query_type = linear
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# We use the default ZeroDispDB for all boundaries, since we just want
+# zero displacements in the direction normal to each face.
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+
+[pylithapp.timedependent.bc.y_pos]
+bc_dof = [1]
+label = face_ypos
+db_initial.label = Dirichlet BC on +y
+
+[pylithapp.timedependent.bc.y_neg]
+bc_dof = [1]
+label = face_yneg
+db_initial.label = Dirichlet BC on -y
+
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 40 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step16.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = output/step16-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step16-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step16-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year

Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step17.cfg (from rev 16998, short/3D/PyLith/trunk/examples/3d/hex8/step17.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step17.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step17.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,160 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of gravitational body forces where we
+# allow for finite strain. The problem is identical to example 15 except
+# that we use the ImplicitLgDeform formulation rather than the default
+# infinitesimal (linear) strain approximation. Thus, the computed stresses
+# will reflect the changed geometry of the problem, resulting in slightly
+# different predicted stress values. Sine the ImplicitLgDeform
+# formulation is nonlinear, PyLith automatically switches to the nonlinear
+# solver.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step17.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step17.cfg
+#
+# Output will be directed to the directory output.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set the formulation for finite strain. The default solver will
+# automatically be switched to the nonlinear solver.
+formulation = pylith.problems.ImplicitLgDeform
+
+# Set bc to an array of 5 boundary conditions: 'x_pos','x_neg', 'y_pos',
+# 'y_neg', and 'z_neg'.
+bc = [x_pos,x_neg,y_pos,y_neg,z_neg]
+
+# Set gravity field (default is None)
+gravity_field = spatialdata.spatialdb.GravityField
+
+[pylithapp.timedependent.formulation]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (subset of domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change time stepping algorithm from uniform time step, to adaptive
+# time stepping.
+time_step = pylith.problems.TimeStepAdapt
+
+# Change the total simulation time to 200 years, and set the maximum time
+# step size to 10 years.
+[pylithapp.timedependent.formulation.time_step]
+total_time = 200.0*year
+max_dt = 10.0*year
+stability_factor = 1.0 ; use time step equal to stable value from materials
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to generalized Maxwell viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.GenMaxwellIsotropic3D
+
+# Provide a spatial database from which to obtain property values.
+# Since there are additional properties and state variables for the
+# generalized Maxwell model, we explicitly request that they be output.
+# Properties are named in cell_info_fields and state variables are named in
+# cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties.iohandler.filename = spatialdb/mat_genmaxwell.spatialdb
+output.cell_info_fields = [density,mu,lambda,shear_ratio,maxwell_time]
+output.cell_data_fields = [total_strain,stress,viscous_strain_1,viscous_strain_2,viscous_strain_3]
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# We use the default ZeroDispDB for all boundaries, since we just want
+# zero displacements in the direction normal to each face.
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+
+[pylithapp.timedependent.bc.y_pos]
+bc_dof = [1]
+label = face_ypos
+db_initial.label = Dirichlet BC on +y
+
+[pylithapp.timedependent.bc.y_neg]
+bc_dof = [1]
+label = face_yneg
+db_initial.label = Dirichlet BC on -y
+
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 40 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step17.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = output/step17-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step17-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = output/step17-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -14,6 +14,7 @@
 	3d \
 	bar_shearwave \
 	greensfns \
+	meshing \
 	twocells
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -57,10 +57,10 @@
 # ----------------------------------------------------------------------
 # Set filenames for output.
 [pylithapp.problem.formulation.output.output]
-writer.filename = output/shearwave-ratestateageing.vtk
+writer.filename = output/ratestateageing.vtk
 
 [pylithapp.timedependent.interfaces.fault.output]
-writer.filename = output/shearwave-ratestateageing-fault.vtk
+writer.filename = output/ratestateageing-fault.vtk
 
 [pylithapp.timedependent.materials.elastic.output]
-writer.filename = output/shearwave-ratestateageing-statevars.vtk
+writer.filename = output/ratestateageing-statevars.vtk

Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/meshing (from rev 16998, short/3D/PyLith/trunk/examples/meshing)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -5,7 +5,7 @@
 
 examples_dir=`pwd`
 
-# Run specified list of examples
+# Run specified list of examples (single .cfg file)
 run_examples() {
   cd ${examples_dir}/$dir
   rm *.vtk
@@ -16,6 +16,16 @@
   done
 }
 
+# Run specified list of examples (additional common .cfg files)
+run_examples2() {
+  commoncfg=$1
+  cd ${examples_dir}/$dir
+  for example in $examples; do
+    echo "RUNNING $dir/$example"
+    pylith $commoncfg $example
+  done
+}
+
 # ----------------------------------------------------------------------
 # twotri3
 dir="twocells/twotri3"
@@ -50,7 +60,7 @@
 
 # 3d/hex8
 dir="3d/hex8"
-examples="shearxy.cfg dislocation.cfg gravity.cfg gravity_istress.cfg savageprescott.cfg"
+examples="step01.cfg step02.cfg step03.cfg step04.cfg step05.cfg step06.cfg step07.cfg step08.cfg step09.cfg step10.cfg step11.cfg step12.cfg step13.cfg step14.cfg step15.cfg step16.cfg step17.cfg"
 run_examples
 
 # ----------------------------------------------------------------------
@@ -61,8 +71,10 @@
 
 # bar_shearwave/quad4
 dir="bar_shearwave/quad4"
-examples="pylithapp.cfg"
+examples="kinematic.cfg"
 run_examples
+examples="dynamic_staticfriction.cfg dynamic_slipweakening.cfg dynamic_ratestateageing.cfg"
+run_examples2 "dynamic.cfg"
 
 # bar_shearwave/tet4
 dir="bar_shearwave/tet4"

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/axialtract.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/axialtract.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/axialtract.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -115,8 +115,8 @@
 bc_dof = [1]
 
 # The group of vertices in the mesh file associated with this boundary
-# condition have the name 'y_neg'.
-label = y_neg
+# condition have the name 'y_neg_nofault'.
+label = y_neg_nofault
 
 # ----------------------------------------------------------------------
 # faults

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/twoquad4.mesh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/twoquad4.mesh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twoquad4/twoquad4.mesh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -97,6 +97,19 @@
   }
 
   // This group of vertices may be used to specify boundary conditions.
+  // This group does not contain any vertices on the fault.
+  // There are 3 vertices corresponding to indices 0, 4.
+  group = {
+    name = y_neg_nofault
+    type = vertices
+    count = 2
+    indices = {
+      0
+      4
+    }
+  }
+
+  // This group of vertices may be used to specify boundary conditions.
   // There are 2 vertices corresponding to indices 0 and 1.
   group = {
     name = x_neg

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4/twotet4.mesh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4/twotet4.mesh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4/twotet4.mesh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -99,7 +99,7 @@
   // This group of vertices may be used to specify boundary conditions.
   // There are 2 vertices corresponding to indices 2, 4.
   group = {
-    name = edge 1
+    name = edge 2
     type = vertices
     count = 2
     indices = {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4-geoproj/twotet4.mesh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4-geoproj/twotet4.mesh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/twocells/twotet4-geoproj/twotet4.mesh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -99,7 +99,7 @@
   // This group of vertices may be used to specify boundary conditions.
   // There are 2 vertices corresponding to indices 2, 4.
   group = {
-    name = edge 1
+    name = edge 2
     type = vertices
     count = 2
     indices = {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/BruneSlipFn.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/BruneSlipFn.icc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/BruneSlipFn.icc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -47,10 +47,7 @@
   double slip = 0.0;
   if (t > 0.0) {
     assert(riseTime > 0.0);
-    const double peakRate = finalSlip / riseTime * 1.745;
-    const double tau = 
-      // prevent 0 == tau when 0 == finalSlip 
-      (finalSlip > 0.0) ? finalSlip / (exp(1.0) * peakRate) : 0.1;
+    const double tau = 0.21081916*riseTime;
     slip = finalSlip * (1.0 - exp(-t/tau) * (1.0 + t/tau));
   } // if
   return slip;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/Fault.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/Fault.hh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/Fault.hh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -105,15 +105,11 @@
    * @param cs Coordinate system for 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).
+   *   be up-dip direction; only applies to fault surfaces 2-D and 3-D).
    */
   virtual
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3],
-		  const double normalDir[3]) = 0;
+		  const double upDir[3]) = 0;
 
   /** Get mesh associated with fault fields.
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -105,15 +105,13 @@
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveDyn::initialize(const topology::Mesh& mesh,
-					      const double upDir[3],
-					      const double normalDir[3])
+					      const double upDir[3])
 { // initialize
   assert(0 != upDir);
-  assert(0 != normalDir);
   assert(0 != _quadrature);
   assert(0 != _normalizer);
 
-  FaultCohesiveLagrange::initialize(mesh, upDir, normalDir);
+  FaultCohesiveLagrange::initialize(mesh, upDir);
 
   // Get initial tractions using a spatial database.
   _setupInitialTractions();

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -67,14 +67,10 @@
    * @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).
+   *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3],
-		  const double normalDir[3]);
+		  const double upDir[3]);
 
   /** Integrate contributions to residual term (r) for operator that
    * do not require assembly across processors.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -91,15 +91,13 @@
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveKin::initialize(const topology::Mesh& mesh,
-					     const double upDir[3],
-					     const double normalDir[3])
+					     const double upDir[3])
 { // initialize
   assert(0 != upDir);
-  assert(0 != normalDir);
   assert(0 != _quadrature);
   assert(0 != _normalizer);
 
-  FaultCohesiveLagrange::initialize(mesh, upDir, normalDir);
+  FaultCohesiveLagrange::initialize(mesh, upDir);
 
   const srcs_type::const_iterator srcsEnd = _eqSrcs.end();
   for (srcs_type::iterator s_iter = _eqSrcs.begin(); s_iter != srcsEnd; ++s_iter) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -64,14 +64,10 @@
    * @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).
+   *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3],
-		  const double normalDir[3]);
+		  const double upDir[3]);
 
   /** Integrate contributions to residual term (r) for operator that
    * do not require assembly across cells, vertices, or processors.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -75,11 +75,9 @@
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveLagrange::initialize(const topology::Mesh& mesh,
-					     const double upDir[3],
-					     const double normalDir[3])
+					     const double upDir[3])
 { // initialize
   assert(0 != upDir);
-  assert(0 != normalDir);
   assert(0 != _quadrature);
   assert(0 != _normalizer);
 
@@ -125,7 +123,7 @@
 #endif
 
   // Compute orientation at vertices in fault mesh.
-  _calcOrientation(upDir, normalDir);
+  _calcOrientation(upDir);
 
   // Compute tributary area for each vertex in fault mesh.
   _calcArea();
@@ -148,6 +146,10 @@
   const int spaceDim = field->mesh().dimension();
   const int fibrationLagrange = spaceDim;
 
+  // Add space for Lagrange multipliers if it does not yet exist.
+  if (spaceDim == section->getNumSpaces())
+    section->addSpace();
+
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
     const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
@@ -231,7 +233,8 @@
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<SieveMesh::order_type>& globalOrder =
-    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", residualSection);
+    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", 
+					    residualSection);
   assert(!globalOrder.isNull());
 
   _logger->eventEnd(setupEvent);
@@ -418,6 +421,8 @@
     indicesL = indicesRel + globalOrder->getIndex(v_lagrange);
     indicesN = indicesRel + globalOrder->getIndex(v_negative);
     indicesP = indicesRel + globalOrder->getIndex(v_positive);
+    assert(0 == solutionSection->getConstraintDimension(v_negative));
+    assert(0 == solutionSection->getConstraintDimension(v_positive));
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
@@ -465,6 +470,7 @@
                  ADD_VALUES);
 
     // Values at Lagrange vertex, entry L,L in Jacobian
+    // We must have entries on the diagonal.
     jacobianVertex = 0.0;
     MatSetValues(jacobianMatrix,
                  indicesL.size(), &indicesL[0],
@@ -485,6 +491,12 @@
 #endif
 
   _needNewJacobian = false;
+
+#if 0 // DEBUGGING
+  sieveMesh->getSendOverlap()->view("Send domain overlap");
+  sieveMesh->getRecvOverlap()->view("Receive domain overlap");
+#endif
+
 } // integrateJacobian
 
 // ----------------------------------------------------------------------
@@ -603,13 +615,10 @@
    * off-diagonal terms of C A^(-1) C^T:
    *
    * Term for DOF x of vertex L is: 
-   * -1.0 / (R00^2 (Ai_nx + Ai_px) + R01^2 (Ai_ny + Ai_py))
+   * -(R00^2 (Ai_nx + Ai_px) + R01^2 (Ai_ny + Ai_py))
    *
    * Term for DOF y of vertex L is: 
-   * -1.0 / (R10^2 (Ai_nx + Ai_px) + R11^2 (Ai_ny + Ai_py))
-   *
-   * Translate DOF for global vertex L into DOF in split field for
-   * preconditioner.
+   * -(R10^2 (Ai_nx + Ai_px) + R11^2 (Ai_ny + Ai_py))
    */
 
 #if 1 // DIAGONAL PRECONDITIONER
@@ -672,6 +681,10 @@
     const int v_negative = _cohesiveVertices[iVertex].negative;
     const int v_positive = _cohesiveVertices[iVertex].positive;
 
+    // Compute contribution only if Lagrange constraint is local.
+    if (!globalOrder->isLocal(v_lagrange))
+      continue;
+
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventBegin(restrictEvent);
 #endif
@@ -681,15 +694,23 @@
 				      orientationVertex.size());
 
     // Set global order indices
-    indicesN = indicesRel + globalOrder->getIndex(v_negative);
-    indicesP = indicesRel + globalOrder->getIndex(v_positive);
+    if (globalOrder->isLocal(v_negative))
+      indicesN = indicesRel + globalOrder->getIndex(v_negative);
+    else
+      indicesN = -1;
+    if (globalOrder->isLocal(v_positive))
+      indicesP = indicesRel + globalOrder->getIndex(v_positive);
+    else
+      indicesP = -1;
 
     PetscErrorCode err = 0;
 
+    jacobianVertexN = 1.0;
     err = MatGetValues(jacobianMatrix,
 		       indicesN.size(), &indicesN[0],
 		       indicesN.size(), &indicesN[0],
 		       &jacobianVertexN[0]); CHECK_PETSC_ERROR(err);
+    jacobianVertexP = 1.0;
     err = MatGetValues(jacobianMatrix,
 		       indicesP.size(), &indicesP[0],
 		       indicesP.size(), &indicesP[0],
@@ -713,14 +734,11 @@
     //  \sum_{j} C_{ij} Adiag^{-1}_{jj} C^T_{ji}
     precondVertexL = 0.0;
     for (int kDim=0; kDim < spaceDim; ++kDim) {
-      double value = 0.0;
       for (int iDim=0; iDim < spaceDim; ++iDim)
-	value -= 
+	precondVertexL[kDim] -= 
           orientationVertex[kDim*spaceDim+iDim] * 
           orientationVertex[kDim*spaceDim+iDim] * 
           (jacobianInvVertexN[iDim] + jacobianInvVertexP[iDim]);
-      if (fabs(value) > 1.0e-8)
-	precondVertexL[kDim] = 1.0 / value;
     } // for
     
 
@@ -729,10 +747,6 @@
     _logger->eventBegin(updateEvent);
 #endif
 
-    for (int iDim=0; iDim < spaceDim; ++iDim) {
-      std::cout << "Vertex " << v_lagrange << " J^{-1}_{nn}["<<iDim<<"] " << jacobianInvVertexN[iDim] << " J^{-1}_{pp}["<<iDim<<"] " << jacobianInvVertexP[iDim] << " M["<<iDim<<"] " << precondVertexL[iDim] << std::endl;
-    }
-
     // Set global preconditioner index associated with Lagrange constraint vertex.
     const int indexLprecond = lagrangeGlobalOrder->getIndex(v_lagrange);
     
@@ -758,7 +772,7 @@
 
 #else // FULL PRECONDITIONER
 
-  // Compute -( [C] [A]^(-1) [C]^T )^-1 for cell.
+  // Compute -( [C] [A]^(-1) [C]^T ) for cell.
   //
   // numBasis = number of corners in fault cell
   // spaceDim = spatial dimension
@@ -800,7 +814,6 @@
 
   // Allocate vectors for vertex values
   double_array preconditionerCell(matrixSizeF);
-  double_array preconditionerInvCell(matrixSizeF);
   int_array indicesN(nrowsF);
   int_array indicesP(nrowsF);
   int_array indicesLagrange(nrowsF);
@@ -901,7 +914,6 @@
 
     jacobianCellP = 0.0;
     jacobianCellN = 0.0;
-    preconditionerInvCell = 0.0;
     preconditionerCell = 0.0;
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -1068,7 +1080,7 @@
 	      for (int kDim=0; kDim < spaceDim; ++kDim) {
 		const int kB = kBasis*spaceDim + kDim;
 
-		preconditionerInvCell[iL*nrowsF+lL] -= 
+		preconditionerCell[iL*nrowsF+lL] -= 
 		  orientationCell[iLagrange*orientationSize+iDim*spaceDim+jDim] *
 		  jacobianInvCellN[jB*nrowsF+kB] *
 		  orientationCell[lLagrange*orientationSize+kDim*spaceDim+lDim];
@@ -1080,77 +1092,16 @@
       } // for
     } // for
 
-#if 1
+#if 0
     std::cout << "1/P_cell " << *c_iter << std::endl;
     for(int i = 0; i < nrowsF; ++i) {
       for(int j = 0; j < nrowsF; ++j) {
-        std::cout << "  " << preconditionerInvCell[i*nrowsF+j];
+        std::cout << "  " << preconditionerCell[i*nrowsF+j];
       }
       std::cout << std::endl;
     }
 #endif
 
-    // Invert (C Ai C^T)
-
-    // Transpose matrices so we can call LAPACK
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < i; ++j) {
-        PetscInt    k  = i*nrowsF+j;
-        PetscInt    kp = j*nrowsF+i;
-        PetscScalar tmp;
-        tmp               = preconditionerInvCell[k];
-        preconditionerInvCell[k]  = preconditionerInvCell[kp];
-        preconditionerInvCell[kp] = tmp;
-      }
-    }
-    LAPACKgesvd_("A", "A", &elemRows, &elemRows, &preconditionerInvCell[0], &elemRows, &singularValuesN[0], &UN[0], &elemRows, &VNt[0], &elemRows, &work[0], &workSize, &berr);
-    CHECK_PETSC_ERROR_MSG(berr, "Inversion of preconditioner element matrix failed.");
-
-#if 1
-    for(int i = 0; i < nrowsF; ++i) {
-      std::cout << "sigmaN["<<i<<"]: " << singularValuesN[i] << " sigmaP["<<i<<"]: " << singularValuesP[i] << std::endl;
-    }
-    std::cout << "UN_cell " << *c_iter << std::endl;
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < nrowsF; ++j) {
-        std::cout << "  " << UN[j*nrowsF+i];
-      }
-      std::cout << std::endl;
-    }
-    std::cout << "VNt_cell " << *c_iter << std::endl;
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < nrowsF; ++j) {
-        std::cout << "  " << VNt[j*nrowsF+i];
-      }
-      std::cout << std::endl;
-    }
-#endif
-
-    // Row scale Vt by the inverse of the singular values
-    for(int i = 0; i < nrowsF; ++i) {
-      const PetscReal invN = singularValuesN[i] > 1.0e-10 ? 1.0/singularValuesN[i] : 0.0;
-      const PetscReal invP = singularValuesP[i] > 1.0e-10 ? 1.0/singularValuesP[i] : 0.0;
-
-      for(int j = 0; j < nrowsF; ++j) {
-        VNt[j*nrowsF+i] *= invN;
-        VPt[j*nrowsF+i] *= invP;
-      }
-    }
-    BLASgemm_("N", "N", &elemRows, &elemRows, &elemRows, &one, &UN[0], &elemRows, &VNt[0], &elemRows, &one, &preconditionerCell[0], &elemRows);
-
-    // Transpose matrices from LAPACK
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < i; ++j) {
-        PetscInt    k  = i*nrowsF+j;
-        PetscInt    kp = j*nrowsF+i;
-        PetscScalar tmp;
-        tmp                  = preconditionerCell[k];
-        preconditionerCell[k]  = preconditionerCell[kp];
-        preconditionerCell[kp] = tmp;
-      }
-    }
-
-
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(computeEvent);
     _logger->eventBegin(updateEvent);
@@ -1588,11 +1539,9 @@
 // ----------------------------------------------------------------------
 // Calculate orientation at fault vertices.
 void
-pylith::faults::FaultCohesiveLagrange::_calcOrientation(const double upDir[3],
-						   const double normalDir[3])
+pylith::faults::FaultCohesiveLagrange::_calcOrientation(const double upDir[3])
 { // _calcOrientation
   assert(0 != upDir);
-  assert(0 != normalDir);
   assert(0 != _faultMesh);
   assert(0 != _fields);
 
@@ -1722,15 +1671,68 @@
   } // for
   PetscLogFlops(count * orientationSize * 4);
 
-  if (2 == cohesiveDim && vertices->size() > 0) {
+  if (1 == cohesiveDim && vertices->size() > 0) {
+    // Default sense of positive slip is left-lateral and
+    // fault-opening.
+    // 
+    // If fault is dipping, then we use the up-dir to make sure the
+    // sense of positive slip is reverse and fault-opening.
+    //
+    // Check orientation of first vertex, (1) if dot product of the
+    // normal-dir with preferred up-dir is positive, then we want dot
+    // product of shear-dir and preferred up-dir to be positive and
+    // (2) if the dot product of the normal-dir with preferred up-dir
+    // is negative, then we want the dot product of the shear-dir and
+    // preferred up-dir to be negative.
+    //
+    // When we flip the shear direction, we create a left-handed
+    // coordinate system, but it gives the correct sense of slip. In
+    // reality the shear/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(2 == spaceDim);
+    const double* shearDirVertex = &orientationVertex[0];
+    const double* normalDirVertex = &orientationVertex[2];
+    const double shearDirDot = 
+      upDir[0] * shearDirVertex[0] + upDir[1] * shearDirVertex[1];
+    const double normalDirDot = 
+      upDir[0] * normalDirVertex[0] + upDir[1] * normalDirVertex[1];
+
+    const int ishear = 0;
+    const int inormal = 2;
+    if (normalDirDot * shearDirDot < 0.0) {
+      // Flip shear direction
+      for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin; 
+	   v_iter != verticesEnd;
+	   ++v_iter) {
+        orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
+					  orientationVertex.size());
+        assert(4 == orientationSection->getFiberDimension(*v_iter));
+        for (int iDim = 0; iDim < 2; ++iDim) // flip shear
+          orientationVertex[ishear + iDim] *= -1.0;
+	
+        // Update orientation
+        orientationSection->updatePoint(*v_iter, &orientationVertex[0]);
+      } // for
+      PetscLogFlops(3 + count * 2);
+    } // if
+
+  } else 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.
+    // Check orientation of first vertex, (1) if dot product of the
+    // normal-dir with preferred up-dir is positive, then we want dot
+    // product of shear-dir and preferred up-dir to be positive and
+    // (2) if the dot product of the normal-dir with preferred up-dir
+    // is negative, then we want the dot product of the shear-dir and
+    // preferred up-dir to be negative.
     //
     // When we flip the up/down dip direction, we create a left-handed
     // strike/dip/normal coordinate system, but it gives the correct
@@ -1744,23 +1746,35 @@
       &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 double* dipDirVertex = &orientationVertex[3];
+    const double* normalDirVertex = &orientationVertex[6];
+    const double dipDirDot = 
+      upDir[0]*dipDirVertex[0] + 
+      upDir[1]*dipDirVertex[1] + 
+      upDir[2]*dipDirVertex[2];
+    const double normalDirDot = 
+      upDir[0]*normalDirVertex[0] +
+      upDir[1]*normalDirVertex[1] +
+      upDir[2]*normalDirVertex[2];
 
     const int istrike = 0;
     const int idip = 3;
     const int inormal = 6;
-    if (normalDot < 0.0) {
+    if (dipDirDot * normalDirDot < 0.0 ||
+	fabs(normalDirVertex[2] + 1.0) < 0.001) {
+      // if fault normal is (0,0,+-1) then up-dir dictates reverse
+      // motion for case with normal (0,0,1), so we reverse the dip-dir
+      // if we have (0,0,-1).
+
       // Flip dip direction
       for (SieveSubMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
-          != verticesEnd; ++v_iter) {
+	     != verticesEnd; ++v_iter) {
         orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
-          orientationVertex.size());
+					  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
@@ -1859,8 +1873,8 @@
 
 #if 0 // DEBUGGING
   area.view("AREA");
-  //_faultMesh->getSendOverlap()->view("Send fault overlap");
-  //_faultMesh->getRecvOverlap()->view("Receive fault overlap");
+  faultSieveMesh->getSendOverlap()->view("Send fault overlap");
+  faultSieveMesh->getRecvOverlap()->view("Receive fault overlap");
 #endif
 } // _calcArea
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -100,15 +100,11 @@
    * @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).
+   *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
   virtual
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3],
-		  const double normalDir[3]);
+		  const double upDir[3]);
 
   /** Split solution field for separate preconditioning.
    *
@@ -326,13 +322,9 @@
    *
    * @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).
+   *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
-  void _calcOrientation(const double upDir[3],
-			const double normalDir[3]);
+  void _calcOrientation(const double upDir[3]);
 
   /// Calculate fault area field.
   void _calcArea(void);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -62,11 +62,9 @@
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveTract::initialize(const topology::Mesh& mesh,
-					     const double upDir[3],
-					     const double normalDir[3])
+					     const double upDir[3])
 { // initialize
   assert(0 != upDir);
-  assert(0 != normalDir);
   assert(0 != _quadrature);
 
   delete _faultMesh; _faultMesh = new topology::SubMesh();
@@ -82,7 +80,7 @@
   _quadrature->initializeGeometry();
 
   // Compute orientation at quadrature points in fault mesh.
-  _calcOrientation(upDir, normalDir);
+  _calcOrientation(upDir);
 
   // Get initial tractions using a spatial database.
   _getInitialTractions();
@@ -189,8 +187,7 @@
 // ----------------------------------------------------------------------
 // Calculate orientation at fault vertices.
 void
-pylith::faults::FaultCohesiveTract::_calcOrientation(const double upDir[3],
-						   const double normalDir[3])
+pylith::faults::FaultCohesiveTract::_calcOrientation(const double upDir[3])
 { // _calcOrientation
   assert(0 != _fields);
   assert(0 != _quadrature);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.hh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveTract.hh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -56,14 +56,10 @@
    * @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).
+   *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3],
-		  const double normalDir[3]);
+		  const double upDir[3]);
 
   /** Integrate contribution of cohesive cells to residual term.
    *
@@ -121,13 +117,9 @@
    *
    * @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).
+   *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
-  void _calcOrientation(const double upDir[3],
-			const double normalDir[3]);
+  void _calcOrientation(const double upDir[3]);
 
   /** Get initial tractions using a spatial database.
    */

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -66,6 +66,14 @@
 
 noinst_HEADERS =
 
+dist_noinst_DATA = \
+	jacobian2d_lgdeform.wxm \
+	jacobian2d_nonsymm_lgdeform.wxm \
+	jacobian3d_lgdeform.wxm \
+	jacobian3d_nonsymm_lgdeform.wxm \
+	tri3_elasticity.wxm \
+	tet4_elasticity.wxm
+
 # export
 clean-local: clean-subpkgincludeHEADERS
 BUILT_SOURCES = export-subpkgincludeHEADERS

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -340,7 +340,7 @@
   double thetaTpdtVertex = 0.0;
   if (vDtL < 0.00001)
     // As (slipRate * dt / L) --> 0, exp(-slipRate * dt / L) --> 1
-    // So using first three term in the Taylor series expansion of 
+    // So using first three terms in the Taylor series expansion of 
     // exp(- slipRate * theta / L) i.e., exp(-x) = 1 - x + (x^2)/2;
     thetaTpdtVertex = thetaTVertex * expTerm + 
                         dt - 0.5 * slipRate * pow(dt,2) / L;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -312,7 +312,7 @@
 	throw std::runtime_error(msg.str());
       } // if
       groupNames[i] = buffer;
-      std::cout << "GROUP: '" << groupNames[i] << "'." << std::endl;
+      //std::cout << "GROUP: '" << groupNames[i] << "'." << std::endl;
     } // for
     delete[] buffer; buffer = 0;
     delete[] counts; counts = 0;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Explicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Explicit.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Explicit.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -105,10 +105,10 @@
     } // for
     
     assert(velSection->getFiberDimension(*v_iter) == spaceDim);
-    velSection->updatePoint(*v_iter, &velVertex[0]);
+    velSection->updatePointAll(*v_iter, &velVertex[0]);
 
     assert(accSection->getFiberDimension(*v_iter) == spaceDim);
-    accSection->updatePoint(*v_iter, &accVertex[0]);
+    accSection->updatePointAll(*v_iter, &accVertex[0]);
   } // for
 
   PetscLogFlops(vertices->size() * 6*spaceDim);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -353,8 +353,10 @@
     MatAssemblyBegin(_precondMatrix, MAT_FINAL_ASSEMBLY);
     MatAssemblyEnd(_precondMatrix, MAT_FINAL_ASSEMBLY);
 
+#if 0 // debugging
     std::cout << "Preconditioner Matrix" << std::endl;
     MatView(_precondMatrix, PETSC_VIEWER_STDOUT_WORLD);
+#endif
   } // if
 } // reformJacobian
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Implicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Implicit.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Implicit.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -76,7 +76,7 @@
     velVertex = dispIncrVertex / dt;
     
     assert(velSection->getFiberDimension(*v_iter) == spaceDim);
-    velSection->updatePoint(*v_iter, &velVertex[0]);
+    velSection->updatePointAll(*v_iter, &velVertex[0]);
   } // for
   PetscLogFlops(vertices->size() * spaceDim);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -102,19 +102,17 @@
   if (solutionSection->getNumSpaces() > spaceDim &&
       formulation->useCustomConstraintPC()) {
     // Get total number of DOF associated with constraints field split
-    const ALE::Obj<RealSection>& constraintSection = 
-      solutionSection->getFibration(spaceDim);
-    assert(!constraintSection.isNull());
+    const ALE::Obj<SieveMesh::order_type>& lagrangeGlobalOrder =
+      sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "faultDefault",
+                                              solutionSection, spaceDim);
+    assert(!lagrangeGlobalOrder.isNull());
 
-    // :TODO: Is this assembled across processors?
-    const int ndof = constraintSection->size(); 
-    
     if (0 != *precondMatrix) {
       err = MatDestroy(*precondMatrix); *precondMatrix = 0;
       CHECK_PETSC_ERROR(err);
     } // if
-    PetscInt nrows = ndof;
-    PetscInt ncols = ndof;
+    PetscInt nrows = lagrangeGlobalOrder->getLocalSize();
+    PetscInt ncols = nrows;
 
     err = MatCreate(sieveMesh->comm(), precondMatrix); CHECK_PETSC_ERROR(err);
     err = MatSetSizes(*precondMatrix, nrows, ncols, 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Field.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Field.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Field.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -742,7 +742,7 @@
 } // scatterVectorToSection
 
 // ----------------------------------------------------------------------
-// Setup split field with all entries set to a default space of 0.
+// Setup split field with all one space per spatial dimension.
 template<typename mesh_type>
 void 
 pylith::topology::Field<mesh_type>::splitDefault(void)
@@ -751,7 +751,6 @@
   const int spaceDim = _mesh.dimension();
   for (int iDim=0; iDim < spaceDim; ++iDim)
     _section->addSpace(); // displacements
-  _section->addSpace(); // Lagrange multipliers
 
   const chart_type& chart = _section->getChart();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i	2010-06-11 23:01:21 UTC (rev 16999)
@@ -87,15 +87,11 @@
        * @param cs Coordinate system for 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).
+       *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       virtual
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3],
-		      const double normalDir[3]) = 0;
+		      const double upDir[3]) = 0;
       
       /** Get mesh associated with fault fields.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i	2010-06-11 23:01:21 UTC (rev 16999)
@@ -53,14 +53,10 @@
        * @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).
+       *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3],
-		      const double normalDir[3]);
+		      const double upDir[3]);
       
       /** Integrate contributions to residual term (r) for operator that
        * do not require assembly across processors.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i	2010-06-11 23:01:21 UTC (rev 16999)
@@ -58,14 +58,10 @@
        * @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).
+       *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3],
-		      const double normalDir[3]);
+		      const double upDir[3]);
       
       /** Integrate contributions to residual term (r) for operator that
        * do not require assembly across cells, vertices, or processors.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i	2010-06-11 23:01:21 UTC (rev 16999)
@@ -41,15 +41,11 @@
        * @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).
+       *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       virtual
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3],
-		      const double normalDir[3]);
+		      const double upDir[3]);
       
       /** Split solution field for separate preconditioning.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i	2010-06-11 23:01:21 UTC (rev 16999)
@@ -47,14 +47,10 @@
        * @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).
+       *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3],
-		      const double normalDir[3]);
+		      const double upDir[3]);
 
       /** Integrate contribution of cohesive cells to residual term.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -24,6 +24,7 @@
 	StepSlipFn.i \
 	BruneSlipFn.i \
 	LiuCosSlipFn.i \
+	TimeHistorySlipFn.i \
 	EqKinSrc.i \
 	Fault.i \
 	FaultCohesive.i \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -24,7 +24,8 @@
 	Implicit.i \
 	Solver.i \
 	SolverLinear.i \
-	SolverNonlinear.i
+	SolverNonlinear.i \
+	SolverLumped.i
 
 
 swig_generated = \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -46,21 +46,13 @@
 # Compute preconditioner using diagonal approximations (but full A)
 Pd = numpy.zeros(J.shape)
 Pd[0:8,0:8] = A
-Pd[0:8,8:12] = C.transpose()
-Pd[8:12,0:8] = C
-Pd[8:12,8:12] = -1.0/(CACdi*CACdi)
+Pd[0:8,8:12] = 0.0
+Pd[8:12,0:8] = 0.0
+Pd[8:12,8:12] = -CACd
 
-# Compute expected inverse of preconditioner
-Pdi = numpy.zeros(Pd.shape)
-Pdi[0:8,0:8] = Ai
-Pdi[0:8,8:12] = numpy.dot(-Ai, C.transpose())
-Pdi[8:12,0:8] = 0.0
-#Pdi[8:12,8:12] = -numpy.dot(numpy.dot(numpy.dot(C, Ai), C.transpose()), CACdi*CACdi)
-Pdi[8:12,8:12] = numpy.eye(4)
+Pdi = numpy.linalg.inv(Pd)
 
 # Compute condition number for diagonal approximations
 evals, evecs = numpy.linalg.eig(numpy.dot(Pdi, J))
 print numpy.abs(evals)
 print numpy.max(numpy.abs(evals))/numpy.min(numpy.abs(evals))
-
-print numpy.dot(Pdi, J)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex	2010-06-11 23:01:21 UTC (rev 16999)
@@ -40,6 +40,29 @@
     C & 0
   \end{array} \right).
 \end{equation}
+We use the Schur complement of block A to examine the form of $J^{-1}$,
+\begin{equation}
+  J^{-1} = \left( \begin{array}{cc}
+    A^{-1}+A^{-1} C^{T}(-C A^{-1} C^{T})^{-1} C A^{-1} & 
+    -A^{-1}C^{T}(-C A^{-1} C^{T})^{-1} \\
+    -(-C A^{-1} C^{T})^{-1} C A^{-1} & -(C A^{-1} C^T)^{-1}
+  \end{array} \right),
+\end{equation}
+A suitable block diagonal $P^{-1}$ is
+\begin{equation}
+  P^{-1} = \left( \begin{array}{cc}
+    A^{-1} & 0 \\
+    0 & -(C A^{-1} C^T)^{-1}
+  \end{array} \right),
+\end{equation}
+which leads to
+\begin{equation}
+  P = \left( \begin{array}{cc}
+    A & 0 \\
+    0 & C A^{-1} C^T
+  \end{array} \right).
+\end{equation}
+
 We provide PETSc with $P$ so that it can create $P^{-1}$. Using the
 field split preconditioner, we form
 \begin{equation}
@@ -54,53 +77,20 @@
 degrees of freedom and $l$ be the number of Lagrange constraints. This
 means $A$ and $P$ are $(n+l) \times (n+l)$, $A$ and $A_\mathit{ml}$
 are $n \times n$, $C$ is $l \times n$, and $P_f$ is $l \times l$.
-
+We let $P_f$ be the the diagonal approximation of $C A^{-1} C^T$,
+\begin{equation}
+  P_f = \text{diagonal}(C A_\mathit{diag}^{-1} C^T).
+\end{equation}
 Using the {\tt multiplicative} field split type, PETSc will form
 $P^{-1}$ as
 \begin{equation}
   P^{-1} = \left( \begin{array}{cc}
-    A_\mathit{ml}^{-1} & -A_\mathit{ml}^{-1} C^T \\
-    0 & C A_\mathit{ml}^{-1} C^T P_f^{-1}
+    A_\mathit{ml}^{-1} & -A_\mathit{ml}^{-1} C^T ?? \\
+    0 & P_f^{-1}
   \end{array} \right).
 \end{equation}
 
-\subsection*{QUESTIONS FOR MATT}
-We are solving $J u = b$.
-\begin{itemize}
-\item Does PETSc solve the right-preconditioned system using
-  \begin{gather}
-    (J P^{-1}) v = b \\
-    u = P^{-1} v
-  \end{gather}
-  or the left-preconditioned system using
-  \begin{gather}
-    P^{-1}(J u - b) = 0.
-  \end{gather}
-\item
-  Do we want to reduce the conditioner number (ratio of largest to
-  smallest eigenvalue) of $J P^{-1}$ or $P^{-1} J$?
-\end{itemize}
-      
 
-\subsection*{Old, wrong stuff}
 
-Using the Schur complement, we want to form the preconditioner
-\begin{equation}
-  P = \left( \begin{array}{cc}
-    A^{-1} + A^{-1} C^T (-C A^{-1} C^T)^{-1} C A^{-1} &
-    -A^{-1} C^T (-C A^{-1} C^T)^{-1} \\
-    (C A^{-1} C^T)^{-1} C A^{-1} & -(C A^{-1} C^T)^{-1}
-  \end{array} \right).
-\end{equation}
-We approximate this preconditioner by using only the diagonal terms of $A$ and $C A^{-1} C^T$:
-\begin{equation}
-  Pd = \left( \begin{array}{cc}
-    \Adiag^{-1} + \Adiag^{-1} C^T (-C \Adiag^{-1} C^T)^{-1} C \Adiag^{-1} &
-    \Adiag^{-1} C^T (C \Adiag^{-1} C^T)^{-1} \\
-    (C \Adiag^{-1} C^T)^{-1} C \Adiag^{-1} & -(C \Adiag^{-1} C^T)^{-1}
-  \end{array} \right).
-\end{equation}
-
-
 % ======================================================================
 \end{document}
\ No newline at end of file

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -55,10 +55,7 @@
   @li \b name Name of fault
   @li \b up_dir Up-dip or up direction
     (perpendicular to along-strike and not collinear with fault normal;
-    only applies to fault surfaces in a 3-D domain).
-  @li \b normal_dir 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).
+    applies to fault surfaces in 2-D and 3-D).
   
   \b Facilities
   @li \b quadrature Quadrature object for numerical integration
@@ -81,15 +78,9 @@
                               validator=validateDir)
   upDir.meta['tip'] = "Up-dip or up direction " \
       "(perpendicular to along-strike and not collinear " \
-      "with fault normal; only applies to fault surface " \
-      "in a 3-D domain)."
+      "with fault normal; applies to fault surfaces " \
+      "in 2-D and 3-D)."
   
-  normalDir = pyre.inventory.list("normal_dir", default=[1, 0, 0],
-                                  validator=validateDir)
-  normalDir.meta['tip'] = "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)."
-  
   from pylith.feassemble.Quadrature import SubMeshQuadrature
   faultQuadrature = pyre.inventory.facility("quadrature", factory=SubMeshQuadrature)
   faultQuadrature.meta['tip'] = "Quadrature object for numerical integration."
@@ -157,7 +148,7 @@
 
     self.faultQuadrature.initialize()
     ModuleFault.initialize(self, 
-                           self.mesh, self.upDir, self.normalDir)
+                           self.mesh, self.upDir)
 
     if None != self.output:
       self.output.initialize(normalizer, self.faultQuadrature)
@@ -235,7 +226,6 @@
     PetscComponent._configure(self)
     self.faultQuadrature = self.inventory.faultQuadrature
     self.upDir = map(float, self.inventory.upDir)
-    self.normalDir = map(float, self.inventory.normalDir)
     ModuleFault.id(self, self.inventory.matId)
     ModuleFault.label(self, self.inventory.faultLabel)
     self.perfLogger = self.inventory.perfLogger

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/TimeHistorySlipFn.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/TimeHistorySlipFn.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/TimeHistorySlipFn.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -57,7 +57,7 @@
   dbTimeHistory = pyre.inventory.facility("time_history",
                                           family="temporal_database",
                                           factory=TimeHistory)
-  dbTimeHistory.meta['tip'] = "Spatial database of rise time (t95)."
+  dbTimeHistory.meta['tip'] = "Temporal database for slip evolution."
 
 
   # PUBLIC METHODS /////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/IntegratorElasticity.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/IntegratorElasticity.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/IntegratorElasticity.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -70,6 +70,15 @@
     self._eventLogger.eventBegin(logEvent)
 
     Integrator.verifyConfiguration(self)
+
+    if self.mesh.dimension() != self.materialObj.dimension():
+      raise ValueError("Mesh dimension is '%d' but material '%s' of type " \
+                         "'%s' applies to dimension '%d'." % \
+                       (self.mesh.dimension(),
+                        self.materialObj.label(),
+                        self.materialObj,
+                        self.materialObj.dimension()))
+    
     self.output.verifyConfiguration(self.mesh)
 
     self._eventLogger.eventEnd(logEvent)    

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -58,7 +58,7 @@
     import pyre.inventory
 
     label = pyre.inventory.str("label", default="")
-    label.meta['tip'] = "Name of material."
+    label.meta['tip'] = "Name of the friction model."
 
     from spatialdata.spatialdb.SimpleDB import SimpleDB
     dbProperties = pyre.inventory.facility("db_properties",

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -40,6 +40,7 @@
     ##
     ## \b Properties
     ## @li \b filename Name of Cubit Exodus file.
+    ## @li \b use_nodeset_names Ues nodeset names instead of ids.
     ##
     ## \b Facilities
     ## @li coordsys Coordinate system associated with mesh.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLgDeform.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLgDeform.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLgDeform.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -28,6 +28,30 @@
   Factory: pde_formulation.
   """
 
+  class Inventory(Explicit.Inventory):
+    """
+    Python object for managing ImplicitLgDeform facilities and properties.
+
+    Provide appropriate solver for small strains 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 SolverNonlinear import SolverNonlinear
+    solver = pyre.inventory.facility("solver", family="solver",
+                                     factory=SolverNonlinear)
+    solver.meta['tip'] = "Algebraic solver."
+
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="explicitlgdeform"):
@@ -53,6 +77,7 @@
     Set members based using inventory.
     """
     Explicit._configure(self)
+    self.solver = self.inventory.solver
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitLgDeform.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitLgDeform.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitLgDeform.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -28,6 +28,30 @@
   Factory: pde_formulation.
   """
 
+  class Inventory(Implicit.Inventory):
+    """
+    Python object for managing ImplicitLgDeform facilities and properties.
+
+    Provide appropriate solver for small strains 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 SolverNonlinear import SolverNonlinear
+    solver = pyre.inventory.facility("solver", family="solver",
+                                     factory=SolverNonlinear)
+    solver.meta['tip'] = "Algebraic solver."
+
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="implicitlgdeform"):
@@ -53,6 +77,7 @@
     Set members based using inventory.
     """
     Implicit._configure(self)
+    self.solver = self.inventory.solver
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/topology/Distributor.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/topology/Distributor.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/topology/Distributor.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -28,7 +28,7 @@
 
   \b Properties
   @li \b partitioner Name of mesh partitioner {"parmetis", "chaco"}.
-  @li \b debug Write partition information to file.
+  @li \b writePartition Write partition information to file.
   
   \b Facilities
   @li \b writer Data writer for for partition information.
@@ -45,8 +45,8 @@
                                                                     "parmetis"]))
   partitioner.meta['tip'] = "Name of mesh partitioner."
   
-  debug = pyre.inventory.bool("debug", default=False)
-  debug.meta['tip'] = "Write partition information to file."
+  writePartition = pyre.inventory.bool("write_partition", default=False)
+  writePartition.meta['tip'] = "Write partition information to file."
   
   from pylith.meshio.DataWriterVTKMesh import DataWriterVTKMesh
   dataWriter = pyre.inventory.facility("data_writer", factory=DataWriterVTKMesh,
@@ -76,7 +76,7 @@
     newMesh = Mesh(mesh.dimension())
     ModuleDistributor.distribute(newMesh, mesh, self.partitioner)
 
-    if self.debug:
+    if self.writePartition:
       self.dataWriter.initialize(normalizer)
       ModuleDistributor.write(self.dataWriter, newMesh)
 
@@ -92,7 +92,7 @@
     """
     PetscComponent._configure(self)
     self.partitioner = self.inventory.partitioner
-    self.debug = self.inventory.debug
+    self.writePartition = self.inventory.writePartition
     self.dataWriter = self.inventory.dataWriter
     return
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -142,7 +142,7 @@
 void
 contrib::materials::PlaneStrainState::_dbToProperties(
 				double* const propValues,
-                                const pylith::double_array& dbValues) const
+                                const pylith::double_array& dbValues)
 { // _dbToProperties
   // Check consistency of arguments
   assert(0 != propValues);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.hh	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.hh	2010-06-11 23:01:21 UTC (rev 16999)
@@ -87,7 +87,7 @@
    * @param dbValues Array of database values.
    */
   void _dbToProperties(double* const propValues,
-		       const pylith::double_array& dbValues) const;
+		       const pylith::double_array& dbValues);
 
   /** Nondimensionalize properties.
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.i	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.i	2010-06-11 23:01:21 UTC (rev 16999)
@@ -63,7 +63,7 @@
        * @param dbValues Array of database values.
        */
       void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues) const;
+			   const pylith::double_array& dbValues);
       
       /** Nondimensionalize properties.
        *

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/Makefile.am (from rev 16998, short/3D/PyLith/trunk/tests/2d/Makefile.am)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/Makefile.am	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,18 @@
+# -*- Makefile -*-
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+SUBDIRS = \
+	maxwell \
+	slipdir
+
+
+# End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/maxwell/Makefile.am (from rev 16998, short/3D/PyLith/trunk/tests/2d/maxwell/Makefile.am)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/maxwell/Makefile.am	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/maxwell/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,26 @@
+# -*- Makefile -*-
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+dist_noinst_DATA = \
+	README \
+	axialdisp2d.cfg \
+	axialdisp3d.cfg \
+	planestrain2d.cfg \
+	planestrain3d.cfg \
+	pylithapp.cfg \
+	sheardisp2d.cfg \
+	sheardisp3d.cfg \
+	twohex8.mesh \
+	twoquad4.mesh
+
+
+# End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/slipdir (from rev 16998, short/3D/PyLith/trunk/tests/2d/slipdir)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am (from rev 16998, short/3D/PyLith/trunk/tests/3d/Makefile.am)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -0,0 +1,17 @@
+# -*- Makefile -*-
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+SUBDIRS = \
+	matprops \
+	slipdir
+
+# End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/matprops (from rev 16998, short/3D/PyLith/trunk/tests/3d/matprops)

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/slipdir (from rev 16998, short/3D/PyLith/trunk/tests/3d/slipdir)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -10,4 +10,8 @@
 # ----------------------------------------------------------------------
 #
 
+SUBDIRS = \
+	2d \
+	3d
+
 # End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/1d/line2/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/1d/line2/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/1d/line2/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -30,7 +30,8 @@
 	extensionforce_force.spatialdb \
 	dislocation.cfg \
 	finalslip.spatialdb \
-	sliptime.spatialdb
+	sliptime.spatialdb \
+	lgdeformtranslation.cfg
 
 noinst_TMP = \
 	extensiondisp_t0000000.vtk \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -23,6 +23,7 @@
 	sheardisp_soln.py \
 	sheardisp_gendb.py \
 	TestDislocation.py \
+	TestDislocation2.py \
 	dislocation_soln.py \
 	dislocation2_soln.py \
 	TestLgDeformRigidBody.py \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg	2010-06-11 23:01:21 UTC (rev 16999)
@@ -10,8 +10,8 @@
 # The settings below turn on journal info for the specified components.
 # If you want less output to stdout, you can turn these off.
 [slipweakening_shear_sliding.journal.info]
-#timedependent = 1
-#implicit = 1
+timedependent = 1
+implicit = 1
 #petsc = 1
 #solvernonlinear = 1
 #meshioascii = 1
@@ -19,7 +19,7 @@
 #elasticityimplicit = 1
 #fiatlagrange = 1
 #quadrature1d = 1
-#faultcohesivedyn = 1
+faultcohesivedyn = 1
 
 # ----------------------------------------------------------------------
 # mesh_generator

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/TestAxialPlaneStrain.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/TestAxialPlaneStrain.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/TestAxialPlaneStrain.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,179 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file tests/2d/tri3/TestAxialPlaneStrain.py
-##
-## @brief Test suite for testing pylith with axial compression in
-## y-direction for 2-D box.
-
-import unittest
-import numpy
-from pylith.utils.VTKDataReader import has_vtk
-from pylith.utils.VTKDataReader import VTKDataReader
-
-# Local version of PyLithApp
-from pylith.apps.PyLithApp import PyLithApp
-class AxialPlaneStrainApp(PyLithApp):
-  def __init__(self):
-    PyLithApp.__init__(self, name="axialplanestrain")
-    return
-
-
-# Helper function to run PyLith
-def run_pylith():
-  """
-  Run pylith.
-  """
-  if not "done" in dir(run_pylith):
-    app = AxialPlaneStrainApp()
-    app.run()
-    run_pylith.done = True
-  return
-
-
-class TestAxialPlaneStrain(unittest.TestCase):
-  """
-  Test suite for testing pylith with axial extension in y-direction
-  for 2-D box.
-  """
-
-  def setUp(self):
-    """
-    Setup for test.
-    """
-    run_pylith()
-    if has_vtk():
-      self.reader = VTKDataReader()
-    else:
-      self.reader = None
-    return
-
-  
-  def test_elastic_info(self):
-    """
-    Check elastic info.
-    """
-    if self.reader is None:
-      return
-
-    data = self.reader.read("axialplanestrain-statevars-elastic_info.vtk")
-
-    # Check cells
-    ncellsE = 84
-    ncornersE = 3
-    (ncells, ncorners) = data['cells'].shape
-    self.assertEqual(ncellsE, ncells)
-    self.assertEqual(ncornersE, ncorners)
-
-    # Check vertices
-    nverticesE = 54
-    spaceDimE = 3
-    (nvertices, spaceDim) = data['vertices'].shape
-    self.assertEqual(nverticesE, nvertices)
-    self.assertEqual(spaceDimE, spaceDim)
-
-    # Check physical properties
-    tolerance = 1.0e-5
-    vsE = 3000.0
-    vpE = 5291.502622129181
-    densityE = 2500.0
-
-    # Lame's constant mu (shear modulus)
-    muE = densityE*vsE**2
-    diff = numpy.abs(1.0 - data['cell_fields']['mu']/muE)
-    okay = diff < tolerance
-    if numpy.sum(okay) != ncells:
-      print "Lame's constant mu: ",data['cell_fields']['mu']
-      self.assertEqual(ncells, numpy.sum(okay))    
-
-    # Lame's constant lambda
-    lambdaE = densityE*vpE**2 - 2*muE
-    diff = numpy.abs(1.0 - data['cell_fields']['lambda']/lambdaE)
-    okay = diff < tolerance
-    if numpy.sum(okay) != ncells:
-      print "Lame's constant lambda: ",data['cell_fields']['lambda']
-      self.assertEqual(ncells, numpy.sum(okay))    
-
-    # Density
-    diff = numpy.abs(1.0 - data['cell_fields']['density']/densityE)
-    okay = diff < tolerance
-    if numpy.sum(okay) != ncells:
-      print "Density: ",data['cell_fields']['density']
-      self.assertEqual(ncells, numpy.sum(okay))    
-    return
-
-
-  def test_soln(self):
-    """
-    Check solution (displacement) field.
-    """
-    if self.reader is None:
-      return
-
-    data = self.reader.read("axialplanestrain_t0000000.vtk")
-
-    # Check cells
-    ncellsE = 84
-    ncornersE = 3
-    (ncells, ncorners) = data['cells'].shape
-    self.assertEqual(ncellsE, ncells)
-    self.assertEqual(ncornersE, ncorners)
-
-    # Check vertices
-    nverticesE = 54
-    spaceDimE = 3
-    vertices = data['vertices']
-    (nvertices, spaceDim) = vertices.shape
-    self.assertEqual(nverticesE, nvertices)
-    self.assertEqual(spaceDimE, spaceDim)
-
-    # Check displacement solution
-    tolerance = 1.0e-5
-    dispE = numpy.zeros( (nvertices, spaceDim), dtype=numpy.float64)
-    dispE[:,1] = -0.004 * vertices[:,1]
-
-    disp = data['vertex_fields']['displacements']
-
-    # Check x displacements
-    diff = numpy.abs(disp[:,0] - dispE[:,0])
-    okay = diff < tolerance
-    if numpy.sum(okay) != nvertices:
-      print "Displacement field: ",disp
-      self.assertEqual(nvertices, numpy.sum(okay))    
-    
-    # Check y displacements
-    mask = dispE[:,1] > 0.0
-    diff = mask * numpy.abs(1.0 - disp[:,1] / dispE[:,1]) + \
-        ~mask * numpy.abs(disp[:,1] - dispE[:,1])
-    okay = diff < tolerance
-    if numpy.sum(okay) != nvertices:
-      print "Displacement field: ",disp
-      self.assertEqual(nvertices, numpy.sum(okay))    
-
-    # Check z displacements
-    diff = numpy.abs(disp[:,2] - dispE[:,2])
-    okay = diff < tolerance
-    if numpy.sum(okay) != nvertices:
-      print "Displacement field: ",disp
-      self.assertEqual(nvertices, numpy.sum(okay))    
-    
-    return
-
-
-  def test_elastic_statevars(self):
-    """
-    Check elastic state variables.
-    """
-    return
-
-
-# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/petsc/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/petsc/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/petsc/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -12,10 +12,10 @@
 
 TESTS = testpetsc.py
 
-check_SCRIPTS = testpetsc.py
+dist_check_SCRIPTS = testpetsc.py
 
 dist_noinst_PYTHON = \
-	TestPetscApp.py
+	TestPetscApp.py 
 
 noinst_DATA = 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -56,6 +56,7 @@
 
 noinst_HEADERS = \
 	TestBruneSlipFn.hh \
+	TestLiuCosSlipFn.hh \
 	TestTimeHistorySlipFn.hh \
 	TestConstRateSlipFn.hh \
 	TestStepSlipFn.hh \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -736,9 +736,8 @@
   mesh->nondimensionalize(normalizer);
   
   const double upDir[] = { 0.0, 0.0, 1.0 };
-  const double normalDir[] = { 1.0, 0.0, 0.0 };
   
-  fault->initialize(*mesh, upDir, normalDir);
+  fault->initialize(*mesh, upDir);
   
   // Setup fields
   fields->add("disp(t)", "displacement");

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -367,7 +367,7 @@
 
   jacobian.assemble("final_assembly");
 
-  // MatView(jacobian.matrix(), PETSC_VIEWER_STDOUT_WORLD); // DEBUGGING
+  //MatView(jacobian.matrix(), PETSC_VIEWER_STDOUT_WORLD); // DEBUGGING
 
   const double* valsE = _data->jacobian;
   const int nrowsE = dispSection->sizeWithBC();
@@ -924,9 +924,8 @@
   mesh->nondimensionalize(normalizer);
 
   const double upDir[] = { 0.0, 0.0, 1.0 };
-  const double normalDir[] = { 1.0, 0.0, 0.0 };
   
-  fault->initialize(*mesh, upDir, normalDir); 
+  fault->initialize(*mesh, upDir); 
   
   delete[] sources; sources = 0;
   for (int i=0; i < nsrcs; ++i)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1329,10 +1329,10 @@
 // ----------------------------------------------------------------------
 
 const double pylith::faults::CohesiveDynDataHex8::_orientation[] = {
-  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,    -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,    -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,    -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,    -1.0, 0.0, 0.0,
 };
 
 const double pylith::faults::CohesiveDynDataHex8::_area[] = {
@@ -1340,10 +1340,10 @@
 };
 
 const double pylith::faults::CohesiveDynDataHex8::_forcesInitial[] = {
-  3.063397471, -1.063397471, -2.063397471, 
-  3.121132498, -1.121132498, -2.121132498, 
-  3.178867525, -1.178867525, -2.178867525,
-  3.236602552, -1.236602552, -2.236602552,
+  3.063397471, -1.063397471, +2.063397471, 
+  3.121132498, -1.121132498, +2.121132498, 
+  3.178867525, -1.178867525, +2.178867525,
+  3.236602552, -1.236602552, +2.236602552,
 };
 
 
@@ -1414,18 +1414,18 @@
    5.200000000000,   7.200000000000,   9.200000000000,
    5.300000000000,   7.300000000000,   9.300000000000,
    5.400000000000,   7.400000000000,   9.400000000000,
-   5.500000000000,   7.502147646546,   9.501854987583,
-   5.600000000000,   7.601366849268,   9.601164065411,
-   5.700000000000,   7.700813991519,   9.700664113555,
-   5.800000000000,   7.800399117540,   9.800283216344,
+   5.500000000000,   7.504978662071,   9.495178588558,
+   5.600000000000,   7.604183996601,   9.595885186290,
+   5.700000000000,   7.703622549597,   9.696395508868,
+   5.800000000000,   7.803201980792,   9.796783683690,
    5.900000000000,   7.900000000000,   9.900000000000,
    5.000000000000,   7.000000000000,   9.000000000000,
    6.100000000000,   8.100000000000,  10.100000000000,
    6.200000000000,   8.200000000000,  10.200000000000,
-   6.300000000000,   8.297852353454,  10.298145012417,
-   6.500000000000,   8.498633150732,  10.498835934589,
-   6.700000000000,   8.699186008481,  10.699335886445,
-   6.900000000000,   8.899600882460,  10.899716783656,
+   6.300000000000,   8.295021337929,  10.304821411442,
+   6.500000000000,   8.495816003399,  10.504114813710,
+   6.700000000000,   8.696377450403,  10.703604491132,
+   6.900000000000,   8.896798019208,  10.903216316310,
   -5.824264068712,  -7.824264068712, -10.400000000000,
   -6.024264068712,  -8.024264068712, -10.600000000000,
   -6.224264068712,  -8.224264068712, -10.800000000000,
@@ -1433,10 +1433,10 @@
 };
 
 const double pylith::faults::CohesiveDynDataHex8::_slipSlipE[] = {
-  0.004295293093,  0.003709975165,  0.0,
-  0.002733698536,  0.002328130822,  0.0,
-  0.001627983037,  0.001328227109,  0.0,
-  0.000798235080,  0.000566432689,  0.0,
+   0.009957324142,   0.009642822884,   0.000000000000,
+   0.008367993202,   0.008229627421,   0.000000000000,
+   0.007245099193,   0.007208982264,   0.000000000000,
+   0.006403961584,   0.006432632620,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
@@ -1472,18 +1472,18 @@
    5.200000000000,   7.200000000000,   9.200000000000,
    5.300000000000,   7.300000000000,   9.300000000000,
    5.400000000000,   7.400000000000,   9.400000000000,
-   5.500000000000,   7.520764683862,   9.493622329940,
-   5.600000000000,   7.633324383533,   9.609428688349,
-   5.700000000000,   7.742157282680,   9.720808020010,
-   5.810556284102,   7.860109359324,   9.840397686530,
+   5.500000000000,   7.442454974471,   9.676228188067,
+   5.600000000000,   7.555401305851,   9.759311696661,
+   5.700000000000,   7.664478333931,   9.847182893464,
+   5.800000000000,   7.782595639240,   9.927084810574,
    5.900000000000,   7.900000000000,   9.900000000000,
    5.000000000000,   7.000000000000,   9.000000000000,
    6.100000000000,   8.100000000000,  10.100000000000,
    6.200000000000,   8.200000000000,  10.200000000000,
-   6.300000000000,   8.279235316138,  10.306377670060,
-   6.500000000000,   8.466675616467,  10.490571311651,
-   6.700000000000,   8.657842717320,  10.679191979990,
-   6.889443715898,   8.839890640676,  10.859602313470,
+   6.300000000000,   8.357545025529,  10.123771811933,
+   6.500000000000,   8.544598694149,  10.340688303339,
+   6.700000000000,   8.735521666069,  10.552817106536,
+   6.900000000000,   8.917404360760,  10.772915189426,
   -5.400000000000,  -7.400000000000,  -9.400000000000,
   -5.600000000000,  -7.600000000000,  -9.600000000000,
   -5.800000000000,  -7.800000000000,  -9.800000000000,
@@ -1491,10 +1491,10 @@
 };
 
 const double pylith::faults::CohesiveDynDataHex8::_slipOpenE[] = {
-  0.041529367723, -0.012755340119, 0.0,
-  0.066648767067,  0.018857376697, 0.0,
-  0.084314565359,  0.041616040020,  0.0,
-  0.120218718648,  0.080795373061,  0.021112568204,
+  -0.115090051058,  -0.352456376134,   0.000000000000,
+  -0.089197388297,  -0.318623393323,   0.000000000000,
+  -0.071043332138,  -0.294365786929,   0.000000000000,
+  -0.034808721519,  -0.254169621148,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -459,9 +459,9 @@
 // ----------------------------------------------------------------------
 
 const double pylith::faults::CohesiveDynDataTet4::_orientation[] = {
-  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,    -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,    -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,    -1.0, 0.0, 0.0,
 };
 
 const double pylith::faults::CohesiveDynDataTet4::_area[] = {
@@ -471,9 +471,9 @@
 };
 
 const double pylith::faults::CohesiveDynDataTet4::_forcesInitial[] = {
-  3.1/3.0, -1.1/3.0, -2.1/3.0,
-  3.1/3.0, -1.1/3.0, -2.1/3.0,
-  3.1/3.0, -1.1/3.0, -2.1/3.0,
+  3.1/3.0, -1.1/3.0, +2.1/3.0,
+  3.1/3.0, -1.1/3.0, +2.1/3.0,
+  3.1/3.0, -1.1/3.0, +2.1/3.0,
 };
 
 
@@ -523,23 +523,23 @@
 
 // Output
 const double pylith::faults::CohesiveDynDataTet4::_fieldIncrSlipE[] = {
-  8.100000000000,   9.100000000000,  10.100000000000,
-  8.200000000000,   8.809232141461,   9.862173674926,
-  8.300000000000,   9.190332288811,  10.187259296949,
-  8.400000000000,   9.453729592911,  10.437030750553,
-  8.500000000000,   9.500000000000,  10.500000000000,
-  8.600000000000,   9.990767858539,  10.937826325074,
-  8.800000000000,   9.909667711189,  10.912740703051,
-  8.000000000000,   8.946270407089,   9.962969249447,
- -7.300777685147,  -8.252092036995, -10.700000000000,
- -7.500201409882,  -8.452606339630, -10.900000000000,
- -6.702681322117,  -7.650402548711, -10.100000000000,
+   8.100000000000,   9.100000000000,  10.100000000000,
+   8.200000000000,   8.391727731714,  10.956284985259,
+   8.300000000000,   8.791277340217,  10.815192651071,
+   8.400000000000,   9.060755249362,  10.758883268626,
+   8.500000000000,   9.500000000000,  10.500000000000,
+   8.600000000000,  10.408272268286,   9.843715014741,
+   8.800000000000,  10.308722659783,  10.284807348929,
+   8.000000000000,   9.339244750638,   9.641116731374,
+  -7.300777685147,  -8.252092036995, -10.700000000000,
+  -7.500201409882,  -8.452606339630, -10.900000000000,
+  -6.702681322117,  -7.650402548711, -10.100000000000,
 };
 
 const double pylith::faults::CohesiveDynDataTet4::_slipSlipE[] = {
-  -0.78153572, -0.67565265, 0.0,
-  -0.21933542, -0.22548141, 0.0,
-   0.10745919,  0.0740615,  0.0,
+  -1.616544536572,  -1.512569970519,   0.000000000000,
+  -1.017445319566,  -1.030385302142,   0.000000000000,
+  -0.678489501275,  -0.717766537252,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
@@ -563,22 +563,22 @@
 // Output
 const double pylith::faults::CohesiveDynDataTet4::_fieldIncrOpenE[] = {
    8.100000000000,   9.100000000000,  10.100000000000,
-   8.200000000000,   9.135497272962,  10.179476872604,
-   8.300000000000,   9.499046287062,  10.492579766051,
-   8.626823377123,   9.756303461532,  10.737559383723,
+   8.200000000000,   8.707485448105,  11.300792216319,
+   8.300000000000,   9.089936432069,  11.135493258511,
+   8.400000000000,   9.353421152116,  11.068689140292,
    8.500000000000,   9.500000000000,  10.500000000000,
-   8.600000000000,   9.664502727038,  10.620523127396,
-   8.800000000000,   9.600953712938,  10.607420233949,
-   7.773176622877,   8.643696538468,   9.662440616277,
+   8.600000000000,  10.092514551895,   9.499207783681,
+   8.800000000000,  10.010063567931,   9.964506741489,
+   8.000000000000,   9.046578847884,   9.331310859708,
   -7.700000000000,  -8.700000000000,  -9.700000000000,
   -7.900000000000,  -8.900000000000,  -9.900000000000,
   -7.100000000000,  -8.100000000000,  -9.100000000000,
 };
 
 const double pylith::faults::CohesiveDynDataTet4::_slipOpenE[] = {
-  -0.12900545, -0.04104625, 0.0,
-  0.39809257,  0.38515953, 0.0,
-  0.71260692,  0.67511877,  0.45364675,
+  -0.985029103789,  -2.201584432637,   0.000000000000,
+  -0.420127135861,  -1.670986517021,   0.000000000000,
+  -0.093157695768,  -1.337378280584,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -194,10 +194,10 @@
 
 
 const double pylith::faults::CohesiveKinDataHex8::_orientation[] = {
-  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,    -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,    -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,    -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,    -1.0, 0.0, 0.0,
 };
 
 const double pylith::faults::CohesiveKinDataHex8::_area[] = {
@@ -209,22 +209,22 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,-7.4, // 6
- -9.6,-5.6,-7.6, // 7
- -9.8,-5.8,-7.8, // 8
- -9.0,-5.0,-7.0, // 9
+ -9.4,-5.4,+7.4, // 6
+ -9.6,-5.6,+7.6, // 7
+ -9.8,-5.8,+7.8, // 8
+ -9.0,-5.0,+7.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,+7.4, // 14
- +9.6,+5.6,+7.6, // 15
- +9.8,+5.8,+7.8, // 16
- +9.0,+5.0,+7.0, // 17
-  0.8+1.82575588523, 0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
-  0.9+1.69682900001, 0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
-  1.0+1.51709826228, 1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
-  1.1+1.29378670385, 1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
+ +9.4,+5.4,-7.4, // 14
+ +9.6,+5.6,-7.6, // 15
+ +9.8,+5.8,-7.8, // 16
+ +9.0,+5.0,-7.0, // 17
+  0.8+1.82575588523, -0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
+  0.9+1.69682900001, -0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
+  1.0+1.51709826228, -1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
+  1.1+1.29378670385, -1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
 };
 
 const double pylith::faults::CohesiveKinDataHex8::_residualIncr[] = {
@@ -232,22 +232,22 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,-7.4, // 6
- -9.6,-5.6,-7.6, // 7
- -9.8,-5.8,-7.8, // 8
- -9.0,-5.0,-7.0, // 9
+ -9.4,-5.4,+7.4, // 6
+ -9.6,-5.6,+7.6, // 7
+ -9.8,-5.8,+7.8, // 8
+ -9.0,-5.0,+7.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,+7.4, // 14
- +9.6,+5.6,+7.6, // 15
- +9.8,+5.8,+7.8, // 16
- +9.0,+5.0,+7.0, // 17
-  0.8+1.82575588523, 0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
-  0.9+1.69682900001, 0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
-  1.0+1.51709826228, 1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
-  1.1+1.29378670385, 1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
+ +9.4,+5.4,-7.4, // 14
+ +9.6,+5.6,-7.6, // 15
+ +9.8,+5.8,-7.8, // 16
+ +9.0,+5.0,-7.0, // 17
+  0.8+1.82575588523, -0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
+  0.9+1.69682900001, -0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
+  1.0+1.51709826228, -1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
+  1.1+1.29378670385, -1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
 };
 
 const double pylith::faults::CohesiveKinDataHex8::_jacobian[] = {
@@ -547,7 +547,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 18
+  0.0,-1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -608,7 +608,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 19
+  0.0,-1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -669,7 +669,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 20
+  0.0,-1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -730,7 +730,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 21
+  0.0,-1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 10x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1027,7 +1027,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 18
+  0.0,+1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1088,7 +1088,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 19
+  0.0,+1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16x
@@ -1149,7 +1149,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 20
+  0.0,+1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 17x
   0.0, 0.0, 0.0,
@@ -1210,7 +1210,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 21
+  0.0,+1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 18x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1235,7 +1235,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 6
+  0.0, 0.0,-1.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1243,7 +1243,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 14
+  0.0, 0.0,+1.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1296,7 +1296,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 7
+  0.0, 0.0,-1.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1304,7 +1304,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 15
+  0.0, 0.0,+1.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1357,7 +1357,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 8
+  0.0, 0.0,-1.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1365,7 +1365,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 16
+  0.0, 0.0,+1.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1418,7 +1418,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 9
+  0.0, 0.0,-1.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1426,7 +1426,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 17
+  0.0, 0.0,+1.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1458,22 +1458,22 @@
   3.2, 4.2, 5.2,
   3.3, 4.3, 5.3,
   3.4, 4.4, 5.4,
-  10.1749505588, 9.31910094671, 10.5467746601, // 6
-  10.1039043952, 9.3565301613, 10.5118017742, // 7
-  10.0557317781, 9.37031383702, 10.5151576069, // 8
-  9.46707670425, 8.80701959867, 9.99822415528, // 9
+  10.1749505588, 9.31910094671, 1.19608248275, // 6
+  10.1039043952, 9.3565301613, 1.55916596774, // 7
+  10.0557317781, 9.37031383702, 1.88484239309, // 8
+  9.46707670425, 8.80701959867, 2.73150557445, // 9
   3.9, 4.9, 5.9,
   3.0, 4.0, 5.0,
   3.1, 4.1, 5.1,
   3.2, 4.2, 5.2,
-  -4.40186602934, -1.26050109236, -0.523201530893, // 14
-  -3.43749802151, -0.573632172048, 0.260744774195, // 15
-  -2.65573177809, 0.0296861629776, 0.884842393092, // 16
-  -1.46880950929, 1.10387616968, 1.92273501079, // 17
-  -7.22865142007, -7.57016199016, -10.0124258381, // 18
-  -7.61044825807, -7.85888283871, -10.4062470323, // 19
-  -7.93953352294, -8.18576793174, -10.8047440227, // 20
-  -7.21263527761, -7.55680347951, -10.2007380677, // 21
+  -4.40186602934, -1.26050109236, 10.2660586738, // 14
+  -3.43749802151, -0.573632172048, 9.81022296774, // 15
+  -2.65573177809, 0.0296861629776, 9.51515760691, // 16
+  -1.46880950929, 1.10387616968, 8.80699471894, // 17
+  -7.22865142007, -6.45587627588, -10.0124258381, // 18
+  -7.61044825807, -6.46533445161, -10.4062470323, // 19
+  -7.93953352294, -6.48576793174, -10.8047440227, // 20
+  -7.21263527761, -5.52328996599, -10.2007380677, // 21
 };
 
 pylith::faults::CohesiveKinDataHex8::CohesiveKinDataHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -93,9 +93,9 @@
 
 
 const double pylith::faults::CohesiveKinDataTet4f::_orientation[] = {
-  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,    -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,    -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,    -1.0, 0.0, 0.0,
 };
 
 const double pylith::faults::CohesiveKinDataTet4f::_area[] = {
@@ -129,30 +129,30 @@
 
 const double pylith::faults::CohesiveKinDataTet4f::_residual[] = {
   0.0,  0.0,  0.0,
- -9.7, -7.7, -8.7, // 3
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
+ -9.7, -7.7, +8.7, // 3
+ -9.9, -7.9, +8.9, // 4
+ -9.1, -7.1, +8.1, // 5
   0.0,  0.0,  0.0,
- +9.7, +7.7, +8.7, // 7
- +9.9, +7.9, +8.9, // 8
- +9.1, +7.1, +8.1, // 9
-  0.4+1.82575588523,  0.4+-0.55566483464,  0.4+0.07938069066, // 10
-  0.5+1.69682900001,  0.5+-0.56560966667,  0.5+0.14140241667, // 11
- -0.4+1.51709826228, -0.4+-0.54615537442, -0.4+0.18205179147, // 12
+ +9.7, +7.7, -8.7, // 7
+ +9.9, +7.9, -8.9, // 8
+ +9.1, +7.1, -8.1, // 9
+  0.4+1.82575588523,  -0.4+-0.55566483464,  0.4+0.07938069066, // 10
+  0.5+1.69682900001,  -0.5+-0.56560966667,  0.5+0.14140241667, // 11
+ -0.4+1.51709826228,  +0.4+-0.54615537442, -0.4+0.18205179147, // 12
 };
 
 const double pylith::faults::CohesiveKinDataTet4f::_residualIncr[] = {
   0.0,  0.0,  0.0,
- -9.7, -7.7, -8.7, // 3
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
+ -9.7, -7.7, +8.7, // 3
+ -9.9, -7.9, +8.9, // 4
+ -9.1, -7.1, +8.1, // 5
   0.0,  0.0,  0.0,
- +9.7, +7.7, +8.7, // 7
- +9.9, +7.9, +8.9, // 8
- +9.1, +7.1, +8.1, // 9
-  0.4+1.82575588523,  0.4+-0.55566483464,  0.4+0.07938069066, // 10
-  0.5+1.69682900001,  0.5+-0.56560966667,  0.5+0.14140241667, // 11
- -0.4+1.51709826228, -0.4+-0.54615537442, -0.4+0.18205179147, // 12
+ +9.7, +7.7, -8.7, // 7
+ +9.9, +7.9, -8.9, // 8
+ +9.1, +7.1, -8.1, // 9
+  0.4+1.82575588523, -0.4+-0.55566483464,  0.4+0.07938069066, // 10
+  0.5+1.69682900001, -0.5+-0.56560966667,  0.5+0.14140241667, // 11
+ -0.4+1.51709826228, +0.4+-0.54615537442, -0.4+0.18205179147, // 12
 };
 
 const double pylith::faults::CohesiveKinDataTet4f::_jacobian[] = {
@@ -219,7 +219,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 10
+  0.0,-1.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4x
@@ -253,7 +253,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 11
+  0.0,-1.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 5x
   0.0, 0.0, 0.0,
@@ -287,7 +287,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 12
+  0.0,-1.0, 0.0, // 12
   0.0, 0.0, 0.0, // 6x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -351,7 +351,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 10
+  0.0,+1.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -385,7 +385,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 11
+  0.0,+1.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -419,7 +419,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 12
+  0.0,+1.0, 0.0, // 12
   0.0, 0.0, 0.0, // 10x
   0.0,+1.0, 0.0, // 3
   0.0, 0.0, 0.0,
@@ -432,11 +432,11 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10y
-  0.0, 0.0,+1.0, // 3
+  0.0, 0.0,-1.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 7
+  0.0, 0.0,+1.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -466,11 +466,11 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11y
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 4
+  0.0, 0.0,-1.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 8
+  0.0, 0.0,+1.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -500,11 +500,11 @@
   0.0, 0.0, 0.0, // 12y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 5
+  0.0, 0.0,-1.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 9
+  0.0, 0.0,+1.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -126,10 +126,10 @@
 
 
 const double pylith::faults::CohesiveKinSrcsDataHex8::_orientation[] = {
-  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,    -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,    -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,    -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,    -1.0, 0.0, 0.0,
 };
 
 const double pylith::faults::CohesiveKinSrcsDataHex8::_area[] = {
@@ -164,22 +164,22 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,-7.4, // 6
- -9.6,-5.6,-7.6, // 7
- -9.8,-5.8,-7.8, // 8
- -9.0,-5.0,-7.0, // 9
+ -9.4,-5.4,+7.4, // 6
+ -9.6,-5.6,+7.6, // 7
+ -9.8,-5.8,+7.8, // 8
+ -9.0,-5.0,+7.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,+7.4, // 14
- +9.6,+5.6,+7.6, // 15
- +9.8,+5.8,+7.8, // 16
- +9.0,+5.0,+7.0, // 17
-  0.8+1.82575588523+0.91680340354, 0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
-  0.9+1.69682900001+0.62551316338, 0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
-  1.0+1.51709826228+0.34903622931, 1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
-  1.1+1.29378670385+0.12855127934, 1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
+ +9.4,+5.4,-7.4, // 14
+ +9.6,+5.6,-7.6, // 15
+ +9.8,+5.8,-7.8, // 16
+ +9.0,+5.0,-7.0, // 17
+  0.8+1.82575588523+0.91680340354, -0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
+  0.9+1.69682900001+0.62551316338, -0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
+  1.0+1.51709826228+0.34903622931, -1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
+  1.1+1.29378670385+0.12855127934, -1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
 };
 
 const double pylith::faults::CohesiveKinSrcsDataHex8::_residualIncr[] = {
@@ -187,22 +187,22 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,-7.4, // 6
- -9.6,-5.6,-7.6, // 7
- -9.8,-5.8,-7.8, // 8
- -9.0,-5.0,-7.0, // 9
+ -9.4,-5.4,+7.4, // 6
+ -9.6,-5.6,+7.6, // 7
+ -9.8,-5.8,+7.8, // 8
+ -9.0,-5.0,+7.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,+7.4, // 14
- +9.6,+5.6,+7.6, // 15
- +9.8,+5.8,+7.8, // 16
- +9.0,+5.0,+7.0, // 17
-  0.8+1.82575588523+0.91680340354, 0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
-  0.9+1.69682900001+0.62551316338, 0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
-  1.0+1.51709826228+0.34903622931, 1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
-  1.1+1.29378670385+0.12855127934, 1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
+ +9.4,+5.4,-7.4, // 14
+ +9.6,+5.6,-7.6, // 15
+ +9.8,+5.8,-7.8, // 16
+ +9.0,+5.0,-7.0, // 17
+  0.8+1.82575588523+0.91680340354, -0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
+  0.9+1.69682900001+0.62551316338, -0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
+  1.0+1.51709826228+0.34903622931, -1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
+  1.1+1.29378670385+0.12855127934, -1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
 };
 
 const double pylith::faults::CohesiveKinSrcsDataHex8::_jacobian[] = {
@@ -502,7 +502,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 18
+  0.0,-1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -563,7 +563,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 19
+  0.0,-1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -624,7 +624,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 20
+  0.0,-1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -685,7 +685,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 21
+  0.0,-1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 10x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -982,7 +982,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 18
+  0.0,+1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1043,7 +1043,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 19
+  0.0,+1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16x
@@ -1104,7 +1104,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 20
+  0.0,+1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 17x
   0.0, 0.0, 0.0,
@@ -1165,7 +1165,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 21
+  0.0,+1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 18x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1190,7 +1190,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 6
+  0.0, 0.0,-1.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1198,7 +1198,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 14
+  0.0, 0.0,+1.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1251,7 +1251,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 7
+  0.0, 0.0,-1.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1259,7 +1259,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 15
+  0.0, 0.0,+1.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1312,7 +1312,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 8
+  0.0, 0.0,-1.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1320,7 +1320,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 16
+  0.0, 0.0,+1.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1373,7 +1373,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 9
+  0.0, 0.0,-1.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1381,7 +1381,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 17
+  0.0, 0.0,+1.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -226,7 +226,7 @@
         Cpz = 0.0
         Cqx = 0.0
         Cqy = 0.0
-        Cqz = -1.0
+        Cqz = +1.0
         Crx = -1.0
         Cry = 0.0
         Crz = 0.0
@@ -239,13 +239,13 @@
             
             # vertex i: 6
             Aix = 1.5; Aiy = 1.5; Aiz = 1.5
-            rix = -9.4; riy = -5.4; riz = -7.4
+            rix = -9.4; riy = -5.4; riz = +7.4
             uix = 4.5; uiy = 6.5; uiz = 8.5
             duix = 3.5; duiy = 4.5; duiz = 5.5
             
             # vertex j: 14
             Ajx = 1.3; Ajy = 1.3; Ajz = 1.3
-            rjx = +9.4; rjy = +5.4; rjz = +7.4
+            rjx = +9.4; rjy = +5.4; rjz = -7.4
             ujx = 5.3; ujy = 7.3; ujz = 9.3
             dujx = 3.3; dujy = 4.3; dujz = 5.3
             
@@ -257,13 +257,13 @@
             
             # vertex i: 7
             Aix = 1.6; Aiy = 1.6; Aiz = 1.6
-            rix = -9.6; riy = -5.6; riz = -7.6
+            rix = -9.6; riy = -5.6; riz = +7.6
             uix = 4.6; uiy = 6.6; uiz = 8.6
             duix = 3.6; duiy = 4.6; duiz = 5.6
             
             # vertex j: 15
             Ajx = 1.5; Ajy = 1.5; Ajz = 1.5
-            rjx = +9.6; rjy = +5.6; rjz = +7.6
+            rjx = +9.6; rjy = +5.6; rjz = -7.6
             ujx = 5.5; ujy = 7.5; ujz = 9.5
             dujx = 3.5; dujy = 4.5; dujz = 5.5
             
@@ -275,13 +275,13 @@
             
             # vertex i: 8
             Aix = 1.7; Aiy = 1.7; Aiz = 1.7
-            rix = -9.8; riy = -5.8; riz = -7.8
+            rix = -9.8; riy = -5.8; riz = +7.8
             uix = 4.7; uiy = 6.7; uiz = 8.7
             duix = 3.7; duiy = 4.7; duiz = 5.7
             
             # vertex j: 16
             Ajx = 1.7; Ajy = 1.7; Ajz = 1.7
-            rjx = +9.8; rjy = +5.8; rjz = +7.8
+            rjx = +9.8; rjy = +5.8; rjz = -7.8
             ujx = 5.7; ujy = 7.7; ujz = 9.7
             dujx = 3.7; dujy = 4.7; dujz = 5.7
             
@@ -293,13 +293,13 @@
             
             # vertex i: 9
             Aix = 1.8; Aiy = 1.8; Aiz = 1.8
-            rix = -9.0; riy = -5.0; riz = -7.0
+            rix = -9.0; riy = -5.0; riz = +7.0
             uix = 4.8; uiy = 6.8; uiz = 8.8
             duix = 3.8; duiy = 4.8; duiz = 5.8
             
             # vertex j: 17
             Ajx = 1.9; Ajy = 1.9; Ajz = 1.9
-            rjx = +9.0; rjy = +5.0; rjz = +7.0
+            rjx = +9.0; rjy = +5.0; rjz = -7.0
             ujx = 5.9; ujy = 7.9; ujz = 9.9
             dujx = 3.9; dujy = 4.9; dujz = 5.9
             

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1,6 +1,6 @@
 cell = "hex8"
 dim = "3d"
-testCase = "open"
+testCase = "slip"
 
 import numpy
 
@@ -516,7 +516,7 @@
     print "dlagrange1",dlagrange1
 
     D = numpy.array([[ 0, -1, 0,],
-                     [ 0, 0, -1,],
+                     [ 0, 0, +1,],
                      [ -1, 0, 0,],])
 
     Z = numpy.zeros([3,3])

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -28,7 +28,7 @@
 	TestRateStateAgeing.cc
 
 
-noinst_HEADERS = 
+noinst_HEADERS = \
 	TestFrictionModel.hh \
 	TestStaticFriction.hh \
 	TestSlipWeakening.hh \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -339,8 +339,7 @@
     fault.frictionModel(&friction);
     
     const double upDir[] = { 0.0, 0.0, 1.0 };
-    const double normalDir[] = { 1.0, 0.0, 0.0 };
-    fault.initialize(mesh, upDir, normalDir);
+    fault.initialize(mesh, upDir);
     const int vertex = 2;
 
     const double slip = 0.25;
@@ -789,8 +788,7 @@
   fault->frictionModel(friction);
   
   const double upDir[] = { 0.0, 0.0, 1.0 };
-  const double normalDir[] = { 1.0, 0.0, 0.0 };
-  fault->initialize(*mesh, upDir, normalDir);
+  fault->initialize(*mesh, upDir);
 } // _initialize
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc	2010-06-11 23:01:21 UTC (rev 16999)
@@ -1024,7 +1024,7 @@
 pylith::topology::TestFieldMesh::testSplitDefault(void)
 { // testSplitDefault
   const int spaceDim = _TestFieldMesh::cellDim;
-  const int numFibrations = spaceDim + 1;
+  const int numFibrations = spaceDim;
   const int nconstraints[4] = { 1, 2, 0, 1 };
   const int constraints[4] = {
     1,     // 0
@@ -1111,7 +1111,7 @@
 pylith::topology::TestFieldMesh::testCloneSectionSplit(void)
 { // testCloneSectionSplit
   const int spaceDim = _TestFieldMesh::cellDim;
-  const int numFibrations = spaceDim + 1;
+  const int numFibrations = spaceDim;
   const int nconstraints[4] = { 1, 2, 0, 1 };
   const int constraints[4] = {
     1,     // 0

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -25,6 +25,7 @@
 	TestConstRateSlipFn.py \
 	TestEqKinSrc.py \
 	TestFaultCohesiveKin.py \
+	TestFaultCohesiveDyn.py \
 	TestLiuCosSlipFn.py \
 	TestSingleRupture.py \
 	TestStepSlipFn.py \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -303,7 +303,6 @@
     fault.inventory.matId = 10
     fault.inventory.faultLabel = "fault"
     fault.inventory.upDir = [0, 0, 1]
-    fault.inventory.normalDir = [1, 0, 0]
     fault.inventory.faultQuadrature = quadrature
     fault.inventory.friction = friction
     fault._configure()

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py	2010-06-11 23:01:21 UTC (rev 16999)
@@ -331,7 +331,6 @@
     fault.inventory.matId = 10
     fault.inventory.faultLabel = "fault"
     fault.inventory.upDir = [0, 0, 1]
-    fault.inventory.normalDir = [1, 0, 0]
     fault.inventory.faultQuadrature = quadrature
     fault._configure()
     eqsrc = fault.eqsrcs.components()[0]

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/data/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/data/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/data/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -17,7 +17,8 @@
 	tri3_sliptime.spatialdb \
 	tri3_peakrate.spatialdb \
 	tri3_initialtractions.spatialdb \
-	tri3_staticfriction.spatialdb
+	tri3_staticfriction.spatialdb \
+	slipfn.timedb
 
 noinst_TMP =
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/Makefile.am	2010-06-11 21:39:01 UTC (rev 16998)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/Makefile.am	2010-06-11 23:01:21 UTC (rev 16999)
@@ -27,7 +27,9 @@
 	TestMeshQuadrature.py \
 	TestSubMeshQuadrature.py \
 	TestElasticityExplicit.py \
-	TestElasticityImplicit.py
+	TestElasticityImplicit.py \
+	TestElasticityExplicitLgDeform.py \
+	TestElasticityImplicitLgDeform.py
 
 
 # End of file 



More information about the CIG-COMMITS mailing list