[cig-commits] r18769 - in short/3D/PyLith/branches/multifields: . doc/releasenotes doc/userguide doc/userguide/benchmarks doc/userguide/boundaryconditions doc/userguide/cover doc/userguide/install doc/userguide/tutorials doc/userguide/tutorials/3dhex8 doc/userguide/tutorials/3dtet4 doc/userguide/tutorials/shearwave doc/userguide/tutorials/subduction doc/userguide/tutorials/twohex8 doc/userguide/tutorials/twoquad4 doc/userguide/tutorials/twotet4 doc/userguide/tutorials/twotet4-geoproj doc/userguide/tutorials/twotri3 examples/2d/subduction examples/3d/hex8 examples/3d/hex8/spatialdb examples/3d/tet4 examples/bar_shearwave/hex8 examples/bar_shearwave/quad4 examples/bar_shearwave/tet4 examples/bar_shearwave/tri3 examples/greensfns/hex8 examples/meshing/surface_nurbs/contours examples/meshing/surface_nurbs/dem examples/meshing/surface_nurbs/triangles examples/twocells/twohex8 examples/twocells/twoquad4 examples/twocells/twotet4 examples/twocells/twotet4-geoproj examples/twocells/twotri3 libsrc/pylith/faults libsrc/pylith/materials libsrc/pylith/meshio pylith/bc pylith/faults pylith/feassemble pylith/friction pylith/materials pylith/meshio tests/2d/faultstrip tests/refinefaulttip tests_auto/1d/line2 tests_auto/1d/line3 tests_auto/2d/quad4 tests_auto/2d/tri3 unittests/libtests/materials/data unittests/pytests/bc unittests/pytests/faults unittests/pytests/materials unittests/pytests/meshio

brad at geodynamics.org brad at geodynamics.org
Fri Jul 15 10:04:26 PDT 2011


Author: brad
Date: 2011-07-15 10:04:26 -0700 (Fri, 15 Jul 2011)
New Revision: 18769

Added:
   short/3D/PyLith/branches/multifields/doc/releasenotes/announce_v1.6.1.txt
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dhex8/surfload/
   short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/loadcycle.timedb
   short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/tractions_axial_pressure.spatialdb
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step18.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step19.cfg
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.py
Removed:
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designdata.py
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designprior.py
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/getcoords.py
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/lininvert.py
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/merge_greens.py
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/points2spatialdb.py
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem_taper.py
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/mktopo.jou
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/ulines.jou
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/vlines.jou
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.sh
   short/3D/PyLith/branches/multifields/tests/refinefaulttip/Makefile.in
Modified:
   short/3D/PyLith/branches/multifields/README
   short/3D/PyLith/branches/multifields/configure.ac
   short/3D/PyLith/branches/multifields/doc/userguide/benchmarks/benchmarks.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/boundaryconditions/boundaryconditions.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/cover/cover.pdf
   short/3D/PyLith/branches/multifields/doc/userguide/cover/cover.svg.gz
   short/3D/PyLith/branches/multifields/doc/userguide/cover/cover_small.jpg
   short/3D/PyLith/branches/multifields/doc/userguide/install/install.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/preface.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dhex8/3dhex8.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dtet4/3dtet4.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/hex8.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/quad4.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tet4.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tri3.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/subduction/subduction.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/tutorials.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twohex8/twohex8.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twoquad4/twoquad4.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4/twotet4.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotri3/twotri3.lyx
   short/3D/PyLith/branches/multifields/doc/userguide/userguide.lyx
   short/3D/PyLith/branches/multifields/examples/2d/subduction/geometry.jou
   short/3D/PyLith/branches/multifields/examples/2d/subduction/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/Makefile.am
   short/3D/PyLith/branches/multifields/examples/3d/hex8/README
   short/3D/PyLith/branches/multifields/examples/3d/hex8/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step03.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step06.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step07.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step08.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step09.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step10.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step11.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step12.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step13.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step14.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step15.cfg
   short/3D/PyLith/branches/multifields/examples/3d/hex8/step16.cfg
   short/3D/PyLith/branches/multifields/examples/3d/tet4/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/3d/tet4/step03.cfg
   short/3D/PyLith/branches/multifields/examples/3d/tet4/step04.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/hex8/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/kinematic.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/tet4/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/bar_shearwave/tri3/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/README
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/box_hex8_1000m.exo
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/geometry.jou
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/gfgen.py
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/initial-run.cfg
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/mesh_hex8_1000m.jou
   short/3D/PyLith/branches/multifields/examples/greensfns/hex8/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/README
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/cont2lines.cfg
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/Makefile.am
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/README
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.cfg
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.py
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/Makefile.am
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/README
   short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mksurface.jou
   short/3D/PyLith/branches/multifields/examples/twocells/twohex8/dislocation.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twohex8/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/axialtract.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/dislocation.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twotet4-geoproj/dislocation.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twotet4/dislocation.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twotet4/pylithapp.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twotri3/dislocation.cfg
   short/3D/PyLith/branches/multifields/examples/twocells/twotri3/pylithapp.cfg
   short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.hh
   short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveKin.cc
   short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveLagrange.cc
   short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc
   short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc
   short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
   short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/HDF5.cc
   short/3D/PyLith/branches/multifields/pylith/bc/BoundaryCondition.py
   short/3D/PyLith/branches/multifields/pylith/bc/DirichletBC.py
   short/3D/PyLith/branches/multifields/pylith/bc/ZeroDispDB.py
   short/3D/PyLith/branches/multifields/pylith/faults/Fault.py
   short/3D/PyLith/branches/multifields/pylith/feassemble/FIATLagrange.py
   short/3D/PyLith/branches/multifields/pylith/feassemble/FIATSimplex.py
   short/3D/PyLith/branches/multifields/pylith/friction/FrictionModel.py
   short/3D/PyLith/branches/multifields/pylith/materials/Material.py
   short/3D/PyLith/branches/multifields/pylith/meshio/DataWriterVTK.py
   short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOAscii.py
   short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOCubit.py
   short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOLagrit.py
   short/3D/PyLith/branches/multifields/pylith/meshio/OutputSolnSubset.py
   short/3D/PyLith/branches/multifields/setup.py
   short/3D/PyLith/branches/multifields/tests/2d/faultstrip/dynamic_slipweakening.cfg
   short/3D/PyLith/branches/multifields/tests/2d/faultstrip/pylithapp.cfg
   short/3D/PyLith/branches/multifields/tests_auto/1d/line2/dislocation.cfg
   short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensiondisp.cfg
   short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensionforce.cfg
   short/3D/PyLith/branches/multifields/tests_auto/1d/line2/lgdeformtranslation.cfg
   short/3D/PyLith/branches/multifields/tests_auto/1d/line3/axialextension.cfg
   short/3D/PyLith/branches/multifields/tests_auto/1d/line3/dislocation.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/axialdisp.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation2.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_compression.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_opening.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_sliding.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_stick.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformrigidbody.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformtraction.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/sheardisp.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_compression.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_opening.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_stick.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/axialdisp.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation2.cfg
   short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/sheardisp.cfg
   short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDep.py
   short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc
   short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDep.py
   short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc
   short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestDirichletBC.py
   short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestNeumann.py
   short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveDyn.py
   short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveKin.py
   short/3D/PyLith/branches/multifields/unittests/pytests/materials/TestElasticMaterial.py
   short/3D/PyLith/branches/multifields/unittests/pytests/meshio/TestOutputSolnSubset.py
Log:
Merge from trunk.

Modified: short/3D/PyLith/branches/multifields/README
===================================================================
--- short/3D/PyLith/branches/multifields/README	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/README	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,4 +1,4 @@
-We are pleased to announce release of PyLith version 1.6.0
+We are pleased to announce release of PyLith version 1.6.1
 
 Please submit bug reports via the World Wide Web at:
     http://geodynamics.org/roundup    
@@ -65,9 +65,67 @@
 MIGRATING FROM VERSION 1.5 TO 1.6
 ======================================================================
 
-No changes in parameters are required.
+No changes in parameters are required. Version 1.6.1 does require
+users to specify descriptive labels for spatial databases and friction
+models.
 
 ----------------------------------------------------------------------
+Version 1.6.1
+----------------------------------------------------------------------
+
+* Validation of user input
+
+  Added stricter requirements for descriptive labels of various
+  objects, including spatial databases and friction models. The
+  default labels are empty strings which do not result in useful error
+  messages; the user is now required to specify a non-empty string for
+  the labels. This makes errors related to spatial databases much
+  easier to diagnose.
+
+
+* Updates to manual
+
+  - Updated description of cell_info_fields for Neumann boundary
+    condition. The description had not been updated to reflect the
+    time-dependence introduced in version 1.4.
+
+  - Added steps 18 and 19 that discuss time-dependent Neumann boundary
+    conditions to examples/3d/hex8.
+
+
+* Bug fixes
+
+  - Fixed bug in writing rupture information to VTK and HDF5 files
+    when using multiple earthquake sources. Field names did not include
+    name of rupture. This caused loss of information in VTK output and
+    a corrupted Xdmf metadata file for HDF5 output.
+
+  - Fixed error in use of initial stress tensor with generalized Maxwell
+    models. The initial stress tensor was added to the current stress
+    tensor twice.
+
+  - Fixed two bugs in the fault friction implementation. One bug
+    pertained to accounting for roundoff errors and convergence
+    tolerances in computing the slip rate. Slip rates less than
+    1.0e-12 (nondimensionalized) are set to zero. The friction
+    implementation for quasi-static problems contained a bug that
+    resulted in slip extending over all of the fault rather than the
+    appropriate isolated patch.
+
+  - Cleaned up Green's function example (examples/greensfns/hex8) so
+    that it runs without errors. Eliminated extraneous processing.
+
+  - Cleaned up meshing examples (examples/meshing), including
+    elimination of superfluous pre-processing. 
+
+  - Adjusted absolute tolerances for PETSc solves in examples/3d/hex8
+    so that solver terminates with desired convergence criterion.
+
+  - Updated examples/2d/subduction/geometry.jou to use APREPRO
+    functions and variables to store id values.
+
+
+----------------------------------------------------------------------
 Version 1.6.0
 ----------------------------------------------------------------------
 

Modified: short/3D/PyLith/branches/multifields/configure.ac
===================================================================
--- short/3D/PyLith/branches/multifields/configure.ac	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/configure.ac	2011-07-15 17:04:26 UTC (rev 18769)
@@ -17,7 +17,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT([PyLith], [1.6.0], [cig-short at geodynamics.org])
+AC_INIT([PyLith], [1.6.1], [cig-short at geodynamics.org])
 AC_CONFIG_AUX_DIR([./aux-config])
 AC_CONFIG_HEADER([portinfo])
 AC_CONFIG_MACRO_DIR([m4])
@@ -82,12 +82,14 @@
 AC_ARG_ENABLE([hdf5],
     [AC_HELP_STRING([--enable-hdf5],
         [enable output to HDF5 files via PETSc @<:@default=no@:>@])],
-	[if test "$enableval" = yes; then
-          enable_hdf5=yes
-	  CPPFLAGS="-DENABLE_HDF5 $CPPFLAGS"; export CPPFLAGS
-	  PYLITH_SWIG_CPPFLAGS="-DENABLE_HDF5 $PYLITH_SWIG_CPPFLAGS"; export PYLITH_SWIG_CPPFLAGS
+	[if test "$enableval" = yes; 
+	  then enable_hdf5=yes
           else enable_hdf5=no; fi],
 	[enable_hdf5=yes])
+if test "$enable_hdf5" = "yes"; then
+  CPPFLAGS="-DENABLE_HDF5 $CPPFLAGS"; export CPPFLAGS
+  PYLITH_SWIG_CPPFLAGS="-DENABLE_HDF5 $PYLITH_SWIG_CPPFLAGS"; export PYLITH_SWIG_CPPFLAGS
+fi
 AM_CONDITIONAL([ENABLE_HDF5], [test "$enable_hdf5" = yes])
 
 # CUDA

Copied: short/3D/PyLith/branches/multifields/doc/releasenotes/announce_v1.6.1.txt (from rev 18768, short/3D/PyLith/trunk/doc/releasenotes/announce_v1.6.1.txt)
===================================================================
--- short/3D/PyLith/branches/multifields/doc/releasenotes/announce_v1.6.1.txt	                        (rev 0)
+++ short/3D/PyLith/branches/multifields/doc/releasenotes/announce_v1.6.1.txt	2011-07-15 17:04:26 UTC (rev 18769)
@@ -0,0 +1,82 @@
+Greetings,
+
+I am pleased to announce the release of PyLith 1.6.1, a finite-element
+code designed to solve dynamic elastic problems and quasi-static
+viscoelastic problems in tectonic deformation.
+
+This release fixes a few bugs in PyLith v1.6.0 and includes small
+updates to the manual and examples. We strongly recommend all users of
+previous PyLith releases switch to this latest release.
+
+  IMPORTANT NOTE:
+
+    Version 1.6.1 imposes stricter requirements on descriptive labels
+    for spatial databases and friction models. In previous versions
+    the default values (empty strings) were allowed. Users are now
+    required to specify these values as empty strings are no longer
+    allowed. This results in much better error messages.
+
+
+You can download the source code and binaries from
+
+    http://geodynamics.org/cig/software/packages/short/pylith
+
+Detailed installation instructions for the binary packages are in the
+User Manual with detailed building instructions for a few platforms
+in the INSTALL file bundled with the PyLith Installer utility.
+
+
+RELEASE NOTES
+
+* Validation of user input
+
+  Added stricter requirements for descriptive labels of various
+  objects, including spatial databases and friction models. The
+  default labels are empty strings which do not result in useful error
+  messages; the user is now required to specify a non-empty string for
+  the labels. This makes errors related to spatial databases much
+  easier to diagnose.
+
+
+* Updates to manual
+
+  - Updated description of cell_info_fields for Neumann boundary
+    condition. The description had not been updated to reflect the
+    time-dependence introduced in version 1.4.
+
+  - Added steps 18 and 19 that discuss time-dependent Neumann boundary
+    conditions to examples/3d/hex8.
+
+
+* Bug fixes
+
+  - Fixed bug in writing rupture information to VTK and HDF5 files
+    when using multiple earthquake sources. Field names did not include
+    name of rupture. This caused loss of information in VTK output and
+    a corrupted Xdmf metadata file for HDF5 output.
+
+  - Fixed error in use of initial stress tensor with generalized Maxwell
+    models. The initial stress tensor was added to the current stress
+    tensor twice.
+
+  - Fixed two bugs in the fault friction implementation. One bug
+    pertained to accounting for roundoff errors and convergence
+    tolerances in computing the slip rate. Slip rates less than
+    1.0e-12 (nondimensionalized) are set to zero. The friction
+    implementation for quasi-static problems contained a bug that
+    resulted in slip extending over all of the fault rather than the
+    appropriate isolated patch.
+
+  - Cleaned up Green's function example (examples/greensfns/hex8) so
+    that it runs without errors. Eliminated extraneous processing.
+
+  - Cleaned up meshing examples (examples/meshing), including
+    elimination of superfluous pre-processing. 
+
+  - Adjusted absolute tolerances for PETSc solves in examples/3d/hex8
+    so that solver terminates with desired convergence criterion.
+
+  - Updated examples/2d/subduction/geometry.jou to use APREPRO
+    functions and variables to store id values.
+
+

Modified: short/3D/PyLith/branches/multifields/doc/userguide/benchmarks/benchmarks.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/benchmarks/benchmarks.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/benchmarks/benchmarks.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -185,7 +185,7 @@
 The benchmark results indicate that triangular and tetrahedral cells generate
  less numerical noise than quadrilateral or hexahedral cells.
  TPV14-2D, TPV15-2D, TPV14, and TPV15 use the numerical damping via an artificia
-l viscosity available in PyLith v1.6.0 to these high-frequency oscillations.
+l viscosity available in PyLith v1.6 to these high-frequency oscillations.
  All of the other results without high frequency oscillations posted on
  the SCEC benchmarks web page employ damping via similar methods to reduce
  numerical artifacts.

Modified: short/3D/PyLith/branches/multifields/doc/userguide/boundaryconditions/boundaryconditions.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/boundaryconditions/boundaryconditions.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/boundaryconditions/boundaryconditions.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -991,11 +991,11 @@
 
 
 \begin_inset Tabular
-<lyxtabular version="3" rows="2" columns="3">
+<lyxtabular version="3" rows="6" columns="3">
 <features tabularvalignment="middle">
 <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="3in">
 <row>
 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
 \begin_inset Text
@@ -1032,7 +1032,7 @@
 </cell>
 </row>
 <row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
@@ -1043,13 +1043,137 @@
 
 \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
+initial-value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Initial traction field in global coordinate system
+\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" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+rate-of-change
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Rate of change of traction field in global coordinate system
+\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" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+rate-start-time
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Onset time in seconds for rate of change in traction field
+\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" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+change-in-value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Amplitude of change in traction field in global coordinate system
+\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" rightline="true" usebox="none">
 \begin_inset Text
 
 \begin_layout Plain Layout
 
 \family typewriter
-tractions
+change-start-time
 \end_layout
 
 \end_inset
@@ -1058,7 +1182,7 @@
 \begin_inset Text
 
 \begin_layout Plain Layout
-Traction vector in global coordinate system
+Onset time in seconds for the amplitude change in the traction field
 \end_layout
 
 \end_inset

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

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

Modified: short/3D/PyLith/branches/multifields/doc/userguide/cover/cover_small.jpg
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/multifields/doc/userguide/install/install.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/install/install.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/install/install.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -253,7 +253,7 @@
 
 \begin_deeper
 \begin_layout LyX-Code
-$ tar -xzf pylith-1.6.0-linux-i686.tgz
+$ tar -xzf pylith-1.6.1-linux-i686.tgz
 \end_layout
 
 \end_deeper
@@ -328,7 +328,7 @@
 
 \begin_deeper
 \begin_layout LyX-Code
-$ tar -xzf pylith-1.6.0-darwin-10.4.tgz
+$ tar -xzf pylith-1.6.1-darwin-10.4.tgz
 \end_layout
 
 \end_deeper

Modified: short/3D/PyLith/branches/multifields/doc/userguide/preface.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/preface.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/preface.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -190,7 +190,7 @@
  Strand, and C.
  Williams (2011), 
 \emph on
-PyLith User Manual, Version 1.6.0.
+PyLith User Manual, Version 1.6.1.
 
 \emph default
  Davis, CA: Computational Infrastructure of Geodynamics.

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dhex8/3dhex8.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dhex8/3dhex8.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dhex8/3dhex8.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -189,6 +189,15 @@
 Finite strain
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/3d/hex8
+\family default
+.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout
@@ -226,12 +235,7 @@
  set of PyLith features.
  We suggest users go through each of these sections in order as the complexity
  increases at each step.
- All of the files necessary to run the examples are contained in the directory
  
-\family typewriter
-examples/3d/hex8
-\family default
-.
 \end_layout
 
 \begin_layout Subsection
@@ -610,6 +614,13 @@
 \end_inset
 
 
+\begin_inset CommandInset include
+LatexCommand input
+filename "surfload/surfload.lyx"
+
+\end_inset
+
+
 \end_layout
 
 \end_body

Copied: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dhex8/surfload (from rev 18768, short/3D/PyLith/trunk/doc/userguide/tutorials/3dhex8/surfload)

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dtet4/3dtet4.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dtet4/3dtet4.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/3dtet4/3dtet4.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -133,6 +133,13 @@
 Global uniform mesh refinement
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/3d/tet4.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/hex8.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/hex8.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/hex8.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -99,6 +117,13 @@
 ZeroDispDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/bar_shearwave/hex8.
+\end_layout
+
 \begin_layout Subsection
 Mesh Generation
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/quad4.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/quad4.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/quad4.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -107,6 +125,13 @@
 UniformDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/bar_shearwave/quad4.
+\end_layout
+
 \begin_layout Subsection
 Mesh Generation
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tet4.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tet4.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tet4.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -99,6 +117,13 @@
 ZeroDispDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/bar_shearwave/tet4.
+\end_layout
+
 \begin_layout Subsection
 Mesh Generation
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tri3.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tri3.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/shearwave/tri3.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -99,6 +117,13 @@
 ZeroDispDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/bar_shearwave/tri3.
+\end_layout
+
 \begin_layout Subsection
 Mesh Generation
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/subduction/subduction.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/subduction/subduction.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/subduction/subduction.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -169,6 +169,13 @@
 \end_layout
 
 \end_deeper
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/2d/subduction.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout
@@ -673,7 +680,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-displacement_x*iHat + displacement_y*jHat + kHat
+displacement_x*iHat + displacement_y*jHat + 0*kHat
 \end_layout
 
 \begin_layout Standard

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/tutorials.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/tutorials.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/tutorials.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -164,6 +164,10 @@
  proper software packages installed.
 \end_layout
 
+\begin_layout Subsubsection
+Input Files
+\end_layout
+
 \begin_layout Standard
 The files needed to work through the tutorials are found in the 
 \family typewriter

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twohex8/twohex8.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twohex8/twohex8.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twohex8/twohex8.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -107,6 +125,13 @@
 Filtering of cell output fields
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/twocells/twohex8.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twoquad4/twoquad4.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twoquad4/twoquad4.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twoquad4/twoquad4.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -103,6 +121,13 @@
 ZeroDispDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/twocells/twoquad4.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4/twotet4.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4/twotet4.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4/twotet4.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -99,6 +117,13 @@
 ZeroDispDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/twocells/twotet4.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotet4-geoproj/twotet4-geoproj.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -103,6 +121,13 @@
 ZeroDispDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/twocells/twotet4-geoproj.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotri3/twotri3.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotri3/twotri3.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/tutorials/twotri3/twotri3.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,5 +1,5 @@
-#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
-\lyxformat 345
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
 \begin_document
 \begin_header
 \textclass book
@@ -7,18 +7,26 @@
 
 \end_preamble
 \use_default_options false
+\maintain_unincluded_children false
 \language english
+\language_package default
 \inputencoding latin1
+\fontencoding global
 \font_roman default
 \font_sans default
 \font_typewriter default
 \font_default_family default
+\use_non_tex_fonts false
 \font_sc false
 \font_osf false
 \font_sf_scale 100
 \font_tt_scale 100
 
 \graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
 \paperfontsize default
 \spacing single
 \use_hyperref false
@@ -26,9 +34,18 @@
 \use_geometry true
 \use_amsmath 0
 \use_esint 0
+\use_mhchem 1
+\use_mathdots 1
 \cite_engine basic
 \use_bibtopic false
+\use_indices false
 \paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
 \leftmargin 1in
 \topmargin 1in
 \rightmargin 1in
@@ -36,15 +53,16 @@
 \secnumdepth 3
 \tocdepth 3
 \paragraph_separation indent
-\defskip medskip
+\paragraph_indentation default
 \quotes_language english
 \papercolumns 1
 \papersides 1
 \paperpagestyle default
 \tracking_changes false
 \output_changes false
-\author "" 
-\author "" 
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
 \end_header
 
 \begin_body
@@ -99,6 +117,13 @@
 ZeroDispDB spatial database
 \end_layout
 
+\begin_layout Standard
+All of the files necessary to run the examples are contained in the directory
+ 
+\family typewriter
+examples/twocells/twotri3.
+\end_layout
+
 \begin_layout Subsection
 Overview
 \end_layout

Modified: short/3D/PyLith/branches/multifields/doc/userguide/userguide.lyx
===================================================================
--- short/3D/PyLith/branches/multifields/doc/userguide/userguide.lyx	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/doc/userguide/userguide.lyx	2011-07-15 17:04:26 UTC (rev 18769)
@@ -136,7 +136,7 @@
 \begin_inset Newline newline
 \end_inset
 
-Version 1.6.0
+Version 1.6.1
 \end_layout
 
 \begin_layout Date

Modified: short/3D/PyLith/branches/multifields/examples/2d/subduction/geometry.jou
===================================================================
--- short/3D/PyLith/branches/multifields/examples/2d/subduction/geometry.jou	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/2d/subduction/geometry.jou	2011-07-15 17:04:26 UTC (rev 18769)
@@ -47,12 +47,22 @@
 # ----------------------------------------------------------------------
 reset
 
+# Make sure undo is off to prevent errors in stitching volumes.
+undo off
+
 # ----------------------------------------------------------------------
 # Create points and curves defining materials
 # ----------------------------------------------------------------------
 
 # Topography/bathymetry (points from Google Earth)
+#
+# Save ids of important points in APREPRO variables as they are created
+# for use in other commands. We save the entity id in a variable rather
+# than name the vertex because this allows us to still use "idA to idB"
+# to select multiple vertices.
+#
 create vertex x { -600.0*km} y {-2000.0*m}
+#{idPtTopoW=Id("vertex")}
 create vertex x { -439.1*km} y { -300.0*m}
 create vertex x { -351.2*km} y { -800.0*m}
 create vertex x { -263.4*km} y {    0.0*m}
@@ -61,18 +71,21 @@
 create vertex x {    0.0*km} y { -400.0*m}
 create vertex x {   87.7*km} y {-3000.0*m}
 create vertex x {  165.6*km} y {-6000.0*m}
+#{idPtTrench=Id("vertex")}
 create vertex x {  263.4*km} y {-5400.0*m}
 create vertex x {  351.2*km} y {-5400.0*m}
 create vertex x {  439.1*km} y {-5400.0*m}
 create vertex x {  600.0*km} y {-5700.0*m}
+#{idPtTopoE=Id("vertex")}
 
-create curve spline vertex 1 to 13
-curve 1 name "topobathy"
+create curve spline vertex {idPtTopoW} to {idPtTopoE}
+curve {Id("curve")} name "topobathy"
 
 # Top of slab
 # Hayes and Wald, 2009
 # http://earthquake.usgs.gov/research/data/slab
 create vertex x { -600.0*km} y {-340.00*km}
+#{idPtSlabBot=Id("vertex")}
 create vertex x { -422.4*km} y {-240.00*km}
 create vertex x { -331.0*km} y {-180.00*km}
 create vertex x { -261.6*km} y {-140.00*km}
@@ -80,41 +93,48 @@
 create vertex x { -182.6*km} y {-100.00*km}
 create vertex x { -134.3*km} y {-80.00*km}
 create vertex x {  -74.6*km} y {-60.00*km}
+#{idPtSlabMoho=Id("vertex")}
 create vertex x {   -7.9*km} y {-40.00*km}
+#{idPtSlabTopMoho=Id("vertex")}
 create vertex x {   71.1*km} y {-20.00*km}
 create vertex x {  160.5*km} y {-7.50*km}
+#{idPtSlabTop=Id("vertex")}
 
-create curve spline vertex 14 to 24 9
-curve 2 name "slabtop"
+create curve spline vertex {idPtSlabBot} to {idPtSlabTop} {idPtTrench}
+curve {Id("curve")} name "slabtop"
 
 # Bottom of slab (translate top of slab to the east)
 #
 # Better approach would be to move points normal to slab to preserve
 # uniform thickness.
-vertex 14 to 21 copy move X {120.0*km}
+vertex {idPtSlabBot} to {idPtSlabMoho} copy move X {120.0*km}
+#{idPtSlabBotW=idPtSlabTop+1}
 create vertex x {  175.6*km} y {-40.0*km}
 create vertex x {  600.0*km} y {-40.0*km}
+#{idPtMohoE=Id("vertex")}
 
-create curve spline vertex 25 to 34
-curve 3 name "slabbot"
+create curve spline vertex {idPtSlabBotW} to {idPtMohoE}
+curve {Id("curve")} name "slabbot"
 
 # Top of mantle (uniform depth of 40 km)
 create vertex x { -600.0*km} y {-40.00*km}
+#{idPtMohoW=Id("vertex")}
 
-create curve spline vertex 35 22
-curve 4 name "conmoho"
+create curve spline vertex {idPtMohoW} {idPtSlabTopMoho}
+curve {Id("curve")} name "conmoho"
 
 # Lateral edges and bottom boundary
 create vertex x { 600.0*km} y {-340.00*km}
+#{idPtBotE=Id("vertex")}
 
-create curve spline vertex 1 35 14
-curve 5 name "edgewest"
+create curve spline vertex {idPtTopoW} {idPtMohoW} {idPtSlabBot}
+curve {Id("curve")} name "edgewest"
 
-create curve spline vertex 38 25 36
-curve 6 name "edgebot"
+create curve spline vertex {idPtSlabBot} {idPtSlabBotW} {idPtBotE}
+curve {Id("curve")} name "edgebot"
 
-create curve spline vertex 13 34 36
-curve 7 name "edgeeast"
+create curve spline vertex {idPtTopoE} {idPtMohoE} {idPtBotE}
+curve {Id("curve")} name "edgeeast"
 
 # ----------------------------------------------------------------------
 # Split curves to form bounding curves for each material
@@ -133,19 +153,19 @@
 # ----------------------------------------------------------------------
 # Continental crust
 create surface curve topobathy edgewest conmoho slabtop at A
-surface 1 name "concrust"
+surface {Id("surface")} name "concrust"
 
 # Continental mantle
 create surface curve conmoho edgewest at A slabtop
-surface 2 name "conmantle"
+surface {Id("surface")} name "conmantle"
 
 # Oceanic crust (slab)
 create surface curve topobathy at A slabtop at A slabtop edgebot slabbot edgeeast
-surface 3 name "oceancrust"
+surface {Id("surface")} name "oceancrust"
 
 # Oceanic mantle
 create surface curve slabbot edgebot at A edgeeast at A
-surface 4 name "oceanmantle"
+surface {Id("surface")} name "oceanmantle"
 
 # ----------------------------------------------------------------------
 # Imprint/merge
@@ -172,4 +192,3 @@
 split curve slabbot distance {250.0*km} from end
 
 # End of file
-

Modified: short/3D/PyLith/branches/multifields/examples/2d/subduction/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/2d/subduction/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/2d/subduction/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -71,6 +71,7 @@
 # The id corresponds to the block number from CUBIT.
 id = 1
 
+db_properties.label = Continental crust properties
 db_properties.iohandler.filename = mat_concrust.spatialdb
 
 # We are doing 2D quadrature for a triangle.
@@ -85,6 +86,7 @@
 # The id corresponds to the block number from CUBIT.
 id = 2
 
+db_properties.label = Continental mantle properties
 db_properties.iohandler.filename = mat_conmantle.spatialdb
 
 # We are doing 2D quadrature for a triangle.
@@ -99,6 +101,7 @@
 # The id corresponds to the block number from CUBIT.
 id = 3
 
+db_properties.label = Oceanic crust properties
 db_properties.iohandler.filename = mat_oceancrust.spatialdb
 
 # We are doing 2D quadrature for a triangle.
@@ -113,6 +116,7 @@
 # The id corresponds to the block number from CUBIT.
 id = 4
 
+db_properties.label = Oceanic mantle properties
 db_properties.iohandler.filename = mat_oceanmantle.spatialdb
 
 # We are doing 2D quadrature for a triangle.

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/Makefile.am
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/Makefile.am	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/Makefile.am	2011-07-15 17:04:26 UTC (rev 18769)
@@ -36,6 +36,8 @@
 	step15.cfg \
 	step16.cfg \
 	step17.cfg \
+	step18.cfg \
+	step19.cfg \
 	mesh/geometry.jou \
 	mesh/mesh_hex8_1000m.jou \
 	mesh/box_hex8_1000m.exo \
@@ -51,6 +53,8 @@
 	spatialdb/sliprate_creep.spatialdb \
 	spatialdb/sliptime.spatialdb \
 	spatialdb/tractions_axial_shear.spatialdb \
+	spatialdb/tractions_axial_pressure.spatialdb \
+	spatialdb/loadcycle.timedb \
 	spatialdb/powerlaw/powerlaw_gendb.cfg \
 	spatialdb/powerlaw/powerlaw_params.spatialdb \
 	spatialdb/powerlaw/powerlaw_points.txt \

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/README
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/README	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/README	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,4 +1,4 @@
-The examples in this directory form a step-by-step sequence of 17 problems,
+The examples in this directory form a step-by-step sequence of 19 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.
@@ -66,6 +66,8 @@
         Maxwell rheology (quasi-static)
 step17: Gravitational body forces + finite strain with generalized Maxwell
         rheology (quasi-static)
+step18: Axial traction surface load on top surface (static)
+step19: Time dependent axial traction surface load on top surface (quasi-static)
 
 ----------------------------------------
 mesh directory
@@ -142,6 +144,14 @@
   Spatial database defining axial and shear tractions for example
   step02.
 
+tractions_axial_pressure.spatialdb
+
+  Spatial database defining axial tractions for examples step18 and step19.
+
+loadcycle.timedb
+
+  Temporal database defining time variation of traction load for step19.
+
 powerlaw directory
 
   This directory contains files needed to generate power-law

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -53,6 +53,7 @@
 [pylithapp.timedependent.materials.upper_crust]
 label = Upper crust material
 id = 1
+db_properties.label = Properties for upper crust
 db_properties.iohandler.filename = spatialdb/mat_elastic.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 3
@@ -60,6 +61,7 @@
 [pylithapp.timedependent.materials.lower_crust]
 label = Lower crust material
 id = 2
+db_properties.label = Properties for lower crust
 db_properties.iohandler.filename = spatialdb/mat_elastic.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 3
@@ -77,7 +79,7 @@
 
 # Convergence parameters.
 ksp_rtol = 1.0e-8
-ksp_atol = 1.0e-12
+ksp_atol = 1.0e-20
 ksp_max_it = 100
 ksp_gmres_restart = 50
 
@@ -88,7 +90,7 @@
 
 # Nonlinear solver monitoring options.
 snes_rtol = 1.0e-8
-snes_atol = 1.0e-12
+snes_atol = 1.0e-18
 snes_max_it = 100
 snes_monitor = true
 snes_view = true

Copied: short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/loadcycle.timedb (from rev 18768, short/3D/PyLith/trunk/examples/3d/hex8/spatialdb/loadcycle.timedb)
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/loadcycle.timedb	                        (rev 0)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/loadcycle.timedb	2011-07-15 17:04:26 UTC (rev 18769)
@@ -0,0 +1,20 @@
+// -*- C++ -*- (tell Emacs to use C++ mode for syntax highlighting)
+//
+// This temporal database specifies the time history of loading. The
+// units are nondimensional corresponding to just a scaled version of
+// the spatial variation.
+//
+// The loading is piecewise linear with a linear increase to 1.0 and
+// then 1.5 followed by a symmetric decrease back to 0.0.
+//
+#TIME HISTORY ascii
+TimeHistory {
+  num-points = 6 // number of points in time history
+  time-units = year // units for time
+}
+  0.0  0.0
+100.0  1.0
+200.0  1.5
+300.0  1.0
+400.0  0.0
+999.9  0.0

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/mat_genmaxwell.spatialdb	2011-07-15 17:04:26 UTC (rev 18769)
@@ -39,4 +39,4 @@
 // (10) viscosity 1 (Pa-s)
 // (11) viscosity 2 (Pa-S)
 // (12) viscosity 3 (Pa-s)
-0.0  0.0  0.0   2500.0  3000.0  5291.502622129181  0.4  0.4  0.2  7.10046e18 7.10046e19 7.10046e20
+0.0  0.0  0.0   2500.0  3000.0  5291.502622129181  0.4  0.4  0.19999  7.10046e+18 7.10046e+19 7.10046e+20

Copied: short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/tractions_axial_pressure.spatialdb (from rev 18768, short/3D/PyLith/trunk/examples/3d/hex8/spatialdb/tractions_axial_pressure.spatialdb)
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/tractions_axial_pressure.spatialdb	                        (rev 0)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/spatialdb/tractions_axial_pressure.spatialdb	2011-07-15 17:04:26 UTC (rev 18769)
@@ -0,0 +1,37 @@
+// -*- C++ -*- (tell Emacs to use C++ mode for syntax highlighting)
+//
+// This spatial database specifies the distribution of the
+// tractions for Neumann boundary conditions associated
+// with a vertical surface load.
+//
+// The spatial distribution of the load is a value of 0.0 at the
+// corners of the domain and a negative vertical load of -10.0 MPa at
+// the center.
+//
+
+#SPATIAL.ascii 1
+SimpleDB {
+  num-values = 4
+  value-names =  traction-shear-horiz traction-shear-vert traction-normal change-start-time
+  value-units =  MPa MPa MPa year
+  num-locs = 5
+  data-dim = 2 // locations on a surface
+  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) T-shear-horiz (MPa)
+// (5) T-shear-vert (MPa)
+// (6) T-normal (MPa)
+// (7) Start time when used in time-dependent BC (year)
+-3.0  3.0  0.0    0.0  0.0    0.0  0.0
+ 3.0  3.0  0.0    0.0  0.0    0.0  0.0
+ 3.0 -3.0  0.0    0.0  0.0    0.0  0.0
+-3.0 -3.0  0.0    0.0  0.0    0.0  0.0
+ 0.0  0.0  0.0    0.0  0.0  -10.0  0.0

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step03.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step03.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step03.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -100,8 +100,10 @@
 
 # The slip time and final slip are defined in spatial databases.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Final slip
 slip.iohandler.filename = spatialdb/finalslip.spatialdb
 slip.query_type = linear
+slip_time.label  = Slip initiation time
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step06.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step06.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step06.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -141,23 +141,32 @@
 
 # Define slip and origin time for first rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.label = "Rupture one final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture one slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for second rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.label = "Rupture two final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture two slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for third rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.label = "Rupture three final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture three slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip rate and origin time for fault creep.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
+origin_time = 0.0*s
 slip_function = pylith.faults.ConstRateSlipFn
+slip_function.slip_rate.label = "Creep slip rate"
 slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.label = "Creep initiation time"
 slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Due to the complex time history used for the fault, a number of additional

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step07.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step07.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step07.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -155,23 +155,31 @@
 
 # Define slip and origin time for first rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.label = "Rupture one final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture one slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for second rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.label = "Rupture two final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture two slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for third rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.label = "Rupture three final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture three slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip rate and origin time for fault creep.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
 slip_function = pylith.faults.ConstRateSlipFn
+slip_function.slip_rate.label = "Creep slip rate"
 slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.label = "Creep initiation time"
 slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Due to the complex time history used for the fault, a number of additional

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step08.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step08.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step08.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -177,24 +177,32 @@
 
 # Define slip and origin time for first rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.label = "Rupture one final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture one slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for second rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.label = "Rupture two final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture two slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for third rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.label = "Rupture three final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture three slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip rate and origin time for fault creep.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
+origin_time = 0.0*s
 slip_function = pylith.faults.ConstRateSlipFn
-origin_time = 0.0*s
+slip_function.slip_rate.label = "Creep slip rate"
 slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.label = "Creep initiation time"
 slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # ----------------------------------------------------------------------
@@ -263,3 +271,12 @@
 # We again switch the writer to produce HDF5 output.
 writer = pylith.meshio.DataWriterHDF5Mesh
 writer.filename = output/step08-lower_crust.h5
+
+# ----------------------------------------------------------------------
+# PETSc
+# ----------------------------------------------------------------------
+[pylithapp.petsc]
+
+# Set smaller absolute linear convergence tolerance to help convergence of
+# nonlinear solution.
+ksp_atol = 1.0e-20

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step09.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step09.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step09.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -177,24 +177,32 @@
 
 # Define slip and origin time for first rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.label = "Rupture one final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture one slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for second rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.label = "Rupture two final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture two slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip and origin time for third rupture.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.label = "Rupture three final slip"
 slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.label = "Rupture three slip time"
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # Define slip rate and origin time for fault creep.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
+origin_time = 0.0*s
 slip_function = pylith.faults.ConstRateSlipFn
-origin_time = 0.0*s
+slip_function.slip_rate.label = "Creep slip rate"
 slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.label = "Creep initiation time"
 slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 # ----------------------------------------------------------------------
@@ -263,3 +271,12 @@
 # We again switch the writer to produce HDF5 output.
 writer = pylith.meshio.DataWriterHDF5Mesh
 writer.filename = output/step09-lower_crust.h5
+
+# ----------------------------------------------------------------------
+# PETSc
+# ----------------------------------------------------------------------
+[pylithapp.petsc]
+
+# Set smaller absolute linear convergence tolerance to help convergence of
+# nonlinear solution.
+ksp_atol = 1.0e-20

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step10.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step10.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step10.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -107,6 +107,7 @@
 
 # Use the static friction model.
 friction = pylith.friction.StaticFriction
+friction.label = Static friction
 
 # We must define the quadrature information for fault cells.
 # The fault cells are 2D (surface).

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step11.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step11.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step11.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -109,6 +109,7 @@
 
 # Use the static friction model.
 friction = pylith.friction.StaticFriction
+friction.label = Static friction
 
 # We must define the quadrature information for fault cells.
 # The fault cells are 2D (surface).

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step12.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step12.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step12.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -124,6 +124,7 @@
 
 # Use the static friction model.
 friction = pylith.friction.StaticFriction
+friction.label = Static friction
 
 # We must define the quadrature information for fault cells.
 # The fault cells are 2D (surface).
@@ -155,6 +156,10 @@
 #friction_ksp_view = true
 friction_ksp_converged_reason = true
 
+# Reduce convergence tolerances.
+ksp_rtol = 1.0e-12
+ksp_atol = 1.0e-15
+
 # ----------------------------------------------------------------------
 # output
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step13.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step13.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step13.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -120,6 +120,7 @@
 
 # Use the slip-weakening friction model.
 friction = pylith.friction.SlipWeakening
+friction.label = Slip weakening
 
 # We must define the quadrature information for fault cells.
 # The fault cells are 2D (surface).
@@ -155,6 +156,10 @@
 #friction_ksp_view = true
 friction_ksp_converged_reason = true
 
+# Reduce convergence tolerances.
+ksp_rtol = 1.0e-12
+ksp_atol = 1.0e-15
+
 # ----------------------------------------------------------------------
 # output
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step14.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step14.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step14.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -121,6 +121,7 @@
 
 # Use the rate-and-state aging friction model.
 friction = pylith.friction.RateStateAgeing
+friction.label = Rate and state
 
 # We must define the quadrature information for fault cells.
 # The fault cells are 2D (surface).
@@ -164,6 +165,14 @@
 #friction_ksp_view = true
 friction_ksp_converged_reason = true
 
+# Reduce convergence tolerances.
+ksp_rtol = 1.0e-13
+ksp_atol = 1.0e-15
+
+snes_rtol = 1.0e-12
+snes_atol = 1.0e-14
+
+
 # ----------------------------------------------------------------------
 # output
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step15.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step15.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step15.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -78,6 +78,7 @@
 # Properties are named in cell_info_fields and state variables are named in
 # cell_data_fields.
 [pylithapp.timedependent.materials.lower_crust]
+db_properties.label = Generalized Maxwell viscoelastic properties
 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]

Modified: short/3D/PyLith/branches/multifields/examples/3d/hex8/step16.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step16.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step16.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -90,11 +90,13 @@
 # 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.label = Initial stress in upper crust
 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.label = Initial stress in lower crust
 db_initial_stress.iohandler.filename = spatialdb/initial_stress.spatialdb
 db_initial_stress.query_type = linear
 

Copied: short/3D/PyLith/branches/multifields/examples/3d/hex8/step18.cfg (from rev 18768, short/3D/PyLith/trunk/examples/3d/hex8/step18.cfg)
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step18.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step18.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -0,0 +1,137 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a purely elastic static problem using Neumann (traction)
+# boundary conditions. We apply normal tractions to the top surface
+# and roller (fixed normal but free lateral motion) boundary
+# conditions on the lateral sides and bottom surfaces.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step18.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step18.cfg
+#
+# Output will be directed to directory output.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 6 boundary conditions (one for each side of the domain).
+bc = [x_pos,x_neg,y_pos,y_neg,z_neg,z_pos]
+
+[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
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, +y, -y, and -z faces of the box, and the Neumann boundary
+# conditions applied on the +z face of the box.
+#
+# We fix the x DOF on the +x and -x faces, the y DOF on the +y and -y
+# faces, and the z DOF on the bottom (-z) face. We use the ZeroDispDB
+# (default) since we want zero displacements.
+#
+# We apply axial tractions on the +z face.
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+label = face_xpos
+bc_dof = [0]
+db_initial.label = Dirichlet BC on +x
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+label = face_xneg
+bc_dof = [0]
+db_initial.label = Dirichlet BC on -x
+
+# +y face
+[pylithapp.timedependent.bc.y_pos]
+label = face_ypos
+bc_dof = [1]
+db_initial.label = Dirichlet BC on +y
+
+# -y face
+[pylithapp.timedependent.bc.y_neg]
+label = face_yneg
+bc_dof = [1]
+db_initial.label = Dirichlet BC on -y
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+label = face_zneg
+bc_dof = [2]
+db_initial.label = Dirichlet BC on -z
+
+# +z face -- change bc type to Neumann
+[pylithapp.timedependent.bc]
+z_pos = pylith.bc.Neumann
+
+[pylithapp.timedependent.bc.z_pos]
+label = face_zpos
+
+db_initial = spatialdata.spatialdb.SimpleDB
+db_initial.label = Neumann BC on +z
+db_initial.iohandler.filename = spatialdb/tractions_axial_pressure.spatialdb
+# Use linear interpolation
+db_initial.query_type = linear
+
+output.cell_info_fields = [initial-value]
+output.writer.filename = output/step18-traction.vtk
+output.cell_filter = pylith.meshio.CellFilterAvgSubMesh
+
+# We must specify quadrature information for the cell faces.
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+quadrature.cell.quad_order = 2
+
+# Because normal for +z surface is [0,0,1], the horizontal and
+# vertical shear directions are ambiguous. We provide a "fake" up
+# direction of [0,1,0] so that the horizontal shear direction ("up" x
+# normal) is [1,0,0] and the vertical shear direction (normal x horiz
+# shear dir) is [0,1,0].
+up_dir = [0,1,0]
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain.writer]
+filename = output/step18.vtk
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+label = face_zpos ; Name of nodeset for subdomain
+writer.filename = output/step18-groundsurf.vtk
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = output/step18-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 = output/step18-lower_crust.vtk

Copied: short/3D/PyLith/branches/multifields/examples/3d/hex8/step19.cfg (from rev 18768, short/3D/PyLith/trunk/examples/3d/hex8/step19.cfg)
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/hex8/step19.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/multifields/examples/3d/hex8/step19.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -0,0 +1,157 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a purely elastic quasi-static problem using time-dependent
+# Neumann (traction) boundary conditions. We apply normal tractions to
+# the top surface that increase and then decrease while applying
+# roller (fixed normal but free lateral motion) boundary conditions on
+# the lateral sides and bottom surfaces.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step19.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step19.cfg
+#
+# Output will be directed to directory output.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 6 boundary conditions (one for each side of the domain).
+bc = [x_pos,x_neg,y_pos,y_neg,z_neg,z_pos]
+
+[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 the total simulation time to 700 years, and set the time
+# step to 10 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 600.0*year
+dt = 20.0*year
+
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, +y, -y, and -z faces of the box, and the Neumann boundary
+# conditions applied on the +z face of the box.
+#
+# We fix the x DOF on the +x and -x faces, the y DOF on the +y and -y
+# faces, and the z DOF on the bottom (-z) face. We use the ZeroDispDB
+# (default) since we want zero displacements.
+#
+# We apply axial tractions on the +z face.
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+label = face_xpos
+bc_dof = [0]
+db_initial.label = Dirichlet BC on +x
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+label = face_xneg
+bc_dof = [0]
+db_initial.label = Dirichlet BC on -x
+
+# +y face
+[pylithapp.timedependent.bc.y_pos]
+label = face_ypos
+bc_dof = [1]
+db_initial.label = Dirichlet BC on +y
+
+# -y face
+[pylithapp.timedependent.bc.y_neg]
+label = face_yneg
+bc_dof = [1]
+db_initial.label = Dirichlet BC on -y
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+label = face_zneg
+bc_dof = [2]
+db_initial.label = Dirichlet BC on -z
+
+# +z face -- change bc type to Neumann
+[pylithapp.timedependent.bc]
+z_pos = pylith.bc.Neumann
+
+[pylithapp.timedependent.bc.z_pos]
+label = face_zpos
+
+db_change = spatialdata.spatialdb.SimpleDB
+db_change.label = Amplitude of Neumann BC on +z
+db_change.iohandler.filename = spatialdb/tractions_axial_pressure.spatialdb
+# Use linear interpolation
+db_change.query_type = linear
+
+th_change = spatialdata.spatialdb.TimeHistory
+th_change.label = Time history for Neumann BC on +z
+th_change.filename = spatialdb/loadcycle.timedb
+
+output.cell_info_fields = [change-in-value,change-start-time]
+output.writer.filename = output/step19-traction.vtk
+output.cell_filter = pylith.meshio.CellFilterAvgSubMesh
+
+# We must specify quadrature information for the cell faces.
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+quadrature.cell.quad_order = 2
+
+# Because normal for +z surface is [0,0,1], the horizontal and
+# vertical shear directions are ambiguous. We provide a "fake" up
+# direction of [0,1,0] so that the horizontal shear direction ("up" x
+# normal) is [1,0,0] and the vertical shear direction (normal x horiz
+# shear dir) is [0,1,0].
+up_dir = [0,1,0]
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain.writer]
+filename = output/step19.vtk
+time_constant = 1.0*year
+time_format = %04.0f
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+label = face_zpos ; Name of nodeset for subdomain
+writer.filename = output/step19-groundsurf.vtk
+writer.time_constant = 1.0*year
+writer.time_format = %04.0f
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = output/step19-upper_crust.vtk
+writer.time_constant = 1.0*year
+writer.time_format = %04.0f
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = output/step19-lower_crust.vtk
+writer.time_constant = 1.0*year
+writer.time_format = %04.0f

Modified: short/3D/PyLith/branches/multifields/examples/3d/tet4/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/tet4/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/tet4/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -70,6 +70,7 @@
 [pylithapp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = spatialdb/mat_elastic.spatialdb
 quadrature.cell = pylith.feassemble.FIATSimplex
 quadrature.cell.shape = tetrahedron
@@ -77,6 +78,7 @@
 [pylithapp.timedependent.materials.viscoelastic]
 label = Viscoelastic material
 id = 2
+db_properties.label = Viscoelastic properties
 db_properties.iohandler.filename = spatialdb/mat_viscoelastic.spatialdb
 quadrature.cell = pylith.feassemble.FIATSimplex
 quadrature.cell.shape = tetrahedron

Modified: short/3D/PyLith/branches/multifields/examples/3d/tet4/step03.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/tet4/step03.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/tet4/step03.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -70,7 +70,9 @@
 quadrature.cell.shape = triangle
 
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Final slip
 slip.iohandler.filename = spatialdb/finalslip.spatialdb
+slip_time.label = Slip time
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 

Modified: short/3D/PyLith/branches/multifields/examples/3d/tet4/step04.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/3d/tet4/step04.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/3d/tet4/step04.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -77,7 +77,9 @@
 quadrature.cell.shape = triangle
 
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Final slip
 slip.iohandler.filename = spatialdb/finalslip.spatialdb
+slip_time.label = Slip time
 slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
 
 

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/hex8/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/hex8/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -78,7 +78,7 @@
 
 [pylithapp.timedependent.formulation.time_step]
 total_time = 12.0*s
-dt = 0.05*s
+dt = 0.04*s
 
 # ----------------------------------------------------------------------
 # materials
@@ -92,6 +92,7 @@
 id = 1
 
 # Spatial database with physical properties for elastic material
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 # Set the basis functions and quadrature:
@@ -178,12 +179,15 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying the final slip.
+slip.label = Final slip
 slip.iohandler.filename = shearwave_slip.spatialdb
 
 # Database specifying rise time.
+rise_time.label = Rise time
 rise_time.iohandler.filename = shearwave_risetime.spatialdb
 
 # Database specifying time at which slip begins at each point.
+slip_time.label = Slip time
 slip_time.iohandler.filename = shearwave_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -33,6 +33,7 @@
 # Use rate- and state-friction with the ageing law for evolution of
 # the state variable.
 friction = pylith.friction.RateStateAgeing
+friction.label = Rate and state
 
 # Set the friction model parameters.
 #  reference coefficient of friction: 0.6

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -32,6 +32,7 @@
 
 # Use slip-weakening friction
 friction = pylith.friction.SlipWeakening
+friction.label = Slip weakening
 
 # Set the slip-weakening friction model parameters.
 #  static coefficient of friction: 0.6

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -30,6 +30,7 @@
 
 # Use static friction
 friction = pylith.friction.StaticFriction
+friction.label = Static friction
 
 # Set the static friction model parameters.
 #  static coefficient of friction: 0.6

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/kinematic.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/kinematic.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/kinematic.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -57,12 +57,15 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying the final slip.
+slip.label = Final slip
 slip.iohandler.filename = kinematic_slip.spatialdb
 
 # Database specifying rise_time.
+rise_time.label = Rise time
 rise_time.iohandler.filename = kinematic_risetime.spatialdb
 
 # Database specifying time at which slip begins at each point.
+slip_time.label = Slip initiation time
 slip_time.iohandler.filename = kinematic_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/quad4/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -84,6 +84,7 @@
 id = 1
 
 # Spatial database with physical properties for elastic material
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 # Set the basis functions and quadrature:

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/tet4/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/tet4/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/tet4/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -99,6 +99,7 @@
 id = 1
 
 # Spatial database with physical properties for elastic material
+db_properties.label = Elastic properties for +x material
 db_properties.iohandler.filename = matprops.spatialdb
 
 # Set the basis functions and quadrature:
@@ -116,6 +117,7 @@
 id = 2
 
 # Spatial database with physical properties for elastic material
+db_properties.label = Elastic properties for -x material
 db_properties.iohandler.filename = matprops.spatialdb
 
 # Set the basis functions and quadrature:
@@ -200,12 +202,15 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying the final slip.
+slip.label = Final slip
 slip.iohandler.filename = shearwave_slip.spatialdb
 
 # Database specifying rise time.
+rise_time.label = Rise time
 rise_time.iohandler.filename = shearwave_risetime.spatialdb
 
 # Database specifying time at which slip begins at each point.
+slip_time.label = Slip time
 slip_time.iohandler.filename = shearwave_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/bar_shearwave/tri3/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/bar_shearwave/tri3/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/bar_shearwave/tri3/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -96,6 +96,7 @@
 id = 1
 
 # Spatial database with physical properties for elastic material
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 # Set the basis functions and quadrature:
@@ -182,12 +183,15 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying the final slip.
+slip.label = Final slip
 slip.iohandler.filename = shearwave_slip.spatialdb
 
 # Database specifying rise time.
+rise_time.label = Rise time
 rise_time.iohandler.filename = shearwave_risetime.spatialdb
 
 # Database specifying time at which slip begins at each point.
+slip_time.label = Slip time
 slip_time.iohandler.filename = shearwave_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/README
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/README	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/README	2011-07-15 17:04:26 UTC (rev 18769)
@@ -37,16 +37,21 @@
 gfimpulses directory that show what the applied fault slip was for each
 time step. In the gfresponses directory you will have all of the resulting
 displacements on the ground surface. The time step number for each of these
-files indicates the impulse number to which they correspond.
+files indicates the impulse number to which they correspond. There will also
+be a metadata file that defines the location and fault orientation for each
+applied impulse.
 
-This method is not very sophisticated, and the results have not been
-tested, but it may provide a simple method for generating Green's functions
-without too much work. The main shortcoming at present is that the
-responses are only generated at the specified set of vertices. If users
-need responses at locations that do not correspond to one of the vertices in
-the mesh, they will need to do their own interpolation. In the future, we
-plan to provide a method that will allow PyLith to do the interpolation.
-Also, this method does not provide a method for determining the seismic
-moment for each impulse. To do this it would be necessary to integrate over
-the fault elements attached to each impulse vertex. At present, it is
-probably easiest to do this by postprocessing using the fault mesh.
+This method is not very sophisticated, but it provides a simple method for
+generating Green's functions without too much work. The main shortcoming at
+present is that the responses are only generated at the specified set of
+vertices. If users need responses at locations that do not correspond to one
+of the vertices in the mesh, they will need to do their own interpolation.
+In the future, we plan to provide a method that will allow PyLith to do the
+interpolation.  Also, this method does not provide a method for determining
+the seismic moment for each impulse. To do this it would be necessary to
+integrate over the fault elements attached to each impulse vertex. At
+present, it is probably easiest to do this by postprocessing using the
+fault mesh. Note that for problems involving variations in elastic
+properties, you will require property information for the entire mesh to
+compute seismic moment. Seismic potency may be a better quantity to use,
+since it is independent of material properties.

Modified: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/box_hex8_1000m.exo
===================================================================
(Binary files differ)

Deleted: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designdata.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designdata.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designdata.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,534 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-# Brad T. Aagaard, U.S. Geological Survey
-# Charles A. Williams, GNS Science
-# Matthew G. Knepley, University of Chicago
-#
-# This code was developed as part of the Computational Infrastructure
-# for Geodynamics (http://geodynamics.org).
-#
-# Copyright (c) 2010-2011 University of California, Davis
-#
-# See COPYING for license information.
-#
-# ----------------------------------------------------------------------
-#
-
-## @file greensfns/designdata
-
-## @brief Python application to create the data arrays necessary for an
-## inversion, given data information and Green's function information.
-## The matrices produced are the data matrix (vector), the data covariance
-## matrix (diagonal at present), and the data design matrix (numObservations
-## by numParameters).
-
-import math
-import numpy
-import sys
-from pyre.units.length import km
-from pyre.units.length import m
-
-from pyre.applications.Script import Script as Application
-
-class DesignData(Application):
-  """
-  Python application to create the data arrays necessary for an
-  inversion, given data information and Green's function information.
-  The matrices produced are the data matrix (vector), the data covariance
-  matrix (diagonal at present), and the data design matrix (numObservations
-  by numParameters).
-  """
-  
-  class Inventory(Application.Inventory):
-    """
-    Python object for managing DesignData facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing DesignData facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b data_input_file File containing data, locations, and stdDev.
-    ## @li \b gf_metadata_file File containing metadata for GF.
-    ## @li \b gfresponses_ll_root Root name for left-lateral GF responses.
-    ## @li \b gfresponses_ud_root Root name for updip GF responses.
-    ## @li \b data_output_file Output file for scaled data.
-    ## @li \b cov_output_file Output file for scaled covariance matrix.
-    ## @li \b design_output_file Output file for data design matrix.
-    ## @li \b metadata_output_file Output file describing impulses and responses.
-    ## @li \b data_scale Scaling factor to apply to data and stdDev.
-    ## @li \b search_radius Radius from data center to search for GF.
-    ## @li \b impulse_number_width Width of impulse number field.
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-    dataInputFile = pyre.inventory.str("data_input_file",
-                                       default="data.txt")
-    dataInputFile.meta['tip'] = "File containing data, locations, and stdDev."
-
-    gfMetadataFile = pyre.inventory.str("gf_metadata_file",
-                                        default="gf_metadata.txt")
-    gfMetadataFile.meta['tip'] = "Name of file describing GF impulses."
-
-    gfResponsesLlRoot = pyre.inventory.str("gfresponses_ll_root",
-                                           default="gfresponse_ll.vtk")
-    gfResponsesLlRoot.meta['tip'] = "Root name for left-lateral GF responses."
-
-    gfResponsesUdRoot = pyre.inventory.str("gfresponses_ud_root",
-                                           default="gfresponse_ud.vtk")
-    gfResponsesUdRoot.meta['tip'] = "Root name for updip GF responses."
-
-    dataOutputFile = pyre.inventory.str("data_output_file",
-                                        default="data_vals.txt")
-    dataOutputFile.meta['tip'] = "Output file for scaled data."
-
-    covOutputFile = pyre.inventory.str("cov_output_file",
-                                       default="data_cov.txt")
-    covOutputFile.meta['tip'] = "Output file for scaled covriance matrix."
-
-    designOutputFile = pyre.inventory.str("design_output_file",
-                                          default="data_design.txt")
-    designOutputFile.meta['tip'] = "Output file for data design matrix."
-
-    metadataOutputFile = pyre.inventory.str("metadata_output_file",
-                                            default="data_metadata.txt")
-    metadataOutputFile.meta['tip'] = "Output file containing data metadata."
-
-    dataScale = pyre.inventory.float("data_scale", default=1.0)
-    dataScale.meta['tip'] = "Scaling factor to apply to data and stdDev."
-
-    searchRadius = pyre.inventory.dimensional("search_radius", default=100.0*km)
-    searchRadius.meta['tip'] = "Radius from data center to search for GF."
-
-    impulseNumberWidth = pyre.inventory.int("impulse_number_width", default=5)
-    impulseNumberWidth.meta['tip'] = "Width of impulse number field."
-
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="designdata"):
-    Application.__init__(self, name)
-
-    self.numTotalImpulses = 0
-    self.numUsedImpulses = 0
-    self.numDataPoints = 0
-    self.designRows = 0
-    self.designColumns = 0
-    self.numCells = 0
-    self.numVertices = 0
-    self.distanceScale = 0.0
-
-    self.usedImpulses = []
-    self.usedImpulsesLl = []
-    self.usedImpulsesUd = []
-    self.interpIndices = []
-    self.dataNames = []
-    self.dataCoords = None
-    self.dataVals = None
-    self.dataCov = None
-    self.dataCenter = None
-    self.design = None
-    self.interpFuncs = None
-    self.vertexCoords = None
-    self.cellConnect = None
-
-    return
-
-
-  def main(self):
-    # import pdb
-    # pdb.set_trace()
-    self._readData()
-    self._readMetadata()
-    self._findImpulses()
-    self._createInterp()
-    self._writeMetadata()
-    self._makeDesign()
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Setup members using inventory.
-    """
-    Application._configure(self)
-    # import pdb
-    # pdb.set_trace()
-
-    # File info.
-    self.dataInputFile = self.inventory.dataInputFile
-    self.gfMetadataFile = self.inventory.gfMetadataFile
-    self.gfResponsesLlRoot = self.inventory.gfResponsesLlRoot
-    self.gfResponsesUdRoot = self.inventory.gfResponsesUdRoot
-    self.dataOutputFile = self.inventory.dataOutputFile
-    self.covOutputFile = self.inventory.covOutputFile
-    self.designOutputFile = self.inventory.designOutputFile
-    self.metadataOutputFile = self.inventory.metadataOutputFile
-
-    # Data information
-    self.dataScale = self.inventory.dataScale
-
-    # Impulse information
-    self.searchRadius = self.inventory.searchRadius.value
-    self.impulseNumberWidth = self.inventory.impulseNumberWidth
-
-    return
-      
-
-  def _readData(self):
-    """
-    Function to read data, coordinates, and standard deviations.
-    """
-    f = open(self.dataInputFile, 'r')
-    lines = f.readlines()
-    self.numDataPoints = len(lines) - 1
-    self.designRows = 3 * self.numDataPoints
-    coords = []
-    data = []
-    cov = []
-    for line in range(1,self.numDataPoints + 1):
-      lineSplit = lines[line].split()
-      east = float(lineSplit[2])
-      north = float(lineSplit[1])
-      self.dataNames.append(lineSplit[0])
-      coords.append([east, north])
-      vE = self.dataScale * float(lineSplit[5])
-      vN = self.dataScale * float(lineSplit[6])
-      vU = self.dataScale * float(lineSplit[7])
-      data.append(vE)
-      data.append(vN)
-      data.append(vU)
-      sigE = self.dataScale * float(lineSplit[8])
-      sigN = self.dataScale * float(lineSplit[9])
-      sigU = self.dataScale * float(lineSplit[10])
-      cov.append(sigE*sigE)
-      cov.append(sigN*sigN)
-      cov.append(sigU*sigU)
-
-    f.close()
-
-    print "Number of data points: %i" % self.numDataPoints
-    print "Number of rows in design matrix: %i" % self.designRows
-    sys.stdout.flush()
-    self.dataVals = numpy.array(data, dtype=numpy.float64)
-    self.dataCov = numpy.array(cov, dtype=numpy.float64)
-    numpy.savetxt(self.dataOutputFile, self.dataVals)
-    numpy.savetxt(self.covOutputFile, self.dataCov)
-    self.dataCoords = numpy.array(coords, dtype=numpy.float64)
-    self.dataCenter = numpy.mean(self.dataCoords, axis=0).reshape((1, 2))
-
-    return
-
-
-  def _readMetadata(self):
-    """
-    Function to read metadata.
-    """
-    self.metadata = numpy.loadtxt(self.gfMetadataFile, dtype=numpy.float64,
-                                         skiprows=1)
-    self.numTotalImpulses = self.metadata.shape[0]
-
-    print "Total number of impulses:  %i" % self.numTotalImpulses
-    sys.stdout.flush()
-
-    return
-
-
-  def _findImpulses(self):
-    """
-    Function to find impulses that lie within a given radius of the data center.
-    """
-    import scipy.spatial.distance
-    
-    impulseCoords = self.metadata[:,1:3]
-    distance = scipy.spatial.distance.cdist(impulseCoords, self.dataCenter,
-                                            'euclidean')
-
-    for impulse in range(self.numTotalImpulses):
-      if (distance[impulse] < self.searchRadius):
-        self.usedImpulses.append(impulse)
-        llFilename = self._getFilename(self.gfResponsesLlRoot, impulse)
-        udFilename = self._getFilename(self.gfResponsesUdRoot, impulse)
-        self.usedImpulsesLl.append(llFilename)
-        self.usedImpulsesUd.append(udFilename)
-
-    self.numUsedImpulses = len(self.usedImpulses)
-    self.designColumns = 2 * self.numUsedImpulses
-    print "Number of impulse locations used:  %i" % self.numUsedImpulses
-    print "Number of columns in design matrix:  %i" % self.designColumns
-    sys.stdout.flush()
-    return
-
-      
-  def _getFilename(self, fileRoot, impulse):
-    """
-    Function to create a filename given the root filename and the impulse
-    number.
-    """
-    impulseNum = int(impulse)
-    impulseString = repr(impulseNum).rjust(self.impulseNumberWidth, '0')
-    filename = fileRoot + "_t" + impulseString + ".vtk"
-
-    return filename
-
-
-  def _createInterp(self):
-    """
-    Function to find cell containing an observation point and create the
-    corresponding interpolation functions.
-    """
-    from enthought.mayavi.sources.vtk_file_reader import VTKFileReader
-    from enthought.tvtk.api import tvtk
-
-    # First read a VTK file to get geometry info
-    reader = VTKFileReader()
-    filename = self.usedImpulsesLl[0]
-    reader.initialize(filename)
-    data = reader.outputs[0]
-
-    # Get cell and vertex info.
-    cellVtk = data.get_cells()
-    self.numCells = cellVtk.number_of_cells
-    cellArray = cellVtk.to_array()
-    self.vertexCoords = data._get_points().to_array()
-    (self.numVertices, spaceDim) = self.vertexCoords.shape
-    cellMatrix = cellArray.reshape(self.numCells,4)
-    self.cellConnect = cellMatrix[:,1:4]
-
-    meshRange = numpy.ptp(self.vertexCoords, axis=0)
-    self.distanceScale = 0.1 * numpy.amax(meshRange)
-
-    # Find cells enclosing each observation point.
-    self.interpIndices = self._findCells()
-
-    # Compute interpolation functions for each cell/observation point.
-    self._computeInterp()
-
-    return
-
-
-  def _computeInterp(self):
-    """
-    Function to compute interpolation functions for a point lying in a
-    triangular cell.
-    """
-    interpList = []
-    for point in range(self.numDataPoints):
-      cellNum = self.interpIndices[point]
-      cellCoords = self.vertexCoords[self.cellConnect[cellNum,:],0:2]
-      pointCoords = self.dataCoords[point,:]
-      x1 = cellCoords[0,0]
-      x2 = cellCoords[1,0]
-      x3 = cellCoords[2,0]
-      y1 = cellCoords[0,1]
-      y2 = cellCoords[1,1]
-      y3 = cellCoords[2,1]
-      x = pointCoords[0]
-      y = pointCoords[1]
-      denom = x1 * (y3 - y2) + x2 * (y1 - y3) + x3 * (y2 - y1)
-      l1 = x * (y3 - y2) + x2 * (y - y3) + x3 * (y2 - y)
-      l2 = -(x * (y3 - y1) + x1 * (y - y3) + x3 * (y1 - y))
-      l3 = x * (y2 - y1) + x1 * (y - y2) + x2 * (y1 - y)
-      interpList.append([l1/denom, l2/denom, l3/denom])
-
-    self.interpFuncs = numpy.array(interpList, dtype=numpy.float64)
-
-    return
-
-
-  def _findCells(self):
-    """
-    Function to find triangles enclosing a set of points.
-    Brute force method for now.
-    """
-
-    indices = []
-    for point in range(self.numDataPoints):
-      pointCoords = self.dataCoords[point,:]
-      cellFound = False
-      for cell in range(self.numCells):
-        cellCoords = self.vertexCoords[self.cellConnect[cell,:],0:2]
-        inTriangle = self._inTriangle(pointCoords, cellCoords)
-        if (inTriangle):
-          indices.append(cell)
-          cellFound = True
-          break
-
-      if (not cellFound):
-        msg = 'Unable to find surrounding cell for data point # %i' % point
-        raise ValueError(msg)
-
-    return indices
-
-
-  def _inTriangle(self, pointCoords, cellCoords):
-    """
-    Function to determine whether a point lies within a triangular cell.
-    """
-
-    v2 = pointCoords - cellCoords[0,:]
-
-    if (math.sqrt(numpy.dot(v2, v2)) > self.distanceScale):
-      return False
-
-    v0 = cellCoords[2,:] - cellCoords[0,:]
-    v1 = cellCoords[1,:] - cellCoords[0,:]
-
-    dot00 = numpy.dot(v0, v0)
-    dot01 = numpy.dot(v0, v1)
-    dot02 = numpy.dot(v0, v2)
-    dot11 = numpy.dot(v1, v1)
-    dot12 = numpy.dot(v1, v2)
-
-    invDenom = 1.0/(dot00 * dot11 - dot01 * dot01)
-    u = (dot11 * dot02 - dot01 * dot12) * invDenom
-    v = (dot00 * dot12 - dot01 * dot02) * invDenom
-
-    return ((u > 0.0) and (v > 0.0) and (u + v < 1.0))
-  
-    
-  def _makeDesign(self):
-    """
-    Function to create design matrix and write it to a file.
-    """
-    # Compute coefficients for each impulse/response pair.
-    impulseList = []
-    impulseTypes = [self.usedImpulsesLl, self.usedImpulsesUd]
-    for impulseType in range(2):
-      filelist = impulseTypes[impulseType]
-      for impulse in range(self.numUsedImpulses):
-        print 'Working on impulse # %i (%i)' % \
-          (impulse, self.usedImpulses[impulse])
-        sys.stdout.flush()
-        impulseCoeffs = self._getCoeffs(filelist[impulse])
-        impulseList.append(impulseCoeffs)
-    self.design = numpy.transpose(numpy.array(impulseList, dtype=numpy.float64))
-    numpy.savetxt(self.designOutputFile, self.design)
-
-    return
-    
-      
-  def _getCoeffs(self, vtkFile):
-    """
-    Function to compute all the coefficients from a particular impulse.
-    """
-    from enthought.mayavi.sources.vtk_file_reader import VTKFileReader
-    from enthought.tvtk.api import tvtk
-
-    # Read VTK file
-    reader = VTKFileReader()
-    reader.initialize(vtkFile)
-    data = reader.outputs[0]
-
-    # Get computed displacements
-    vertData = data._get_point_data()
-    numVertDataArrays = vertData._get_number_of_arrays()
-    displArray = None
-    for arrayNum in range(numVertDataArrays):
-      arrayName = vertData.get_array_name(arrayNum)
-      if (arrayName == 'displacement'):
-        displArray = vertData.get_array(arrayNum).to_array()
-        break
-
-    responseVals = []
-    for dataPoint in range(self.numDataPoints):
-      u, v, w = self._computeDispl(dataPoint, displArray)
-      responseVals.append(u)
-      responseVals.append(v)
-      responseVals.append(w)
-
-    return responseVals
-
-
-  def _computeDispl(self, dataPoint, displArray):
-    """
-    Function to interpolate displacements to a given data point.
-    """
-
-    u = 0.0
-    v = 0.0
-    w = 0.0
-    cellNum = self.interpIndices[dataPoint]
-    for vertex in range(3):
-      vertNum = self.cellConnect[cellNum, vertex]
-      u += self.interpFuncs[dataPoint, vertex] * displArray[vertNum, 0]
-      v += self.interpFuncs[dataPoint, vertex] * displArray[vertNum, 1]
-      w += self.interpFuncs[dataPoint, vertex] * displArray[vertNum, 2]
-
-    return (u, v, w)
-  
-    
-  def _writeMetadata(self):
-    """
-    Function to write metadata describing impulses (columns) and data (rows).
-    """
-    f = open(self.metadataOutputFile, 'w')
-    newLine = '\n'
-    tab = '\t'
-    
-    # Write data information.
-    dataDescr = 'Information for rows (data points), %i rows total\n' % self.designRows
-    f.write(dataDescr)
-    dataHead = 'Row #' + tab + 'Site-name' + tab + 'Component' + tab + \
-      'X-coord' + tab + 'Y-coord' + newLine
-    f.write(dataHead)
-    components = ['X', 'Y', 'Z']
-    dataFormat = '%i' + tab + '%s' + tab + '%s' + tab + '%e' + tab + '%e' + \
-      newLine
-
-
-    rowNum = 0
-    for dataPoint in range(self.numDataPoints):
-      coords = self.dataCoords[dataPoint, :]
-      name = self.dataNames[dataPoint]
-      for component in range(3):
-        outLine = dataFormat % (rowNum, name, components[component],
-                                coords[0], coords[1])
-        f.write(outLine)
-        rowNum += 1
-    
-    # Write impulse information.
-    impulseDescr = newLine + newLine + \
-                   'Information for columns (impulses), %i columns total\n' % self.designColumns
-    f.write(impulseDescr)
-    impulseHead = 'Column #' + tab + 'Impulse type' + tab + 'X-coord' + tab + \
-                  'Y-coord' + tab + 'Z-coord' + tab + \
-                  'Normal-X' + tab + 'Normal-Y' + tab + 'Normal-Z' + tab + \
-                  'Strike-X' + tab + 'Strike-Y' + tab + 'Strike-Z' + tab + \
-                  'Dip-X' + tab + 'Dip-Y' + tab + 'Dip-Z' + newLine
-    f.write(impulseHead)
-    impulseTypes = ['ll', 'ud']
-
-    colNum = 0
-    metadataOut = 12 * (tab + '%e')
-    outFormat = '%i' + tab + '%s' + metadataOut + newLine
-    for impulseType in range(2):
-      impulseText = impulseTypes[impulseType]
-      for impulse in self.usedImpulses:
-        metadata = self.metadata[impulse, 1:13]
-        outLine = outFormat % (colNum, impulseText,
-                               metadata[0], metadata[1], metadata[2],
-                               metadata[3], metadata[4], metadata[5],
-                               metadata[6], metadata[7], metadata[8],
-                               metadata[9], metadata[10], metadata[11])
-        f.write(outLine)
-        colNum += 1
-
-    f.close()
-
-    return
-  
-
-# ----------------------------------------------------------------------
-if __name__ == '__main__':
-  app = DesignData()
-  app.run()
-
-# End of file

Deleted: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designprior.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designprior.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/designprior.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,228 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file greensfns/designprior
-
-## @brief Python application to create the a priori arrays necessary for an
-## inversion, given the impulse locations, the a priori values, and the
-## desired correlation length.
-## The matrices produced are the a priori data matrix (vector) and the a priori
-## covariance matrix. The a priori design matrix is assumed to be an identity
-## matrix with dimensions corresponding to the number of parameters.
-
-import math
-import numpy
-import sys
-from pyre.units.length import km
-from pyre.units.length import m
-
-from pyre.applications.Script import Script as Application
-
-class DesignPrior(Application):
-  """
-  Python application to create the a priori arrays necessary for an
-  inversion, given the impulse locations, the a priori values, and the
-  desired correlation length.
-  The matrices produced are the a priori data matrix (vector) and the a priori
-  covariance matrix. The a priori design matrix is assumed to be an identity
-  matrix with dimensions corresponding to the number of parameters.
-  """
-  
-  class Inventory(Application.Inventory):
-    """
-    Python object for managing DesignPrior facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing DesignPrior facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b metadata_input_file File containing metadata for the inversion.
-    ## @li \b data_output_file File containing a priori parameter values.
-    ## @li \b cov_output_file Output file for a priori covariance matrix.
-    ## @li \b correlation_length Correlation length for covariance.
-    ## @li \b std_dev Standard deviation to use for covariance.
-    ## @li \b apriori_value A priori parameter values (all set to this value).
-    ## @li \b diagonal_frac Additional fraction to add to covariance diagonal.
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-    metadataInputFile = pyre.inventory.str("metadata_input_file",
-                                           default="metadata.txt")
-    metadataInputFile.meta['tip'] = "File containing inversion metadata."
-
-    dataOutputFile = pyre.inventory.str("data_output_file",
-                                        default="data_vals.txt")
-    dataOutputFile.meta['tip'] = "Output file with a priori parameter values."
-
-    covOutputFile = pyre.inventory.str("cov_output_file",
-                                       default="data_cov.txt")
-    covOutputFile.meta['tip'] = "Output file for a priori covriance matrix."
-
-    correlationLength = pyre.inventory.dimensional("correlation_length",
-                                                   default=10.0*km)
-    correlationLength.meta['tip'] = "Correlation length for covariance."
-
-    stdDev = pyre.inventory.dimensional("std_dev", default=1.0*m)
-    stdDev.meta['tip'] = "Standard deviation for covariance."
-
-    aprioriValue = pyre.inventory.dimensional("apriori_value", default=0.0*m)
-    aprioriValue.meta['tip'] = "A priori parameter values."
-
-    diagonalFrac = pyre.inventory.float("diagonal_frac", default=0.1)
-    diagonalFrac.meta['tip'] = "Additional fraction to add to covariance diagonal."
-
-    minCovar = pyre.inventory.float("min_covar", default=1.0e-5)
-    minCovar.meta['tip'] = "Covariance values less than this are set to zero."
-
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="designprior"):
-    Application.__init__(self, name)
-
-    self.numParameters = 0
-
-    self.impulseCoords = None
-
-    return
-
-
-  def main(self):
-    # import pdb
-    # pdb.set_trace()
-    self._readMetadata()
-    self._makeCovar()
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Setup members using inventory.
-    """
-    Application._configure(self)
-    # import pdb
-    # pdb.set_trace()
-
-    # File info.
-    self.metadataInputFile = self.inventory.metadataInputFile
-    self.dataOutputFile = self.inventory.dataOutputFile
-    self.covOutputFile = self.inventory.covOutputFile
-
-    # Parameters
-    self.correlationLength = self.inventory.correlationLength.value
-    self.stdDev = self.inventory.stdDev.value
-    self.aprioriValue = self.inventory.aprioriValue.value
-    self.diagonalFrac = self.inventory.diagonalFrac
-    self.minCovar = self.inventory.minCovar
-
-    return
-      
-
-  def _readMetadata(self):
-    """
-    Function to read information describing parameters and write parameter
-    values.
-    """
-    # Get impulse information.
-    f = open(self.metadataInputFile, 'r')
-    lines = f.readlines()
-    coords = []
-    impulseData = False
-    for line in lines:
-      if impulseData:
-        lineSplit = line.split()
-        impulseCoord = [float(lineSplit[2]), float(lineSplit[3]),
-                        float(lineSplit[4])]
-        coords.append(impulseCoord)
-        self.numParameters += 1
-      testFind = line.find('Column')
-      if testFind > -1:
-        impulseData = True
-
-    f.close()
-    self.impulseCoords = numpy.array(coords, dtype=numpy.float64)
-
-    print "Number of parameters: %i" % self.numParameters
-
-    # Write a priori parameter values.
-    parameterVals = self.aprioriValue * numpy.ones(self.numParameters)
-    numpy.savetxt(self.dataOutputFile, parameterVals)
-
-    return
-
-
-  def _distanceFunc(self, distance):
-    """
-    Function to compute autocorrelation based on distance.
-    """
-    distanceArg = -0.5 * (distance * distance)/\
-                  (self.correlationLength * self.correlationLength)
-    covariance = self.stdDev * self.stdDev * math.exp(distanceArg)
-    return covariance
-
-  
-  def _makeCovar(self):
-    """
-    Function to create a priori covariance matrix for a given correlation
-    length.
-    """
-    import scipy.spatial.distance
-    import scipy.stats.mstats
-
-    # Compute distances between all points.
-    # Temporary kludge because the prior approach correlated different types
-    # of impulses with each other.
-    impulseHalf = self.impulseCoords[0:self.numParameters/2,:]
-    distance = scipy.spatial.distance.cdist(impulseHalf,
-                                            impulseHalf, 'euclidean')
-
-    # Compute covariance.
-    multiplier = -0.5/(self.correlationLength * self.correlationLength)
-    distanceArg = multiplier * distance * distance
-    # distanceFunc = numpy.vectorize(self._distanceFunc)
-    # aprioriCovar = distanceFunc(distance)
-    covarMult = self.stdDev * self.stdDev
-    aprioriCovarHalf = covarMult * numpy.exp(distanceArg)
-    aprioriCovarEmpty = numpy.zeros_like(aprioriCovarHalf)
-
-    # Delete all entries below threshold.
-    aprioriCovarHalfThresh = scipy.stats.mstats.threshold(
-      aprioriCovarHalf, threshmin=self.minCovar)
-
-    # Join together different pieces.
-    aprioriCovarTop = numpy.hstack((aprioriCovarHalfThresh, aprioriCovarEmpty))
-    aprioriCovarBot = numpy.hstack((aprioriCovarEmpty, aprioriCovarHalfThresh))
-    aprioriCovar = numpy.vstack((aprioriCovarTop, aprioriCovarBot))
-
-    # Add additional amount to diagonal.
-    covarDiagAdd = self.diagonalFrac * numpy.diag(aprioriCovar)
-    diagIndices = numpy.arange(self.numParameters)
-    aprioriCovar[diagIndices, diagIndices] += covarDiagAdd
-
-    # Write covariance to file.
-    numpy.savetxt(self.covOutputFile, aprioriCovar)
-
-    return
-  
-
-# ----------------------------------------------------------------------
-if __name__ == '__main__':
-  app = DesignPrior()
-  app.run()
-
-# End of file

Modified: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/geometry.jou
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/geometry.jou	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/geometry.jou	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,12 +1,3 @@
-## /tools/common/cubit-10.2/bin/clarox
-## Cubit Version 10.2
-## Cubit Build 24
-## Revised 12/15/2006 16:09:40 MST
-## Running 06/18/2007 10:26:50 AM
-## Command Options:
-## -warning = On
-## -information = On
-
 # ----------------------------------------------------------------------
 # Create block
 # ----------------------------------------------------------------------
@@ -45,3 +36,4 @@
 # ----------------------------------------------------------------------
 imprint all with volume all
 merge all
+delete body 2 3

Deleted: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/getcoords.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/getcoords.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/getcoords.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,134 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file greensfns/getcoords
-
-## @brief Python application to get the coordinates for a set of vertex
-## ID's and output them to a file. This is a very simple code that expects
-## coordinates and ID's obtained using ncdump on the Exodus file.
-
-import math
-import numpy
-import os
-import re
-import glob
-from pyre.units.time import s
-from pyre.units.length import m
-
-from pyre.applications.Script import Script as Application
-
-class GetCoords(Application):
-  """
-  Python application to get the coordinates for a set of vertex
-  ID's and output them to a file. This is a very simple code that expects
-  coordinates and ID's obtained using ncdump on the Exodus file.
-  """
-  
-  class Inventory(Application.Inventory):
-    """
-    Python object for managing GetCoords facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing GetCoords facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b coord_file  Name of file containing vertex coordinates.
-    ## @li \b id_file  Name of file containing vertex ID's.
-    ## @li \b output_file Name of output file with requested coordinates.
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-    coordFile = pyre.inventory.str("coord_file", default="mesh.coords")
-    coordFile.meta['tip'] = "Name of file containing vertex coordinates."
-
-    idFile = pyre.inventory.str("id_file", default="mesh.ids")
-    idFile.meta['tip'] = "Name of file containing vertex ID's."
-
-    outputFile = pyre.inventory.str("output_file", default="mesh.ids")
-    outputFile.meta['tip'] = "Name of output file with requested coordinates."
-
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="getcoords"):
-    Application.__init__(self, name)
-
-    self.numIds = 0
-    self.idList = []
-
-    return
-
-
-  def main(self):
-    # import pdb
-    # pdb.set_trace()
-    self._readIds()
-    self._getCoords()
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Setup members using inventory.
-    """
-    Application._configure(self)
-    # import pdb
-    # pdb.set_trace()
-
-    # File info.
-    self.coordFile = self.inventory.coordFile
-    self.idFile = self.inventory.idFile
-    self.outputFile = self.inventory.outputFile
-
-    return
-      
-
-  def _readIds(self):
-    """
-    Function to read ID numbers.
-    """
-    f = open(self.idFile, 'r')
-    lines = f.readlines()
-    for line in lines:
-      for entry in line.split(', '):
-        idEntry = int(entry.rstrip(',\n')) - 1
-        self.idList.append(idEntry)
-
-    self.numIds = len(self.idList)
-    f.close()
-
-    return
-
-
-  def _getCoords(self):
-    """
-    Function to read a list of coordinates and output the coordinates if
-    they correspond to one of the requested ID's.
-    """
-    meshCoords = numpy.loadtxt(self.coordFile, dtype=numpy.float64)
-    outputCoords = meshCoords[self.idList,:]
-    numpy.savetxt(self.outputFile, outputCoords)
-
-    return
-  
-
-# ----------------------------------------------------------------------
-if __name__ == '__main__':
-  app = GetCoords()
-  app.run()
-
-# End of file

Modified: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/gfgen.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/gfgen.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/gfgen.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -10,7 +10,7 @@
 # ----------------------------------------------------------------------
 #
 
-## @file greensfns/gfgen
+## @file examples/greensfns/hex8/gfgen.py
 
 ## @brief Python application to set up impulses for generating Green's functions
 ## using PyLith. This application creates the necessary spatialdb files, a
@@ -21,7 +21,6 @@
 import numpy
 import os
 import re
-import glob
 from pyre.units.time import s
 from pyre.units.length import m
 
@@ -54,9 +53,6 @@
     ## @li \b impulse_type Type of impulse to be applied.
     ## @li \b impulse_value Amount of impulse to apply.
     ## @li \b impulse_number_width Width of impulse number field.
-    ## @li \b start_impulse_num Number assigned to first impulse.
-    ## @li \b exclude_file File containing vertex coordinates to exclude.
-    ## @li \b distance_tol Distance tolerance to determine coincident vertices.
     ##
     ## \b Facilities
     ## @li \b geometry  Geometry for output database.
@@ -73,10 +69,10 @@
 
     slipTimeSpatialdb = pyre.inventory.str("slip_time_spatialdb",
                                              default="sliptime.spatialdb")
-    slipTimeSpatialdb.meta['tip'] = "Name of spatialdb file containing slip times."
+    slipTimeSpatialdb.meta['tip'] = "Name of spatialdb file with slip times."
 
     metadataOutputFile = pyre.inventory.str("metadata_output_file",
-                                       default="impulse_description.txt")
+                                            default="impulse_metadata.txt")
     metadataOutputFile.meta['tip'] = "Name of output file containing metadata."
 
     configOutputFile = pyre.inventory.str("config_output_file",
@@ -95,15 +91,6 @@
     impulseNumberWidth = pyre.inventory.int("impulse_number_width", default=4)
     impulseNumberWidth.meta['tip'] = "Width of impulse number field."
 
-    startImpulseNum = pyre.inventory.int("start_impulse_num", default=0)
-    startImpulseNum.meta['tip'] = "Number assigned to first impulse."
-
-    excludeFile = pyre.inventory.str("exclude_file", default="")
-    excludeFile.meta['tip'] = "File containing vertex coordinates to exclude."
-
-    distanceTol = pyre.inventory.dimensional("distance_tol", default=0.1*m)
-    distanceTol.meta['tip'] = "Distance tolerance to determine coincident vertices."
-
     from spatialdata.spatialdb.generator.Geometry import Geometry
     geometry = pyre.inventory.facility("geometry", family="geometry",
                                        factory=Geometry)
@@ -116,14 +103,10 @@
     Application.__init__(self, name)
 
     self.numFaultVertices = 0
-    self.numExcludedVertices = 0
-    self.numIncludedVertices = 0
     self.numFaultCells = 0
     self.spaceDim = 0
     self.cellType = ""
 
-    self.excludeCoords = None
-    self.numExcludeCoords = 0
     self.faultVertices = None
     self.normalDir = None
     self.strikeDir = None
@@ -135,7 +118,6 @@
   def main(self):
     # import pdb
     # pdb.set_trace()
-    self._readExcludeInfo()
     self._readFaultInfo()
     self._makeSpatialdb()
     self._makeConfig()
@@ -164,31 +146,13 @@
     self.impulseType = self.inventory.impulseType
     self.impulseValue = self.inventory.impulseValue.value
     self.impulseNumberWidth = self.inventory.impulseNumberWidth
-    self.startImpulseNum = self.inventory.startImpulseNum
 
-    # Excluded vertex information
-    self.excludeFile = self.inventory.excludeFile
-    self.distanceTol = self.inventory.distanceTol.value
-
     # Spatialdb output facilities
     self.geometry = self.inventory.geometry
 
     return
       
 
-  def _readExcludeInfo(self):
-    """
-    Function to read coordinates of vertices to exclude from impulse list.
-    """
-    fileExists = os.path.isfile(self.excludeFile)
-    if fileExists:
-      self.excludeCoords = numpy.loadtxt(self.excludeFile, dtype=numpy.float64)
-      self.numExcludeCoords = self.excludeCoords.shape[0]
-    else:
-      print "No exclude file found!"
-
-    return
-      
   def _readFaultInfo(self):
     """
     Function to read fault information from VTK file.
@@ -204,9 +168,9 @@
     cellVtk = data.get_cells()
     self.numFaultCells = cellVtk.number_of_cells
     self.faultCellArray = cellVtk.to_array()
-    faultCoords = data._get_points().to_array()
+    self.faultVertices = data._get_points().to_array()
     self.cellType = data.get_cell_type(0)
-    (self.numFaultVertices, self.spaceDim) = faultCoords.shape
+    (self.numFaultVertices, self.spaceDim) = self.faultVertices.shape
 
     # Get vertex fields and extract normal vectors.
     vertData = data._get_point_data()
@@ -214,52 +178,12 @@
     for vertDataArray in range(numVertDataArrays):
       arrayName = vertData.get_array_name(vertDataArray)
       if (arrayName == "normal_dir"):
-        normalDir = vertData.get_array(vertDataArray).to_array()
+        self.normalDir = vertData.get_array(vertDataArray).to_array()
       elif (arrayName == "strike_dir"):
-        strikeDir = vertData.get_array(vertDataArray).to_array()
+        self.strikeDir = vertData.get_array(vertDataArray).to_array()
       elif (arrayName == "dip_dir"):
-        dipDir = vertData.get_array(vertDataArray).to_array()
+        self.dipDir = vertData.get_array(vertDataArray).to_array()
 
-    # Determine which vertices to exclude, if any.
-    includedVertices = []
-    excludedVertices = []
-    if self.numExcludeCoords == 0:
-      self.numIncludedVertices = self.numFaultVertices
-    else:
-      for vertex in range(self.numFaultVertices):
-        vertexCoords = faultCoords[vertex,:]
-        vertexMatch = False
-        for excludeVertex in range(self.numExcludeCoords):
-          excludeCoords = self.excludeCoords[excludeVertex,:]
-          diff = vertexCoords - excludeCoords
-          dist =numpy.linalg.norm(diff)
-          if (dist <= self.distanceTol):
-            vertexMatch = True
-            excludedVertices.append(vertex)
-            break
-
-        if not vertexMatch:
-          includedVertices.append(vertex)
-          
-      self.numIncludedVertices = len(includedVertices)
-      self.numExcludedVertices = len(excludedVertices)
-      # Reorder arrays so excluded vertices are at the end.
-      includedCoords = faultCoords[includedVertices,:]
-      excludedCoords = faultCoords[excludedVertices,:]
-      self.faultVertices = numpy.vstack((includedCoords, excludedCoords))
-      includedNormal = normalDir[includedVertices,:]
-      excludedNormal = normalDir[excludedVertices,:]
-      self.normalDir = numpy.vstack((includedNormal, excludedNormal))
-      includedStrike = strikeDir[includedVertices,:]
-      excludedStrike = strikeDir[excludedVertices,:]
-      self.strikeDir = numpy.vstack((includedStrike, excludedStrike))
-      includedDip = dipDir[includedVertices,:]
-      excludedDip = dipDir[excludedVertices,:]
-      self.dipDir = numpy.vstack((includedDip, excludedDip))
-    
-    print "Number of excluded vertices:  %i" % self.numExcludedVertices
-    print "Number of included vertices:  %i" % self.numIncludedVertices
-
     return
 
 
@@ -304,14 +228,11 @@
     if (suffIndex != -1):
       outputRoot = self.spatialdbOutputRoot[:suffIndex - 1]
 
-    # Set up coordinate system.
-    # cs = self.geometry.coordsys()
-    # cs.initialize()
+    # Set data dimension.
     dataDim = self.spaceDim - 1
     
     # Loop over impulses to generate and modify the appropriate entries.
-    impulse = self.startImpulseNum
-    for vertex in range(self.numIncludedVertices):
+    for impulse in range(self.numFaultVertices):
 
       # Set filename
       impulseNum = int(impulse)
@@ -322,12 +243,12 @@
       writer._configure()
 
       # Modify database values.
-      array1[vertex] = self.impulseValue
-      if (vertex > 0):
-        array1[vertex - 1] = -self.impulseValue
+      array1[impulse] = self.impulseValue
+      if (impulse > 0):
+        array1[impulse - 1] = -self.impulseValue
       
-      if (vertex > 1):
-	array1[vertex - 2] = 0.0
+      if (impulse > 1):
+	array1[impulse - 2] = 0.0
       info1 = {'name': self.impulseType,
                'units': "m",
                'data': array1.flatten()}
@@ -345,7 +266,6 @@
                 'values': [info1, info2, info3]}
 
       writer.write(data)
-      impulse += 1
 
     return
 
@@ -362,8 +282,8 @@
     f.write(topHeader)
     
     # Write time step information
-    time = float(self.startImpulseNum) + float(self.numIncludedVertices) - 1.0
-    totalTime = "total_time = " + repr(time) + "*year" + newLine
+    totalTime = "total_time = " + repr(float(self.numFaultVertices - 1)) + \
+                "*year" + newLine
     dt  = "dt = 1.0*year" + newLine
     divider = "# ----------------------------------------------------------" + \
               newLine
@@ -380,13 +300,11 @@
     comma = ","
 
     # Write eq_srcs list.
-    impulse = self.startImpulseNum
-    for vertex in range(self.numIncludedVertices):
+    for impulse in range(self.numFaultVertices):
       srcName = repr(impulse).rjust(self.impulseNumberWidth, '0')
       f.write(srcName)
-      if (vertex != self.numIncludedVertices - 1):
+      if (impulse != self.numFaultVertices - 1):
         f.write(comma)
-      impulse += 1
 
     srcEnd = "]" + newLine
     f.write(srcEnd)
@@ -401,19 +319,21 @@
     baseSlip = "slip_function.slip.iohandler.filename = " + slipRoot + "_i"
     slipTime = "slip_function.slip_time.iohandler.filename = " + \
                self.slipTimeSpatialdb + newLine
+    slipLabelRoot = "slip_function.slip.label = Slip for impulse "
+    slipTimeLabelRoot = "slip_function.slip_time.label = Slip time for impulse "
 
     # Write info for each eq_src.
-    impulse = self.startImpulseNum
-    for vertex in range(self.numIncludedVertices):
+    for impulse in range(self.numFaultVertices):
       f.write(newLine)
       srcName = repr(impulse).rjust(self.impulseNumberWidth, '0')
       originTime = float(impulse)
       originString = str(originTime) + "*year\n"
       f.write(baseHeader + srcName + "]\n")
       f.write(baseOrigin + originString)
+      f.write(slipLabelRoot + srcName + newLine)
+      f.write(slipTimeLabelRoot + srcName + newLine)
       f.write(baseSlip + srcName + ".spatialdb\n")
       f.write(slipTime)
-      impulse += 1
 
     f.close()
     
@@ -434,24 +354,22 @@
              "Strike-Z" + tab + "Dip-X" + tab + "Dip-Y" + tab + "Dip-Z" \
              + newLine
     f.write(header)
-    impulse = self.startImpulseNum
-    for vertex in range(self.numIncludedVertices):
-      x = str(self.faultVertices[vertex, 0]) + tab
-      y = str(self.faultVertices[vertex, 1]) + tab
-      z = str(self.faultVertices[vertex, 2]) + tab
-      xNorm = str(self.normalDir[vertex, 0]) + tab
-      yNorm = str(self.normalDir[vertex, 1]) + tab
-      zNorm = str(self.normalDir[vertex, 2]) + tab
-      xStrike = str(self.strikeDir[vertex, 0]) + tab
-      yStrike = str(self.strikeDir[vertex, 1]) + tab
-      zStrike = str(self.strikeDir[vertex, 2]) + tab
-      xDip = str(self.dipDir[vertex, 0]) + tab
-      yDip = str(self.dipDir[vertex, 1]) + tab
-      zDip = str(self.dipDir[vertex, 2]) + newLine
+    for impulse in range(self.numFaultVertices):
+      x = str(self.faultVertices[impulse, 0]) + tab
+      y = str(self.faultVertices[impulse, 1]) + tab
+      z = str(self.faultVertices[impulse, 2]) + tab
+      xNorm = str(self.normalDir[impulse, 0]) + tab
+      yNorm = str(self.normalDir[impulse, 1]) + tab
+      zNorm = str(self.normalDir[impulse, 2]) + tab
+      xStrike = str(self.strikeDir[impulse, 0]) + tab
+      yStrike = str(self.strikeDir[impulse, 1]) + tab
+      zStrike = str(self.strikeDir[impulse, 2]) + tab
+      xDip = str(self.dipDir[impulse, 0]) + tab
+      yDip = str(self.dipDir[impulse, 1]) + tab
+      zDip = str(self.dipDir[impulse, 2]) + newLine
       outLine = str(impulse) + tab + x + y + z + xNorm + yNorm + zNorm + \
                 xStrike + yStrike + zStrike + xDip + yDip + zDip
       f.write(outLine)
-      impulse += 1
 
     f.close()
 

Modified: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/initial-run.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/initial-run.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/initial-run.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -26,7 +26,9 @@
 
 # The slip time and final slip are defined in spatial databases.
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Applied slip for initial run
 slip.iohandler.filename = finalslip.spatialdb
+slip_time.label = Slip initiation time
 slip_time.iohandler.filename = sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Deleted: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/lininvert.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/lininvert.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/lininvert.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,318 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file greensfns/lininvert
-
-## @brief Python application to perform a linear inversion, given the necessary
-## matrices. In addition to performing the inversion, a number of (optional)
-## files are produced containing inversion information.
-
-import math
-import numpy
-import sys
-from pyre.units.length import km
-from pyre.units.length import m
-
-from pyre.applications.Script import Script as Application
-
-class LinInvert(Application):
-  """
-  Python application to perform a linear inversion, given the necessary
-  matrices. In addition to performing the inversion, a number of (optional)
-  files are produced containing inversion information.
-  """
-  
-  class Inventory(Application.Inventory):
-    """
-    Python object for managing LinInvert facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing LinInvert facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b data_input_file File containing data values.
-    ## @li \b apriori_input_file File containing a priori parameter values.
-    ## @li \b data_cov_input_file File containing data covariance.
-    ## @li \b apriori_cov_input_file File containing a priori covariance.
-    ## @li \b data_design_input_file File containing data design matrix.
-    ## @li \b info_output_file Output file with inversion summary.
-    ## @li \b data_output_file Output file containing data information.
-    ## @li \b param_output_file Output file containing parameter information.
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-    dataInputFile = pyre.inventory.str("data_input_file", default="data.txt")
-    dataInputFile.meta['tip'] = "File containing data values."
-
-    aprioriInputFile = pyre.inventory.str("apriori_input_file",
-                                        default="apriori_values.txt")
-    aprioriInputFile.meta['tip'] = "File containing a priori parameter values."
-
-    dataCovInputFile = pyre.inventory.str("data_cov_input_file",
-                                          default="data_cov.txt")
-    dataCovInputFile.meta['tip'] = "File containing data covariance."
-
-    aprioriCovInputFile = pyre.inventory.str("apriori_cov_input_file",
-                                             default="apriori_cov.txt")
-    aprioriCovInputFile.meta['tip'] = "File containing a priori covariance."
-
-    dataDesignInputFile = pyre.inventory.str("data_design_input_file",
-                                             default="data_design.txt")
-    dataDesignInputFile.meta['tip'] = "File containing data design matrix."
-
-    infoOutputFile = pyre.inventory.str("info_output_file",
-                                        default="inversion_info.txt")
-    infoOutputFile.meta['tip'] = "Output file with inversion summary."
-
-    dataOutputFile = pyre.inventory.str("data_output_file",
-                                        default="data_output.txt")
-    dataOutputFile.meta['tip'] = "Output file containing data information."
-
-    paramOutputFile = pyre.inventory.str("param_output_file",
-                                         default="param_output.txt")
-    paramOutputFile.meta['tip'] = "Output file with parameter information."
-
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="lininvert"):
-    Application.__init__(self, name)
-
-    self.numObs = 0
-    self.numParams = 0
-    self.chiSquare = 0.0
-
-    self.dataVals = None
-    self.dataCovVec = None
-    self.dataCov = None
-    self.dataDesign = None
-    self.aprioriVals = None
-    self.aprioriCov = None
-
-    self.hData = None
-    self.hApriori = None
-    self.resolData = None
-    self.solution = None
-    self.fData = None
-    self.predicted = None
-
-    return
-
-
-  def main(self):
-    # import pdb
-    # pdb.set_trace()
-    self._readMats()
-    self._invertData()
-    self._outputDataInfo()
-    self._outputParamInfo()
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Setup members using inventory.
-    """
-    Application._configure(self)
-    # import pdb
-    # pdb.set_trace()
-
-    # File info.
-    self.dataInputFile = self.inventory.dataInputFile
-    self.aprioriInputFile = self.inventory.aprioriInputFile
-    self.dataCovInputFile = self.inventory.dataCovInputFile
-    self.aprioriCovInputFile = self.inventory.aprioriCovInputFile
-    self.dataDesignInputFile = self.inventory.dataDesignInputFile
-    self.infoOutputFile = self.inventory.infoOutputFile
-    self.dataOutputFile = self.inventory.dataOutputFile
-    self.paramOutputFile = self.inventory.paramOutputFile
-
-    return
-      
-
-  def _readMats(self):
-    """
-    Function to read input matrices.
-    """
-    self.dataVals = numpy.loadtxt(self.dataInputFile, dtype=numpy.float64)
-    self.dataCovVec = numpy.loadtxt(self.dataCovInputFile, dtype=numpy.float64)
-    self.dataCov = numpy.diag(self.dataCovVec)
-    self.dataDesign = numpy.loadtxt(self.dataDesignInputFile,
-                                    dtype=numpy.float64)
-    self.aprioriVals = numpy.loadtxt(self.aprioriInputFile, dtype=numpy.float64)
-    self.aprioriCov = numpy.loadtxt(self.aprioriCovInputFile,
-                                    dtype=numpy.float64)
-
-    self.numObs = self.dataVals.shape[0]
-    self.numParams = self.aprioriVals.shape[0]
-    print "Number of observations: %i" % self.numObs
-    print "Number of parameters: %i" % self.numParams
-    sys.stdout.flush()
-
-    return
-
-
-  def _invertData(self):
-    """
-    Function to perform inversion.
-    """
-    # Perform inversion.
-    covAAdT = numpy.dot(self.aprioriCov, numpy.transpose(self.dataDesign))
-    sum1 = self.dataCov + numpy.dot(self.dataDesign, covAAdT)
-    self.hData = numpy.dot(covAAdT, numpy.linalg.inv(sum1))
-    self.resolData = numpy.dot(self.hData, self.dataDesign)
-    self.hApriori = numpy.identity(self.numParams, dtype=numpy.float64) - \
-                    self.resolData
-    self.solution = numpy.dot(self.hData, self.dataVals) + \
-                    numpy.dot(self.hApriori, self.aprioriVals)
-
-    return
-
-
-  def _outputDataInfo(self):
-    """
-    Function to write out general info and info related to data.
-    """
-
-    # Compute data-related quantities.
-    fDataVec = numpy.sqrt(1.0/self.dataCovVec)
-    fDataVecInv = 1.0/fDataVec
-    self.fData = numpy.diag(fDataVec)
-    self.predicted = numpy.dot(self.dataDesign, self.solution)
-    dataMisfit = self.dataVals - self.predicted
-    dataWeightMisfit = dataMisfit * fDataVec
-    self.chiSquare = numpy.sum(dataWeightMisfit * dataWeightMisfit)
-    dataMisfitNorm = numpy.linalg.norm(dataMisfit)
-    dataWeightMisfitNorm = numpy.linalg.norm(dataWeightMisfit)
-    
-    # Write out inversion info.
-    string1 = "\nNumber of observations:  %i\n" % self.numObs
-    string2 = "Number of parameters:  %i\n" % self.numParams
-    string3 = "Data Chi-square value:  %e\n" % self.chiSquare
-    string4 = "Data residual norm:  %e\n" % dataMisfitNorm
-    string5 = "Weighted data residual norm:  %e\n" % dataWeightMisfitNorm
-    print string1
-    print string2
-    print string3
-    print string4
-    print string5
-    sys.stdout.flush()
-    i = open(self.infoOutputFile, 'w')
-    i.write(string1)
-    i.write(string2)
-    i.write(string3)
-    i.write(string4)
-    i.write(string5)
-    i.close()
-                               
-    # Write out data info.
-    # Write out the following columns:
-    # 1.  Observed data value.
-    # 2.  Predicted data value.
-    # 3.  Standard deviation of observation.
-    # 4.  Observed minus predicted value.
-    # 5.  Observed minus predicted weighted by standard deviation.
-    
-    dataOut = numpy.transpose(numpy.vstack((self.dataVals, self.predicted,
-                                            fDataVecInv, dataMisfit,
-                                            dataWeightMisfit)))
-    numpy.savetxt(self.dataOutputFile, dataOut)
-
-    return
-
-
-  def _outputParamInfo(self):
-    """
-    Function to write out parameter-related information.
-    """
-    
-    # Compute a posteriori covariance contributions.
-    aposterioriCov = numpy.dot(self.hApriori, self.aprioriCov)
-    prod1 = numpy.dot(self.hData, self.dataCov)
-    aposterioriCovD = numpy.dot(prod1, numpy.transpose(self.hData))
-    aposterioriCovA = numpy.dot(aposterioriCov, numpy.transpose(self.hApriori))
-
-    # Compute eigenvalues and eigenvectors of a priori covariance.
-    aprioriEigVals, aprioriEigVecs = numpy.linalg.eigh(self.aprioriCov)
-    aprioriValsVec = numpy.sqrt(1.0/aprioriEigVals)
-    aprioriValsVecInv = 1.0/aprioriValsVec
-    aprioriValsDiag = numpy.diag(aprioriValsVec)
-    aprioriValsDiagInv = numpy.diag(aprioriValsVecInv)
-    fApriori = numpy.dot(aprioriValsDiag, numpy.transpose(aprioriEigVecs))
-    fAprioriInv = numpy.dot(aprioriEigVecs, aprioriValsDiagInv)
-    
-    # Compute a posteriori covariances in primed coordinate system.
-    prod2 = numpy.dot(fApriori, aposterioriCov)
-    aposterioriCovPrime = numpy.dot(prod2, numpy.transpose(fApriori))
-    hDataPrime = numpy.dot(aposterioriCovPrime,
-                           numpy.transpose(self.dataDesign))
-    prod3 = numpy.dot(self.dataDesign, fAprioriInv)
-    dataDesignPrime = numpy.dot(self.fData, prod3)
-
-    aposterioriCovDPrime = numpy.dot(hDataPrime, numpy.transpose(hDataPrime))
-    aposterioriCovAPrime = numpy.dot(aposterioriCovPrime,
-                                     numpy.transpose(aposterioriCovPrime))
-
-    resolDataPrime = numpy.dot(hDataPrime, dataDesignPrime)
-
-    # Columns to output:
-    # 1.  Predicted parameter value.
-    # 2.  A priori parameter value.
-    # 3.  A priori covariance.
-    # 4.  A posteriori covariance.
-    # 5.  A posteriori covariance (normalized).
-    # 6.  Contribution of data to a posteriori covariance.
-    # 7.  Contribution of data to a posteriori covariance (normalized).
-    # 8.  Contribution of a priori data to a posteriori covariance.
-    # 9.  Contribution of a priori data to a posteriori covariance (normalized).
-    # 10.  Contribution of data to resolution matrix.
-    # 11.  Contribution of data to resolution matrix (normalized).
-
-    # Extract necessary diagonals.
-    aprioriCovDiag = numpy.diag(self.aprioriCov)
-    aposterioriCovDiag = numpy.diag(aposterioriCov)
-    aposterioriCovPrimeDiag = numpy.diag(aposterioriCovPrime)
-    aposterioriCovDDiag = numpy.diag(aposterioriCovD)
-    aposterioriCovDPrimeDiag = numpy.diag(aposterioriCovDPrime)
-    aposterioriCovADiag = numpy.diag(aposterioriCovA)
-    aposterioriCovAPrimeDiag = numpy.diag(aposterioriCovAPrime)
-    resolDataDiag = numpy.diag(self.resolData)
-    resolDataPrimeDiag = numpy.diag(resolDataPrime)
-
-    # Output columns.
-    paramOut = numpy.transpose(numpy.vstack((self.solution, self.aprioriVals,
-                                             aprioriCovDiag, aposterioriCovDiag,
-                                             aposterioriCovPrimeDiag,
-                                             aposterioriCovDDiag,
-                                             aposterioriCovDPrimeDiag,
-                                             aposterioriCovADiag,
-                                             aposterioriCovAPrimeDiag,
-                                             resolDataDiag,
-                                             resolDataPrimeDiag)))
-                            
-    numpy.savetxt(self.paramOutputFile, paramOut)
-
-    return
-  
-
-# ----------------------------------------------------------------------
-if __name__ == '__main__':
-  app = LinInvert()
-  app.run()
-
-# End of file

Deleted: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/merge_greens.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/merge_greens.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/merge_greens.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,420 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file greensfns/merge_greens
-
-## @brief Python application to merge Green's functions that were created using
-## separate fault patches with gfgen.py (and then PyLith). Functions with
-## duplicate coordinates are removed and all the necessary files are renumbered
-## and moved to a specified location. A metadata file is produced, along with
-## a file showing the correspondence between the original and moved files.
-
-import math
-import numpy
-import os
-import re
-import glob
-from pyre.units.time import s
-from pyre.units.length import m
-
-from pyre.applications.Script import Script as Application
-
-class MergeGreens(Application):
-  """
-  Python application to merge Green's functions that were created using
-  separate fault patches with gfgen.py (and then PyLith). Functions with
-  duplicate coordinates are removed and all the necessary files are renumbered
-  and moved to a specified location. A metadata file is produced, along with
-  a file showing the correspondence between the original and moved files.
-  """
-  
-  class Inventory(Application.Inventory):
-    """
-    Python object for managing MergeGreens facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing MergeGreens facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b metadata_input File with a list of all the metadata input files.
-    ## @li \b impulse_input File with root names of all input impulse files.
-    ## @li \b response_input File with root names of all input response files.
-    ## @li \b metadata_output Name of output metadata file.
-    ## @li \b correspondence_output Name of output correspondence file.
-    ## @li \b impulse_output Root name of impulse output files.
-    ## @li \b response_output Root name of response output files.
-    ## @li \b impulse_input_width Width of input impulse number field.
-    ## @li \b impulse_output_width Width of output impulse number field.
-    ## @li \b distance_tol Distance tolerance to determine coincident vertices.
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-    metadataInput = pyre.inventory.str("metadata_input",
-                                       default="metadata.list")
-    metadataInput.meta['tip'] = "File with a list of input metadata files."
-
-    impulseInput = pyre.inventory.str("impulse_input",
-                                      default="impulse.list")
-    impulseInput.meta['tip'] = "File with a list of input impulse root names."
-
-    responseInput = pyre.inventory.str("response_input",
-                                       default="response.list")
-    responseInput.meta['tip'] = "File with a list of input response root names."
-
-    metadataOutput = pyre.inventory.str("metadata_output",
-                                        default="impulse_description.txt")
-    metadataOutput.meta['tip'] = "Name of output file with merged metadata."
-
-    correspondenceOutput = pyre.inventory.str("correspondence_output",
-                                              default="correspondence.txt")
-    correspondenceOutput.meta['tip'] = "Name of output correspondence file."
-
-    impulseOutput = pyre.inventory.str("impulse_output",
-                                       default="gfimpulse.vtk")
-    impulseOutput.meta['tip'] = "Root name of impulse output files."
-
-    responseOutput = pyre.inventory.str("response_output",
-                                        default="gfresponse.vtk")
-    responseOutput.meta['tip'] = "Root name of response output files."
-    
-    impulseInputWidth = pyre.inventory.int("impulse_input_width", default=4)
-    impulseInputWidth.meta['tip'] = "Width of input impulse number field."
-    
-    impulseOutputWidth = pyre.inventory.int("impulse_output_width", default=5)
-    impulseOutputWidth.meta['tip'] = "Width of output impulse number field."
-    
-    distanceTol = pyre.inventory.dimensional("distance_tol", default=0.1*m)
-    distanceTol.meta['tip'] = "Distance tolerance for coincident vertices."
-
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="merge_greens"):
-    Application.__init__(self, name)
-
-    self.numPatches = 0
-    self.numOriginalImpulses = 0
-    self.numMergedImpulses = 0
-    self.numOutputImpulses = 0
-
-    self.impulseOutputDir = ''
-    self.responseOutputDir = ''
-    self.impulseOutputRoot = ''
-    self.responseOutputRoot = ''
-
-    self.numImpulsesPerPatch = []
-    self.metadataInputFiles = []
-    self.impulseInputRoots = []
-    self.responseInputRoots = []
-    self.metadata = []
-
-    return
-
-
-  def main(self):
-    # import pdb
-    # pdb.set_trace()
-    self._readLists()
-    self._setupOutput()
-    self._readMetadata()
-    self._excludeImpulses()
-
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Setup members using inventory.
-    """
-    Application._configure(self)
-
-    # File info.
-    self.metadataInput = self.inventory.metadataInput
-    self.impulseInput = self.inventory.impulseInput
-    self.responseInput = self.inventory.responseInput
-    self.metadataOutput = self.inventory.metadataOutput
-    self.correspondenceOutput = self.inventory.correspondenceOutput
-    self.impulseOutput = self.inventory.impulseOutput
-    self.responseOutput = self.inventory.responseOutput
-    
-    # Impulse information
-    self.impulseInputWidth = self.inventory.impulseInputWidth
-    self.impulseOutputWidth = self.inventory.impulseOutputWidth
-    
-    # Excluded vertex information
-    self.distanceTol = self.inventory.distanceTol.value
-    
-    return
-      
-
-  def _readLists(self):
-    """
-    Function to read lists for input files.
-    """
-    import os
-    import re
-    
-    # Read names of metadata files.
-    f = open(self.metadataInput, 'r')
-    lines = f.readlines()
-    for line in lines:
-      self.metadataInputFiles.append(line.rstrip('\n'))
-      self.numPatches += 1
-    f.close()
-
-    # Read root filenames of impulse files.
-    f = open(self.impulseInput, 'r')
-    lines = f.readlines()
-    for line in lines:
-      impulseRoot = line.rstrip('\n')
-      totalInputPath = os.path.normpath(os.path.join(os.getcwd(), impulseRoot))
-      inputDir = os.path.dirname(totalInputPath)
-      baseInputName = os.path.basename(totalInputPath)
-      baseInputNameLen = len(baseInputName)
-      baseInputNameSuffStripped = baseInputName
-      if baseInputName.endswith(".vtk"):
-        baseInputNameSuffStripped = baseInputName[0:baseInputNameLen-4]
-      baseInputNameTimeStripped = baseInputNameSuffStripped
-      testFind = re.search('_t[0-9]*$', baseInputNameSuffStripped)
-      if testFind != None:
-        timeInd = baseInputNameSuffStripped.rfind(testFind.group(0))
-        baseInputNameTimeStripped = baseInputNameSuffStripped[0:timeInd]
-      self.impulseInputRoots.append(os.path.join(inputDir,
-                                                 baseInputNameTimeStripped))
-    f.close()
-
-    # Read root filenames of response files.
-    f = open(self.responseInput, 'r')
-    lines = f.readlines()
-    for line in lines:
-      responseRoot = line.rstrip('\n')
-      totalInputPath = os.path.normpath(os.path.join(os.getcwd(), responseRoot))
-      inputDir = os.path.dirname(totalInputPath)
-      baseInputName = os.path.basename(totalInputPath)
-      baseInputNameLen = len(baseInputName)
-      baseInputNameSuffStripped = baseInputName
-      if baseInputName.endswith(".vtk"):
-        baseInputNameSuffStripped = baseInputName[0:baseInputNameLen-4]
-      baseInputNameTimeStripped = baseInputNameSuffStripped
-      testFind = re.search('_t[0-9]*$', baseInputNameSuffStripped)
-      if testFind != None:
-        timeInd = baseInputNameSuffStripped.rfind(testFind.group(0))
-        baseInputNameTimeStripped = baseInputNameSuffStripped[0:timeInd]
-      self.responseInputRoots.append(os.path.join(inputDir,
-                                                 baseInputNameTimeStripped))
-    f.close()
-
-    print "Number of impulse patches:  %i" % self.numPatches
-
-    return
-
-
-  def _setupOutput(self):
-    """
-    Function to setup information for moving files.
-    """
-    import os
-    import re
-    
-    # Setup root filenames for output impulse files.
-    totalOutputPath = os.path.normpath(os.path.join(os.getcwd(),
-                                                    self.impulseOutput))
-    self.impulseOutputDir = os.path.dirname(totalOutputPath)
-    baseOutputName = os.path.basename(totalOutputPath)
-    baseOutputNameLen = len(baseOutputName)
-    baseOutputNameSuffStripped = baseOutputName
-    if baseOutputName.endswith(".vtk"):
-      baseOutputNameSuffStripped = baseOutputName[0:baseOutputNameLen-4]
-    baseOutputNameTimeStripped = baseOutputNameSuffStripped
-    testFind = re.search('_t[0-9]*$', baseOutputNameSuffStripped)
-    if testFind != None:
-      timeInd = baseOutputNameSuffStripped.rfind(testFind.group(0))
-      baseOutputNameTimeStripped = baseOutputNameSuffStripped[0:timeInd]
-    self.impulseOutputRoot = os.path.join(self.impulseOutputDir,
-                                          baseOutputNameTimeStripped)
-    
-    # Setup root filenames for output response files.
-    totalOutputPath = os.path.normpath(os.path.join(os.getcwd(),
-                                                    self.responseOutput))
-    self.responseOutputDir = os.path.dirname(totalOutputPath)
-    baseOutputName = os.path.basename(totalOutputPath)
-    baseOutputNameLen = len(baseOutputName)
-    baseOutputNameSuffStripped = baseOutputName
-    if baseOutputName.endswith(".vtk"):
-      baseOutputNameSuffStripped = baseOutputName[0:baseOutputNameLen-4]
-    baseOutputNameTimeStripped = baseOutputNameSuffStripped
-    testFind = re.search('_t[0-9]*$', baseOutputNameSuffStripped)
-    if testFind != None:
-      timeInd = baseOutputNameSuffStripped.rfind(testFind.group(0))
-      baseOutputNameTimeStripped = baseOutputNameSuffStripped[0:timeInd]
-    self.responseOutputRoot = os.path.join(self.responseOutputDir,
-                                           baseOutputNameTimeStripped)
-
-    return
-      
-
-  def _readMetadata(self):
-    """
-    Function to read metadata from each metadata file.
-    Results are stored as a list of numpy arrays.
-    """
-    fileNum = 0
-    for metadataFile in self.metadataInputFiles:
-      self.metadata.append(numpy.loadtxt(metadataFile, dtype=numpy.float64,
-                                         skiprows=1))
-      self.numImpulsesPerPatch.append(self.metadata[fileNum].shape[0])
-      self.numOriginalImpulses += self.numImpulsesPerPatch[fileNum]
-      print "Number of impulses in patch %i:  %i" % (fileNum,
-                                                     self.numImpulsesPerPatch[fileNum])
-      fileNum += 1
-
-    print "Total number of original impulses:  %i" % self.numOriginalImpulses
-
-    return
-
-
-  def _getFilename(self, fileRoot, impulse, impulseWidth):
-    """
-    Function to create a filename given the root filename,
-    the impulse number, and the timestamp width.
-    """
-    impulseNum = int(impulse)
-    impulseString = repr(impulseNum).rjust(impulseWidth, '0')
-    filename = fileRoot + "_t" + impulseString + ".vtk"
-    
-    return filename
-
-  def _excludeImpulses(self):
-    """
-    Function to remove redundant impulses, create the metadata and
-    correspondence files, and move files to the proper locations.
-    """
-    import scipy.spatial.distance
-    import os
-    
-    newline = '\n'
-    tab = '\t'
-    impulseInFmt = '%0' + str(self.impulseInputWidth) + 'i'
-    impulseOutFmt = '%0' + str(self.impulseOutputWidth) + 'i'
-    cFmt = '   ' + impulseInFmt + '   ' + impulseOutFmt + newline
-    mFmt = impulseOutFmt + 12 * '\t%e' + newline
-
-    # Create output directories for impulses and responses if they don't exist.
-    if not os.path.isdir(self.impulseOutputDir):
-      os.makedirs(self.impulseOutputDir)
-    if not os.path.isdir(self.responseOutputDir):
-      os.makedirs(self.responseOutputDir)
-
-    # The first patch retains all impulses.
-    metadata = self.metadata[0]
-    c = open(self.correspondenceOutput, 'w')
-    m = open(self.metadataOutput, 'w')
-    patch = 0
-    self.numOutputImpulses = self.numImpulsesPerPatch[patch]
-    cPatch = 'Patch ' + str(patch) + newline
-    cHead = 'Old ID    New ID' + newline
-    mHead = "Impulse #" + tab + "X-Coord" + tab + "Y-Coord" + tab + \
-            "Z-Coord" + tab + "Normal-X" + tab + "Normal-Y" + tab + \
-            "Normal-Z" + tab + "Strike-X" + tab + "Strike-Y" + tab + \
-            "Strike-Z" + tab + "Dip-X" + tab + "Dip-Y" + tab + "Dip-Z" \
-            + newline
-    c.write(cPatch)
-    c.write(cHead)
-    m.write(mHead)
-    newId = 0
-    patchId = 0
-    for impulse in range(self.numImpulsesPerPatch[patch]):
-      cOut = cFmt % (patchId, newId)
-      c.write(cOut)
-      mOut = mFmt % (int(round(metadata[impulse,0])),
-                     metadata[impulse, 1], metadata[impulse, 2],
-                     metadata[impulse, 3], metadata[impulse, 4],
-                     metadata[impulse, 5], metadata[impulse, 6],
-                     metadata[impulse, 7], metadata[impulse, 8],
-                     metadata[impulse, 9], metadata[impulse,10],
-                     metadata[impulse,11], metadata[impulse,12])
-      m.write(mOut)
-      impulseFrom = self._getFilename(self.impulseInputRoots[patch],
-                                      patchId, self.impulseInputWidth)
-      impulseTo = self._getFilename(self.impulseOutputRoot,
-                                    newId, self.impulseOutputWidth)
-      os.rename(impulseFrom, impulseTo)
-      responseFrom = self._getFilename(self.responseInputRoots[patch],
-                                       patchId, self.impulseInputWidth)
-      responseTo = self._getFilename(self.responseOutputRoot,
-                                     newId, self.impulseOutputWidth)
-      os.rename(responseFrom, responseTo)
-      newId += 1
-      patchId += 1
-
-    # Loop over remaining patches.
-    for patch in range(1, self.numPatches):
-      patchId = 0
-      coordsCurrent = metadata[:,1:4]
-      coordsPatch = self.metadata[patch][:,1:4]
-      distance = scipy.spatial.distance.cdist(coordsPatch, coordsCurrent,
-                                              'euclidean')
-      minIndices = numpy.argmin(distance, axis=1)
-      cPatch = 'Patch ' + str(patch) + newline
-      c.write(cPatch)
-      c.write(cHead)
-      for impulse in range(self.numImpulsesPerPatch[patch]):
-        newOutputId = -minIndices[impulse]
-        if(distance[impulse, minIndices[impulse]] > self.distanceTol):
-          newOutputId = newId
-          metadata = numpy.vstack((metadata, self.metadata[patch][impulse,:]))
-          mOut = mFmt % (newId,
-                         metadata[newId, 1], metadata[newId, 2],
-                         metadata[newId, 3], metadata[newId, 4],
-                         metadata[newId, 5], metadata[newId, 6],
-                         metadata[newId, 7], metadata[newId, 8],
-                         metadata[newId, 9], metadata[newId,10],
-                         metadata[newId,11], metadata[newId,12])
-          m.write(mOut)
-          impulseFrom = self._getFilename(self.impulseInputRoots[patch],
-                                          patchId, self.impulseInputWidth)
-          impulseTo = self._getFilename(self.impulseOutputRoot,
-                                        newId, self.impulseOutputWidth)
-          os.rename(impulseFrom, impulseTo)
-          responseFrom = self._getFilename(self.responseInputRoots[patch],
-                                           patchId, self.impulseInputWidth)
-          responseTo = self._getFilename(self.responseOutputRoot,
-                                         newId, self.impulseOutputWidth)
-          os.rename(responseFrom, responseTo)
-          newId += 1
-          self.numOutputImpulses += 1
-        else:
-          self.numMergedImpulses += 1
-        cOut = cFmt % (patchId, newOutputId)
-        c.write(cOut)
-        patchId += 1
-
-    print 'Number of output impulses: %i' % self.numOutputImpulses
-    print 'Number of merged impulses: %i' % self.numMergedImpulses
-    c.close()
-    m.close()
-
-    return
-
-
-# ----------------------------------------------------------------------
-if __name__ == '__main__':
-  app = MergeGreens()
-  app.run()
-
-# End of file

Modified: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/mesh_hex8_1000m.jou
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/mesh_hex8_1000m.jou	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/mesh_hex8_1000m.jou	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,12 +1,3 @@
-## /tools/common/cubit-10.2/bin/clarox
-## Cubit Version 10.2
-## Cubit Build 24
-## Revised 12/15/2006 16:09:40 MST
-## Running 06/18/2007 10:26:50 AM
-## Command Options:
-## -warning = On
-## -information = On
-
 # ----------------------------------------------------------------------
 # Generate geometry
 # ----------------------------------------------------------------------
@@ -82,20 +73,12 @@
 nodeset 15 name "face_zneg"
 
 # ----------------------------------------------------------------------
-# Create nodeset for -z face w/o fault
-# ----------------------------------------------------------------------
-group "face_zneg_nofault" add node in face_zneg
-group "face_zneg_nofault" remove node in fault
-nodeset 16 group face_zneg_nofault
-nodeset 16 name "face_zneg_nofault"
-
-# ----------------------------------------------------------------------
 # Create nodeset for +z face
 # ----------------------------------------------------------------------
 group "face_zpos" add node in surface 10
 group "face_zpos" add node in surface 17
-nodeset 17 group face_zpos
-nodeset 17 name "face_zpos"
+nodeset 16 group face_zpos
+nodeset 16 name "face_zpos"
 
 # ----------------------------------------------------------------------
 # Export exodus file

Deleted: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/points2spatialdb.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/points2spatialdb.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/points2spatialdb.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,213 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-#                           Brad T. Aagaard
-#                        U.S. Geological Survey
-#
-# <LicenseText>
-#
-# ----------------------------------------------------------------------
-#
-
-## @file greensfns/points2spatialdb
-
-## @brief Python application to create a spatialdb using a given set of points.
-## A subset of the points is read from a separate file, along with corresponding
-## parameter values. A spatial database containing all points is created, with
-## all values set to zero other than the subset.
-
-import math
-import numpy
-from pyre.units.length import km
-from pyre.units.length import m
-
-from pyre.applications.Script import Script as Application
-
-class Points2Spatialdb(Application):
-  """
-  Python application to create a spatialdb using a given set of points.
-  A subset of the points is read from a separate file, along with corresponding
-  parameter values. A spatial database containing all points is created, with
-  all values set to zero other than the subset.
-  """
-  
-  class Inventory(Application.Inventory):
-    """
-    Python object for managing Points2Spatialdb facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing Points2Spatialdb facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b point_coord_file File containing all coordinates.
-    ## @li \b point_value_file File containing point subset with values.
-    ## @li \b parameter_names List of parameter names.
-    ## @li \b distance_tol Distance tolerance to determine coincident points.
-    ##
-    ## \b Facilities
-    ## @li \b geometry  Geometry for output database.
-    ## @li \b iohandler  Object for output database.
-
-    import pyre.inventory
-
-    pointCoordFile = pyre.inventory.str("point_coord_file",
-                                        default="point_coords.txt")
-    pointCoordFile.meta['tip'] = "File containing all coordinates."
-
-    pointValueFile = pyre.inventory.str("point_value_file",
-                                        default="point_values.txt")
-    pointValueFile.meta['tip'] = "File containing point subset with values."
-
-    parameterNames = pyre.inventory.list("parameter_names",
-                                        default=['left-lateral-slip',
-                                                 'reverse-slip',
-                                                 'fault-opening'])
-    parameterNames.meta['tip'] = "List of parameter names."
-
-    parameterUnits = pyre.inventory.list("parameter_units",
-                                        default=['m','m','m'])
-    parameterUnits.meta['tip'] = "List of parameter units."
-
-    distanceTol = pyre.inventory.dimensional("distance_tol",
-                                             default=10.0*m)
-    distanceTol.meta['tip'] = "Distance tolerance for coincident points."
-
-    from spatialdata.spatialdb.generator.Geometry import Geometry
-    geometry = pyre.inventory.facility("geometry", family="geometry",
-                                       factory=Geometry)
-    geometry.meta['tip'] = "Geometry for output database."
-
-    from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii
-    iohandler = pyre.inventory.facility("iohandler", family="simpledb_io",
-                                        factory=SimpleIOAscii)
-    iohandler.meta['tip'] = "Object for writing database."
-
-  
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="points2spatialdb"):
-    Application.__init__(self, name)
-
-    self.numTotalPoints = 0
-    self.numSubsetPoints = 0
-    self.numParameters = 0
-
-    self.coincidentPoints = []
-
-    self.totalPoints = None
-    self.subsetPoints = None
-    self.subsetValues = None
-
-    return
-
-
-  def main(self):
-    # import pdb
-    # pdb.set_trace()
-    self._readPoints()
-    self._findCoincident()
-    self._writeSpatialdb()
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Setup members using inventory.
-    """
-    Application._configure(self)
-    # import pdb
-    # pdb.set_trace()
-
-    # File info.
-    self.pointCoordFile = self.inventory.pointCoordFile
-    self.pointValueFile = self.inventory.pointValueFile
-
-    # Parameter info.
-    self.parameterNames = self.inventory.parameterNames
-    self.parameterUnits = self.inventory.parameterUnits
-
-    # Parameters.
-    self.distanceTol = self.inventory.distanceTol.value
-
-    # Spatialdb output facilities.
-    self.geometry = self.inventory.geometry
-    self.iohandler = self.inventory.iohandler
-
-    return
-      
-
-  def _readPoints(self):
-    """
-    Function to read the file containing all points as well as the file
-    containing the point subset with values.
-    """
-    self.totalPoints = numpy.loadtxt(self.pointCoordFile, dtype=numpy.float64)
-    subsetData = numpy.loadtxt(self.pointValueFile, dtype=numpy.float64)
-    self.subsetPoints = subsetData[:,0:3]
-    self.subsetValues = subsetData[:,3:]
-    self.numTotalPoints = self.totalPoints.shape[0]
-    self.numSubsetPoints = self.subsetPoints.shape[0]
-    self.numParameters = self.subsetValues.shape[1]
-    if (self.numParameters != len(self.parameterNames)):
-      msg = "Number of parameters not consistent with parameter names."
-      raise ValueError(msg)
-
-    return
-        
-    
-  def _findCoincident(self):
-    """
-    Function to find points in the total set matching those in the subset.
-    """
-    import scipy.spatial.distance
-
-    distance = scipy.spatial.distance.cdist(self.subsetPoints, self.totalPoints,
-                                            'euclidean')
-    minIndices = numpy.argmin(distance, axis=1)
-    
-    for point in range(self.numSubsetPoints):
-      matchPoint = minIndices[point]
-      if (distance[point, minIndices[point]] < self.distanceTol):
-        self.coincidentPoints.append(matchPoint)
-      else:
-        msg = "No matching point found for subset point # %i." % point
-        raise ValueError(msg)
-
-    return
-
-
-  def _writeSpatialdb(self):
-    """
-    Function to write out the spatial database, after inserting the desired
-    values.
-    """
-    # Create info for each parameter.
-    values = []
-    for parameter in range(self.numParameters):
-      paramVals = numpy.zeros(self.numTotalPoints, dtype=numpy.float64)
-      paramVals[self.coincidentPoints] = self.subsetValues[:,parameter]
-      paramInfo = {'name': self.parameterNames[parameter],
-                   'units': self.parameterUnits[parameter],
-                   'data': paramVals.flatten()}
-      values.append(paramInfo)
-
-    # Write database.
-    data = {'points': self.totalPoints,
-            'coordsys': self.geometry.coordsys,
-            'data_dim': self.geometry.dataDim,
-            'values': values}
-    self.iohandler.write(data)
-
-    return
-  
-
-# ----------------------------------------------------------------------
-if __name__ == '__main__':
-  app = Points2Spatialdb()
-  app.run()
-
-# End of file

Modified: short/3D/PyLith/branches/multifields/examples/greensfns/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/greensfns/hex8/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/greensfns/hex8/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -33,7 +33,6 @@
 [pylithapp.mesh_generator.reader]
 # Set filename of mesh to import.
 filename = box_hex8_1000m.exo
-use_nodeset_names = True
 
 # ----------------------------------------------------------------------
 # problem
@@ -74,7 +73,7 @@
 
 [pylithapp.timedependent.bc.z_neg]
 bc_dof = [2]
-label = face_zneg_nofault
+label = face_zneg
 db_initial.label = Dirichlet BC on -z
 
 # ----------------------------------------------------------------------
@@ -89,6 +88,7 @@
 [pylithapp.timedependent.materials.elastic_upper]
 label = Upper elastic material
 id = 1
+db_properties.label = Properties for upper crust
 db_properties.iohandler.filename = mat_elastic.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 3
@@ -96,6 +96,7 @@
 [pylithapp.timedependent.materials.elastic_lower]
 label = Lower elastic material
 id = 2
+db_properties.label = Properties for lower crust
 db_properties.iohandler.filename = mat_elastic.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 3

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/README
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/README	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/README	2011-07-15 17:04:26 UTC (rev 18769)
@@ -31,9 +31,9 @@
 create a skin surface using Cubit (see Cubit documentation).
 
 3.  We then just run Cubit and playback the hikurangi_mksurf.jou file
-to create an ACIS NURBS surface (hikurangi_sub_geom.sab).
+to create an ACIS NURBS surface (hikurangi_sub_geom.sat).
 
 Once the NURBS surface has been created, it may be used in future
 Cubit sessions by importing it:
 
-import acis 'hikurangi_sub_geom.sab'
+import acis 'hikurangi_sub_geom.sat'

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/cont2lines.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/cont2lines.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/contours/cont2lines.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -3,4 +3,4 @@
 in_file = hikurangi_shiftrot_fill.txt
 out_root = journal/hikurangi_shiftrot_fill
 journal_out = hikurangi_mksurf.jou
-surface_out = hikurangi_sub_geom.sab
+surface_out = hikurangi_sub_geom.sat

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/Makefile.am
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/Makefile.am	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/Makefile.am	2011-07-15 17:04:26 UTC (rev 18769)
@@ -25,10 +25,7 @@
 	README \
 	dem2lines.cfg \
 	dem2lines.py \
-	mktopo.jou \
-	ruapehu-nzmg-1km.txt \
-	ulines.jou \
-	vlines.jou
+	ruapehu-nzmg-1km.txt
 
 
 # End of file 

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/README
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/README	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/README	2011-07-15 17:04:26 UTC (rev 18769)
@@ -19,8 +19,8 @@
 2.  The parameters for the Python script are contained in the file
 dem2lines.cfg. In this file we specify the name of the input
 file, the name of an output VTK file (for viewing the resampled DEM
-using a package such as ParaView), and prefixes for the output u-lines
-and v-lines.  The x_min, x_max, etc. values indicate the region over
+using a package such as ParaView), and prefixes and filenames for the output
+journal files. The x_min, x_max, etc. values indicate the region over
 which full resolution is desired. Outside this region, resampling
 occurs at skip_interval, 2*skip_interval, etc. until the edge of the
 DEM is reached.
@@ -30,21 +30,17 @@
 ./dem2lines.py
 
 This will produce the file ruapehu-nzmg-1km-resampled.vtk, and will
-also populate the ulines and vlines directories. You can visualize the
+also populate the ulines and vlines directories with journal files defining
+each u-line and v-line, as well as creating journal files to playback these
+file, and a master journal file to control everything. You can visualize the
 VTK file to make sure it looks OK.
 
-4.  Once you have created the u-lines and v-lines, you must create a
-journal file that Cubit can use to create the NURBS surface. Each file
-in the ulines and vlines directories is a separate Cubit command to
-create a single spline curve. To create the desired surface, we first
-create a ulines.jou file and a vlines.jou file to execute each of
-these. We then create a mktopo.jou file that executes these two
-journal files and then creates the NURBS surface (ruapehu_topo.sab).
-You can create the surface yourself by running Cubit and playing back the
-'mktopo.jou' file.
+4.  Once you have created the necessary journal files, you can create the
+surface yourself by running Cubit and playing back the 'ruapehu_topo.jou'
+file. This will create the NURBS surface (ruapehu_topo.sat).
 
 5.  Once the surface has been created, you can import it in future
 Cubit sessions and use it just as you would any surface created within
 Cubit.  For example, to use this surface within Cubit, you would type:
 
-import acis 'ruapehu_topo.sab'
+import acis 'ruapehu_topo.sat'

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -4,8 +4,10 @@
 vtk_output_file = ruapehu-nzmg-1km-resampled.vtk
 master_journal = ruapehu_topo.jou
 u_line_prefix = ulines/ruapehu-nzmg-1km
+u_line_journal = u_lines.jou
 v_line_prefix = vlines/ruapehu-nzmg-1km
-acis_filename = ruapehu_topo.sab
+v_line_journal = v_lines.jou
+acis_filename = ruapehu_topo.sat
 x_min = 2724000.0
 x_max = 2744000.0
 y_min = 6200000.0

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem2lines.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -333,8 +333,8 @@
             comment + newLine + separator + \
             "# Create u-lines and v-lines, then create a net surface.\n" + \
             separator + \
-            "playback 'ulines.jou'\n" + \
-            "playback 'vlines.jou'\n"
+            "playback " + "'" + self.uLineJournal + "'" + "\n" + \
+            "playback " + "'" + self.vLineJournal + "'" + "\n"
     m = open(self.masterJournal, 'w')
     m.write(playCmd)
     c1 = 1

Deleted: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem_taper.py
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem_taper.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/dem_taper.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,398 +0,0 @@
-#!/usr/bin/env python
-
-## @file dem_taper.py
-
-## @brief Python application to read an ASCII (x,y,z) representation of a DEM
-## and create a set of lines suitable for use in Cubit. The original DEM is
-## tapered at the edges to a constant value.
-
-import math
-import numpy
-import pdb
-
-from pyre.applications.Script import Script as Application
-
-class DemTaper(Application):
-  """
-  Python application to read an ASCII (x,y,z) representation and
-  create a set of lines suitable for use in Cubit. The original DEM is
-  tapered at the edges to a constant value.
-  The DEM is assumed to be ordered by rows (left to right).
-  """
-
-  class Inventory(Application.Inventory):
-    """
-    Python object for managing DemTaper facilities and properties.
-    """
-    
-    ## @class Inventory
-    ## Python object for managing DemTaper facilities and properties.
-    ##
-    ## \b Properties
-    ## @li \b input_dem Input DEM file (ASCII).
-    ## @li \b vtk_output_file Filename of VTK output file.
-    ## @li \b u_line_prefix Prefix for u (east) output lines.
-    ## @li \b u_line_journal Output journal file for u_lines.
-    ## @li \b v_line_prefix Prefix for v (north) output lines.
-    ## @li \b v_line_journal Output journal file for v_lines.
-    ## @li \b master_journal Output master journal file.
-    ## @li \b acis_filename Name of ACIS output file created by Cubit.
-    ## @li \b taper_len Number of pixels over which to taper DEM.
-    ## @li \b edge_value_source How to determine DEM values on outer edges.
-    ## @li \b edge_value User-specified edge value.
-    ## @li \b interpolation_type Interpolation method to use.
-
-    import pyre.inventory
-    from pyre.units.angle import degree
-    
-    inputDem = pyre.inventory.str("input_dem", default="DEM.txt")
-    inputDem.meta['tip'] = "Input DEM file."
-    
-    vtkOutputFile = pyre.inventory.str("vtk_output_file", default="DEM.vtk")
-    vtkOutputFile.meta['tip'] = "VTK output file."
-    
-    uLinePrefix = pyre.inventory.str("u_line_prefix", default="u_lines")
-    uLinePrefix.meta['tip'] = "Prefix for u (east) lines."
-    
-    uLineJournal = pyre.inventory.str("u_line_journal", default="u_lines.jou")
-    uLineJournal.meta['tip'] = "Output journal file for u (east) lines."
-    
-    vLinePrefix = pyre.inventory.str("v_line_prefix", default="v_lines")
-    vLinePrefix.meta['tip'] = "Prefix for v (north) lines."
-    
-    vLineJournal = pyre.inventory.str("v_line_journal", default="v_lines.jou")
-    vLineJournal.meta['tip'] = "Output journal file for v (north) lines."
-    
-    masterJournal = pyre.inventory.str("master_journal", default="master.jou")
-    masterJournal.meta['tip'] = "Output master journal file."
-    
-    acisFilename = pyre.inventory.str("acis_filename", default="topo.sab")
-    acisFilename.meta['tip'] = "Name of ACIS output file created by Cubit."
-    
-    taperLen = pyre.inventory.int("taper_len", default=10)
-    taperLen.meta['tip'] = "Number of pixels over which to taper DEM."
-    
-    edgeValueSource = pyre.inventory.str("edge_value_source",
-      default="mean",
-      validator=pyre.inventory.choice(["mean","user_specified"]))
-    edgeValueSource.meta['tip'] = "How to determine DEM values on outer edges."
-    
-    edgeValue = pyre.inventory.int("edge_value", default=0)
-    edgeValue.meta['tip'] = "User-specified value for DEM edges."
-    
-    interpolationType = pyre.inventory.str("interpolation_type",
-      default="linear",
-      validator=pyre.inventory.choice(["nearest","linear","cubic"]))
-    interpolationType.meta['tip'] = "Interpolation method to use."
-    
-
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="dem_taper"):
-    Application.__init__(self, name)
-    self.xDim = 0
-    self.yDim = 0
-    self.zDim = 0
-    self.meanZ = 0
-    self.keepIndicesX = []
-    self.replaceIndicesX = []
-    self.keepIndicesY = []
-    self.replaceIndicesY = []
-    self.xIn = None
-    self.yIn = None
-    self.zIn = None
-    self.xLine = None
-    self.yLine = None
-    self.valuesOut = None
-
-    return
-
-
-  def main(self):
-    # pdb.set_trace()
-    self._readDem()
-    self._taperDem()
-    self._writeCubitJournals()
-    self._writeDemVtk()
-
-    return
-  
-
-  # PRIVATE METHODS /////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Setup members using inventory.
-    """
-    Application._configure(self)
-
-    # Filenames
-    self.inputDem = self.inventory.inputDem
-    self.vtkOutputFile = self.inventory.vtkOutputFile
-    self.uLinePrefix = self.inventory.uLinePrefix
-    self.uLineJournal = self.inventory.uLineJournal
-    self.vLinePrefix = self.inventory.vLinePrefix
-    self.vLineJournal = self.inventory.vLineJournal
-    self.masterJournal = self.inventory.masterJournal
-    self.acisFilename = self.inventory.acisFilename
-
-    # Parameters
-    self.taperLen = self.inventory.taperLen
-    self.edgeValueSource = self.inventory.edgeValueSource
-    self.edgeValue = self.inventory.edgeValue
-    self.interpolationType = self.inventory.interpolationType
-
-    return
-
-
-  def _readDem(self):
-    """
-    Read coordinates defining DEM and create vectors of x, y, and z values.
-    """
-
-    # Load each coordinate as a numpy array.
-    x, y, z = numpy.loadtxt(self.inputDem, dtype=numpy.float64, unpack=True)
-
-    self.zDim = len(z)
-    if (y[0] == y[1]):
-      # Ordered by rows.
-      self.xDim = max(numpy.argmax(x) + 1, numpy.argmin(x) + 1)
-      self.xLine = x[0:self.xDim]
-      self.yDim = self.zDim/self.xDim
-      self.yLine = y[0:self.zDim:self.xDim]
-      self.xIn = numpy.reshape(x, (self.yDim, self.xDim))
-      self.yIn = numpy.reshape(y, (self.yDim, self.xDim))
-      self.zIn = numpy.reshape(z, (self.yDim, self.xDim))
-    else:
-      # Ordered by columns.
-      self.yDim = max(numpy.argmax(y) + 1, numpy.argmin(y) + 1)
-      self.yLine = y[0:self.yDim]
-      self.xDim = self.zDim/self.yDim
-      self.xLine = x[0:self.zDim:self.yDim]
-      self.xIn = numpy.transpose(numpy.reshape(x, (self.xDim, self.yDim)))
-      self.yIn = numpy.transpose(numpy.reshape(y, (self.xDim, self.yDim)))
-      self.zIn = numpy.transpose(numpy.reshape(z, (self.xDim, self.yDim)))
-
-    # Flip everything so that it is ordered left-to-right and bottom-to-top.
-    if (self.xLine[0] > self.xLine[1]):
-      self.xLine = numpy.flipud(self.xLine)
-      self.xIn = numpy.fliplr(self.xIn)
-      self.yIn = numpy.fliplr(self.yIn)
-      self.zIn = numpy.fliplr(self.zIn)
-    if (self.yLine[0] > self.yLine[1]):
-      self.yLine = numpy.flipud(self.yLine)
-      self.xIn = numpy.flipud(self.xIn)
-      self.yIn = numpy.flipud(self.yIn)
-      self.zIn = numpy.flipud(self.zIn)
-
-    return
-
-  
-  def _taperDem(self):
-    """
-    Taper DEM over specified region.
-    """
-
-    import matplotlib.mlab
-
-    # Determine regions over which to replace existing values.
-    xLeftOuter = 0
-    xLeftInner = xLeftOuter + self.taperLen
-    xRightOuter = self.xDim - 1
-    xRightInner = xRightOuter - self.taperLen
-    yBottomOuter = 0
-    yBottomInner = yBottomOuter + self.taperLen
-    yTopOuter = self.yDim - 1
-    yTopInner = yTopOuter - self.taperLen
-    self.keepIndicesX = range(xLeftInner + 1, xRightInner - 1)
-    self.replaceIndicesX = range(xLeftOuter, xLeftInner) + \
-                           range(xRightInner, xRightOuter)
-    self.keepIndicesY = range(yBottomInner + 1, yTopInner - 1)
-    self.replaceIndicesY = range(yBottomOuter, yBottomInner) + \
-                           range(yTopInner, yTopOuter)
-
-    # Get edge values.
-    xEdge1 = self.xIn[yBottomOuter, :]
-    yEdge1 = self.yIn[yBottomOuter, :]
-    zEdge1 = self.zIn[yBottomOuter, :]
-    xEdge2 = self.xIn[yTopOuter, :]
-    yEdge2 = self.yIn[yTopOuter, :]
-    zEdge2 = self.zIn[yTopOuter, :]
-    xEdge3 = self.xIn[yBottomOuter+1:yTopOuter, xLeftOuter]
-    yEdge3 = self.yIn[yBottomOuter+1:yTopOuter, xLeftOuter]
-    zEdge3 = self.zIn[yBottomOuter+1:yTopOuter, xLeftOuter]
-    xEdge4 = self.xIn[yBottomOuter+1:yTopOuter, xRightOuter]
-    yEdge4 = self.yIn[yBottomOuter+1:yTopOuter, xRightOuter]
-    zEdge4 = self.zIn[yBottomOuter+1:yTopOuter, xRightOuter]
-    zEdge = numpy.concatenate((zEdge1, zEdge2, zEdge3, zEdge4))
-    self.zMean = int(numpy.mean(zEdge))
-    edgeValue = self.zMean
-    if (self.edgeValueSource == "user_specified"):
-      edgeValue = self.edgeValue
-
-    print "Mean elevation around DEM edges:  %i" % self.zMean
-    
-    # Create arrays with taper values missing.
-    xTmp = numpy.take(self.xIn, self.keepIndicesY, axis=0)
-    xInner = numpy.take(xTmp, self.keepIndicesX, axis=1)
-    xOuter = numpy.concatenate((xEdge1, xEdge2, xEdge3, xEdge4))
-    xReduced = numpy.concatenate((xInner.flatten(), xOuter))
-    yTmp = numpy.take(self.yIn, self.keepIndicesY, axis=0)
-    yInner = numpy.take(yTmp, self.keepIndicesX, axis=1)
-    yOuter = numpy.concatenate((yEdge1, yEdge2, yEdge3, yEdge4))
-    yReduced = numpy.concatenate((yInner.flatten(), yOuter))
-    zTmp = numpy.take(self.zIn, self.keepIndicesY, axis=0)
-    zInner = numpy.take(zTmp, self.keepIndicesX, axis=1)
-    zOuter = float(edgeValue) * numpy.ones_like(yOuter)
-    zReduced = numpy.concatenate((zInner.flatten(), zOuter))
-
-    # Interpolate missing values using selected method.
-    self.valuesOut = matplotlib.mlab.griddata(xReduced, yReduced, zReduced,
-                                              self.xIn, self.yIn)
-
-    return
-    
-    
-  def _writeCubitJournals(self):
-    """
-    Writes Cubit journal files to create a NURBS surface representing the DEM.
-    """
-
-    numWidth = 4
-    fmt = " location %15.11e %15.11e %15.11e"
-    newLine = "\n"
-    masterPref = "playback '"
-    separator = "# ------------------------------------------------------------"
-
-
-    # Write out u (east) lines.
-    um = open(self.uLineJournal, 'w')
-    for row in range(self.yDim):
-      y = self.yLine[row]
-      uString = repr(row + 1).rjust(numWidth, '0')
-      outputFileName = self.uLinePrefix + "_u" + uString + ".jou"
-      masterString = masterPref + outputFileName + "'" + newLine
-      um.write(masterString)
-      u = open(outputFileName, 'w')
-      u.write('create curve spline')
-      for column in range(self.xDim):
-        u.write(fmt % (self.xLine[column], y, self.valuesOut[row, column]))
-
-      u.close()
-
-    um.close()
-    print "Number of u-lines = " + repr(self.yDim)
-
-    # Write out v (north) lines.
-    vm = open(self.vLineJournal, 'w')
-    for column in range(self.xDim):
-      x = self.xLine[column]
-      vString = repr(column + 1).rjust(numWidth, '0')
-      outputFileName = self.vLinePrefix + "_v" + vString + ".jou"
-      masterString = masterPref + outputFileName + "'" + newLine
-      vm.write(masterString)
-      v = open(outputFileName, 'w')
-      v.write('create curve spline')
-      for row in range(self.yDim):
-        v.write(fmt % (x, self.yLine[row], self.valuesOut[row, column]))
-
-      v.close()
-
-    vm.close()
-    print "Number of v-lines = " + repr(self.xDim)
-
-    # Write master journal file.
-    m = open(self.masterJournal, 'w')
-    m.write("reset" + newLine)
-    m.write(separator + newLine)
-    comment1 = "# Create u-lines and v-lines, and then create a net surface."
-    m.write(comment1 + newLine)
-    m.write(separator + newLine)
-    m.write("playback '" + self.uLineJournal + "'" + newLine)
-    m.write("playback '" + self.vLineJournal + "'" + newLine)
-
-    uBegin = 1
-    uEnd = self.yDim
-    vBegin = uEnd + 1
-    vEnd = vBegin + self.xDim - 1
-    surfString = "create surface net u curve " + repr(uBegin) + " to " + \
-                 repr(uEnd) + " v curve " + repr(vBegin) + " to " + \
-                 repr(vEnd) + newLine
-    m.write(surfString)
-    m.write(newLine)
-
-    m.write(separator + newLine)
-    comment2 = "# Delete curves and any extra vertices." + newLine
-    m.write(comment2)
-    m.write(separator + newLine)
-    curveDel = "delete curve " + repr(uBegin) + " to " + repr(vEnd) + newLine
-    m.write(curveDel)
-    m.write("delete vertex all" + newLine)
-    m.write(newLine)
-    
-    m.write(separator + newLine)
-    comment3 = "# Export binary ACIS file." + newLine
-    m.write(comment3)
-    m.write(separator + newLine)
-    exportCmd = "export Acis '" + self.acisFilename + "'" + newLine
-    m.write(exportCmd)
-    m.close()
-
-    return
-
-  
-  def _writeDemVtk(self):
-    """
-    Write DEM as a rectilinear grid VTK file with z-values as point data.
-    """
-    zDim = 1
-    v = open(self.vtkOutputFile, 'w')
-    v.write('# vtk DataFile Version 2.0\n')
-    v.write('Resampled DEM\n')
-    v.write('ASCII\n')
-    v.write('DATASET RECTILINEAR_GRID\n')
-    dimString = 'DIMENSIONS ' + str(self.xDim) + ' ' + str(self.yDim) + \
-                ' ' + str(zDim) + '\n'
-    v.write(dimString)
-
-    xString = 'X_COORDINATES ' + str(self.xDim) + ' double\n'
-    v.write(xString)
-    for point in range(self.xDim):
-      v.write("%15.11e  " % self.xLine[point])
-      if ((point + 1)%5 == 0):
-        v.write("\n")
-
-    yString = '\nY_COORDINATES ' + str(self.yDim) + ' double\n'
-    v.write(yString)
-    for point in range(self.yDim):
-      v.write("%15.11e  " % self.yLine[point])
-      if ((point + 1)%5 == 0):
-        v.write("\n")
-
-    zString = '\nZ_COORDINATES ' + str(zDim) + ' double\n'
-    v.write(zString)
-    v.write('0.0\n')
-
-    zString1 = 'POINT_DATA ' + str(self.zDim) + '\n'
-    v.write(zString1)
-    zString2 = 'SCALARS elevation double 1\n'
-    v.write(zString2)
-    zString3 = 'LOOKUP_TABLE default\n'
-    v.write(zString3)
-    for yPoint in range(self.yDim):
-      for xPoint in range(self.xDim):
-        v.write("%15.11e  " % self.valuesOut[yPoint, xPoint])
-        if ((xPoint + 1)%5 == 0):
-          v.write("\n")
-
-    v.close()      
-    return
-
-
-# ----------------------------------------------------------------------
-if __name__ == '__main__':
-  app = DemTaper()
-  app.run()
-
-# End of file
-

Deleted: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/mktopo.jou
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/mktopo.jou	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/mktopo.jou	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,21 +0,0 @@
-reset
-# This is a simple Cubit journal file to create an ACIS NURBS surface from
-# a set of intersecting lines.
-#
-# ----------------------------------------------------------------------
-# Create u-lines and v-lines, and then create a net surface.
-# ----------------------------------------------------------------------
-playback 'ulines.jou'
-playback 'vlines.jou'
-create surface net u curve 1 to 32 v curve 33 to 64
-
-# ----------------------------------------------------------------------
-# Delete curves and any extra vertices.
-# ----------------------------------------------------------------------
-delete curve 1 to 64
-delete vertex all
-
-# ----------------------------------------------------------------------
-# Export binary ACIS file.
-# ----------------------------------------------------------------------
-export Acis 'ruapehu_topo.sab'

Deleted: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/ulines.jou
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/ulines.jou	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/ulines.jou	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,32 +0,0 @@
-playback 'ulines/ruapehu-nzmg-1km_u0001.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0002.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0003.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0004.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0005.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0006.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0007.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0008.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0009.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0010.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0011.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0012.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0013.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0014.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0015.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0016.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0017.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0018.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0019.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0020.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0021.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0022.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0023.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0024.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0025.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0026.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0027.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0028.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0029.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0030.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0031.jou'
-playback 'ulines/ruapehu-nzmg-1km_u0032.jou'

Deleted: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/vlines.jou
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/vlines.jou	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/dem/vlines.jou	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,32 +0,0 @@
-playback 'vlines/ruapehu-nzmg-1km_v0001.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0002.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0003.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0004.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0005.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0006.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0007.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0008.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0009.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0010.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0011.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0012.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0013.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0014.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0015.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0016.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0017.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0018.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0019.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0020.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0021.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0022.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0023.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0024.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0025.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0026.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0027.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0028.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0029.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0030.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0031.jou'
-playback 'vlines/ruapehu-nzmg-1km_v0032.jou'

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/Makefile.am
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/Makefile.am	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/Makefile.am	2011-07-15 17:04:26 UTC (rev 18769)
@@ -18,7 +18,7 @@
 
 dist_noinst_DATA = \
 	README \
-	mkfacets.sh \
+	mkfacets.py \
 	mksurface.jou
 
 

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/README
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/README	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/README	2011-07-15 17:04:26 UTC (rev 18769)
@@ -2,7 +2,7 @@
 triangulated surface using Cubit. We use the same original data as we did
 for the dem example (coarsely-sampled DEM of Mt Ruapehu volcano, New
 Zealand). There are only two files in this directory in addition to this
-README. The first (mkfacets.sh) is a shell script to create a Facets file
+README. The first (mkfacets.py) is a python script to create a Facets file
 (readable by Cubit) from the DEM. We use the GMT 'triangulate' utility to
 perform this task. Once the Facets file has been created, we can then use
 the 'mksurface.jou' file within Cubit to create the NURBS surface. Note

Copied: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.py (from rev 18768, short/3D/PyLith/trunk/examples/meshing/surface_nurbs/triangles/mkfacets.py)
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.py	                        (rev 0)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# Python script to create a triangulated surface in Facets format from a
+# set of points. The Facets file can be read by Cubit.
+# This script uses the GMT triangulate command, which invokes the triangle
+# meshing package if you have installed it.
+
+# Import necessary packages.
+import subprocess
+# import pdb
+# pdb.set_trace()
+
+# Define filenames.
+vertexFile = "../dem/ruapehu-nzmg-1km.txt"
+connectFile = "ruapehu-nzmg-1km.connect"
+facetsOut = "ruapehu-nzmg-1km.fac"
+
+# Triangulate the points to get connectivities.
+c = open(connectFile, 'w')
+triCall = ["triangulate", vertexFile, "-V"]
+retCode = subprocess.Popen(triCall, stdout=c)
+c.close()
+
+# Read connectivities and vertices.
+v = open(vertexFile, 'r')
+vertices = v.readlines()
+v.close()
+numVertices = len(vertices)
+c = open(connectFile, 'r')
+connect = c.readlines()
+c.close()
+numTriangles = len(connect)
+
+# Create factes file header and write it to facets file.
+header = "%d  %d\n" % (numVertices, numTriangles)
+f = open(facetsOut, 'w')
+f.write(header)
+
+# Write numbered vertices to facets file.
+vertFormat = "%d  %s"
+for vertex in range(numVertices):
+  outLine = vertFormat % (vertex, vertices[vertex])
+  f.write(outLine)
+  
+# Write numbered connectivities to facets file.
+connectFormat = "%d  %s"
+for triangle in range(numTriangles):
+  outLine = connectFormat % (triangle, connect[triangle])
+  f.write(outLine)
+f.close()

Deleted: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.sh
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.sh	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mkfacets.sh	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,28 +0,0 @@
-#! /bin/sh
-# Shell script to create a triangulated surface in Facets format from a
-# set of points. The Facets file can be read by Cubit.
-# This script uses the GMT triangulate command, which invokes the triangle
-# meshing package if you have installed it.
-
-# Define filenames.
-vertfile=../dem/ruapehu-nzmg-1km.txt
-connectfile=ruapehu-nzmg-1km.connect
-outfile=ruapehu-nzmg-1km.fac
-vertidfile=ruapehu-nzmg-1km-id.vert
-connectidfile=ruapehu-nzmg-1km-id.connect
-
-# Triangulate the points to get connectivities.
-triangulate $vertfile -V > $connectfile
-
-# Count the number of vertices and cells to create a header.
-numverts=$(wc -l < $vertfile)
-numcells=$(wc -l < $connectfile)
-header="$numverts $numcells"
-
-# Create numbered versions of vertex and connectivity files (0-based).
-nl -p -v0 $vertfile > $vertidfile
-nl -p -v0 $connectfile > $connectidfile
-
-# Cat files together to create Facets file.
-echo $header > $outfile
-cat $vertidfile $connectidfile >> $outfile

Modified: short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mksurface.jou
===================================================================
--- short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mksurface.jou	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/meshing/surface_nurbs/triangles/mksurface.jou	2011-07-15 17:04:26 UTC (rev 18769)
@@ -23,6 +23,7 @@
 
 # Export the surface in binary ACIS format.
 set geometry engine acis
-export acis "ruapehu-nzmg-1km.sab" surface 2 binary overwrite
+export acis "ruapehu-nzmg-1km.sat" surface 2 overwrite
 
 
+

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twohex8/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twohex8/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twohex8/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -100,9 +100,11 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying fault slip (0.01 m of left-lateral slip).
+slip.label = Final slip
 slip.iohandler.filename = dislocation_slip.spatialdb
 
 # Database specifying time at which fault slips (0.0 s).
+slip_time.label = Slip time
 slip_time.iohandler.filename = dislocation_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twohex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twohex8/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twohex8/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -80,6 +80,7 @@
 # We define uniform material properties for this problem rather than
 # using a spatial database file.
 db_properties = spatialdata.spatialdb.UniformDB
+db_properties.label = Elastic properties
 db_properties.values = [vp,vs,density,viscosity]
 db_properties.data = [5291.502622129181*m/s,3000.0*m/s,2700.0*kg/m**3,7.10046e19*Pa*s]
 

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/axialtract.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/axialtract.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/axialtract.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -149,9 +149,11 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying zero fault slip.
+slip.label = Final slip
 slip.iohandler.filename = dislocation_slip_zero.spatialdb
 
 # Database specifying time at which fault slips (0.0 s).
+slip_time.label = Slip time
 slip_time.iohandler.filename = dislocation_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -101,9 +101,11 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying fault slip (0.01 m of left-lateral slip).
+slip.label = Final slip
 slip.iohandler.filename = dislocation_slip.spatialdb
 
 # Database specifying time at which fault slips (0.0 s).
+slip_time.label = Slip time
 slip_time.iohandler.filename = dislocation_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twoquad4/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -79,6 +79,7 @@
 
 # The properties for this material are given in the spatial database file
 # 'matprops.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 # Set cell type to quadrilateral (2-d Lagrange).

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twotet4/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twotet4/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twotet4/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -85,9 +85,11 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying fault slip (0.01 m of left-lateral slip).
+slip.label = Final slip
 slip.iohandler.filename = dislocation_slip.spatialdb
 
 # Database specifying time at which fault slips (0.0 s).
+slip_time.label = Slip time
 slip_time.iohandler.filename = dislocation_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twotet4/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twotet4/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twotet4/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -81,6 +81,7 @@
 
 # The properties for this material are given in the spatial database file
 # 'matprops.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 # We are doing 3D quadrature for a tetrahedron.

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twotet4-geoproj/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twotet4-geoproj/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twotet4-geoproj/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -91,9 +91,11 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying fault slip (0.01 m of left-lateral slip).
+slip.label = Final slip
 slip.iohandler.filename = dislocation_slip.spatialdb
 
 # Database specifying time at which fault slips (0.0 s).
+slip_time.label = Slip time
 slip_time.iohandler.filename = dislocation_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twotri3/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twotri3/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twotri3/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -86,9 +86,11 @@
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
 # Database specifying fault slip (0.01 m of left-lateral slip).
+slip.label = Final slip
 slip.iohandler.filename = dislocation_slip.spatialdb
 
 # Database specifying time at which fault slips (0.0 s).
+slip_time.label = Slip time
 slip_time.iohandler.filename = dislocation_sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/examples/twocells/twotri3/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/examples/twocells/twotri3/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/examples/twocells/twotri3/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -80,6 +80,7 @@
 
 # The properties for this material are given in the spatial database file
 # 'matprops.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 # We are doing 2D quadrature for a triangle.

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -60,6 +60,9 @@
 typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveSubMesh::order_type,PetscInt> IndicesVisitor;
 
 // ----------------------------------------------------------------------
+const double pylith::faults::FaultCohesiveDyn::_slipRateTolerance = 1.0e-12;
+
+// ----------------------------------------------------------------------
 // Default constructor.
 pylith::faults::FaultCohesiveDyn::FaultCohesiveDyn(void) :
   _dbInitialTract(0),
@@ -534,6 +537,14 @@
     // Get change in Lagrange multiplier.
     dLagrangeTpdtSection->restrictPoint(v_fault, &dLagrangeTpdtVertex[0],
 					dLagrangeTpdtVertex.size());
+
+    // Only update slip if Lagrange multiplier is changing
+    double dLagrangeMag = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      dLagrangeMag += dLagrangeTpdtVertex[iDim]*dLagrangeTpdtVertex[iDim];
+    if (0.0 == dLagrangeMag)
+      continue; // No change, so continue
+
     // Compute change in slip.
     dSlipVertex = 0.0;
     for (int iDim = 0; iDim < spaceDim; ++iDim)
@@ -1485,6 +1496,11 @@
         slipRateVertex[iDim] +=
           velocityVertexP[kDim] * +orientationVertex[iDim*spaceDim+kDim];
 
+    // Limit velocity to resolvable range
+    for (int iDim = 0; iDim < spaceDim; ++iDim)
+      if (fabs(slipRateVertex[iDim]) < _slipRateTolerance)
+	slipRateVertex[iDim] = 0.0;
+
     // Update slip rate field.
     assert(slipRateVertex.size() == 
 	   slipRateSection->getFiberDimension(v_fault));

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.hh	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveDyn.hh	2011-07-15 17:04:26 UTC (rev 18769)
@@ -290,6 +290,9 @@
 
   PetscKSP _ksp; ///< PETSc KSP linear solver for sensitivity problem.
 
+  /// Minimum resolvable slip rate accounting for roundoff errors
+  static const double _slipRateTolerance;
+
 // NOT IMPLEMENTED ////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveKin.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveKin.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -219,14 +219,36 @@
 
     const srcs_type::const_iterator s_iter = _eqSrcs.find(value);
     assert(s_iter != _eqSrcs.end());
-    return s_iter->second->finalSlip();
 
+    // Need to append name of rupture to final slip label. Because
+    // Field is const, we use a buffer.
+    _allocateBufferVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+        _fields->get("buffer (vector)");
+    buffer.copy(s_iter->second->finalSlip());
+    assert(value.length() > 0);
+    const std::string& label = std::string("final_slip_") + std::string(value);
+    buffer.label(label.c_str());
+
+    return buffer;
+
   } else if (0 == strncasecmp("slip_time_X", name, timeStrLen)) {
     const std::string value = std::string(name).substr(timeStrLen + 1);
     const srcs_type::const_iterator s_iter = _eqSrcs.find(value);
     assert(s_iter != _eqSrcs.end());
-    return s_iter->second->slipTime();
 
+    // Need to append name of rupture to final slip label. Because
+    // Field is const, we use a buffer.
+    _allocateBufferScalarField();
+    topology::Field<topology::SubMesh>& buffer =
+        _fields->get("buffer (scalar)");
+    buffer.copy(s_iter->second->slipTime());
+    assert(value.length() > 0);
+    const std::string& label = std::string("slip_time_") + std::string(value);
+    buffer.label(label.c_str());
+
+    return buffer;
+
   } else if (0 == strcasecmp("traction_change", name)) {
     assert(0 != fields);
     const topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1826,6 +1826,7 @@
   topology::Field<topology::SubMesh>& area = _fields->get("area");
   const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
   area.newSection(slip, 1);
+  area.vectorFieldType(topology::FieldBase::SCALAR);
   area.allocate();
   area.zero();
   const ALE::Obj<RealSection>& areaSection = area.section();

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -571,8 +571,7 @@
     } // for
 
     devStressTpdt = mu2 * devStressTpdt + devStressInitial[iComp];
-    stress[iComp] = diag[iComp] * (meanStressTpdt + meanStressInitial) +
-      devStressTpdt;
+    stress[iComp] = diag[iComp] * meanStressTpdt + devStressTpdt;
   } // for
 
   PetscLogFlops((9 + 3 * numMaxwellModels) * tensorSize);

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -586,8 +586,7 @@
     } // for
 
     devStressTpdt = mu2 * devStressTpdt + devStressInitial[iComp];
-    stress[iComp] = diag[iComp] * (meanStressTpdt + meanStressInitial) +
-      devStressTpdt;
+    stress[iComp] = diag[iComp] * meanStressTpdt + devStressTpdt;
   } // for
 
   PetscLogFlops((9 + 2 * numMaxwellModels) * tensorSize);

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -347,14 +347,14 @@
 	const int numTimeSteps
 	  = DataWriter<mesh_type, field_type>::_numTimeSteps;
 	const hsize_t ndims = (numTimeSteps > 0) ? 3 : 2;
-	hsize_t dims[3];
+	hsize_t maxDims[3];
 	if (3 == ndims) {
-	  dims[0] = 1; // external file only constains 1 time step so far.
-	  dims[1] = vNumbering->getGlobalSize();
-	  dims[2] = fiberDim;
+	  maxDims[0] = H5S_UNLIMITED;
+	  maxDims[1] = vNumbering->getGlobalSize();
+	  maxDims[2] = fiberDim;
 	} else {
-	  dims[0] = vNumbering->getGlobalSize();
-	  dims[1] = fiberDim;
+	  maxDims[0] = vNumbering->getGlobalSize();
+	  maxDims[1] = fiberDim;
 	} // else
 	// Create 'vertex_fields' group if necessary.
 	if (!_h5->hasGroup("/vertex_fields"))
@@ -362,7 +362,7 @@
 	
 	_h5->createDatasetRawExternal("/vertex_fields", field.label(),
 				      _datasetFilename(field.label()).c_str(),
-				      dims, ndims, H5T_IEEE_F64BE);
+				      maxDims, ndims, H5T_IEEE_F64BE);
 	std::string fullName = std::string("/vertex_fields/") + field.label();
 	_h5->writeAttribute(fullName.c_str(), "vector_field_type",
 			    topology::FieldBase::vectorFieldString(field.vectorFieldType()));
@@ -484,14 +484,14 @@
 	const int numTimeSteps =
 	  DataWriter<mesh_type, field_type>::_numTimeSteps;
 	const hsize_t ndims = (numTimeSteps > 0) ? 3 : 2;
-	hsize_t dims[3];
+	hsize_t maxDims[3];
 	if (3 == ndims) {
-	  dims[0] = 1; // external file only constains 1 time step so far.
-	  dims[1] = numbering->getGlobalSize();
-	  dims[2] = fiberDim;
+	  maxDims[0] = H5S_UNLIMITED;
+	  maxDims[1] = numbering->getGlobalSize();
+	  maxDims[2] = fiberDim;
 	} else {
-	  dims[0] = numbering->getGlobalSize();
-	  dims[1] = fiberDim;
+	  maxDims[0] = numbering->getGlobalSize();
+	  maxDims[1] = fiberDim;
 	} // else
 	// Create 'cell_fields' group if necessary.
 	if (!_h5->hasGroup("/cell_fields"))
@@ -499,7 +499,7 @@
 	
 	_h5->createDatasetRawExternal("/cell_fields", field.label(),
 				      _datasetFilename(field.label()).c_str(),
-				      dims, ndims, H5T_IEEE_F64BE);
+				      maxDims, ndims, H5T_IEEE_F64BE);
 	std::string fullName = std::string("/cell_fields/") + field.label();
 	_h5->writeAttribute(fullName.c_str(), "vector_field_type",
 			    topology::FieldBase::vectorFieldString(field.vectorFieldType()));

Modified: short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/HDF5.cc
===================================================================
--- short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/HDF5.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/libsrc/pylith/meshio/HDF5.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -454,9 +454,6 @@
     if (dtype < 0)
       throw std::runtime_error("Could not get datatype of");
 
-    if (H5Tequal(dtype, datatype) <= 0)
-      throw std::runtime_error("Wrong datatype specified for");
-
     hid_t err = H5Aread(attribute, dtype, value);
     if (err < 0)
       throw std::runtime_error("Could not read");

Modified: short/3D/PyLith/branches/multifields/pylith/bc/BoundaryCondition.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/bc/BoundaryCondition.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/bc/BoundaryCondition.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -31,6 +31,16 @@
 from pylith.utils.PetscComponent import PetscComponent
 from bc import BoundaryCondition as ModuleBoundaryCondition
 
+# Validator for label
+def validateLabel(value):
+  """
+  Validate label for group/nodeset/pset.
+  """
+  if 0 == len(value):
+    raise ValueError("Label for group/nodeset/pset in mesh not specified.")
+  return value
+
+
 # Validator for direction
 def validateDir(value):
   """
@@ -76,7 +86,7 @@
 
     import pyre.inventory
 
-    label = pyre.inventory.str("label", default="")
+    label = pyre.inventory.str("label", default="", validator=validateLabel)
     label.meta['tip'] = "Label identifier for boundary."
 
     upDir = pyre.inventory.list("up_dir", default=[0, 0, 1],
@@ -132,10 +142,16 @@
     """
     Setup members using inventory.
     """
-    PetscComponent._configure(self)
-    ModuleBoundaryCondition.label(self, self.inventory.label)
-    self.upDir = map(float, self.inventory.upDir)
-    self.perfLogger = self.inventory.perfLogger
+    try:
+      PetscComponent._configure(self)
+      ModuleBoundaryCondition.label(self, self.inventory.label)
+      self.upDir = map(float, self.inventory.upDir)
+      self.perfLogger = self.inventory.perfLogger
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring boundary condition "
+                       "(%s):\n%s" % (aliases, err.message))
+                         
     return
 
 

Modified: short/3D/PyLith/branches/multifields/pylith/bc/DirichletBC.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/bc/DirichletBC.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/bc/DirichletBC.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -114,8 +114,13 @@
     """
     Setup members using inventory.
     """
-    BoundaryCondition._configure(self)
-    TimeDependentPoints._configure(self)
+    try:
+      BoundaryCondition._configure(self)
+      TimeDependentPoints._configure(self)
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring Dirichlet boundary condition "
+                       "(%s):\n%s" % (aliases, err.message))
     return
 
 

Modified: short/3D/PyLith/branches/multifields/pylith/bc/ZeroDispDB.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/bc/ZeroDispDB.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/bc/ZeroDispDB.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -56,7 +56,9 @@
     values = ["displacement-x", "displacement-y", "displacement-z"]
     data = [0.0*m, 0.0*m, 0.0*m]
 
+    label = pyre.inventory.str("label", default="Zero displacement BC.")
 
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="zerodispdb"):

Modified: short/3D/PyLith/branches/multifields/pylith/faults/Fault.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/faults/Fault.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/faults/Fault.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -29,6 +29,16 @@
 from pylith.utils.PetscComponent import PetscComponent
 from faults import Fault as ModuleFault
 
+# Validator for label
+def validateLabel(value):
+  """
+  Validate label for group/nodeset/pset.
+  """
+  if 0 == len(value):
+    raise ValueError("Label for group/nodeset/pset in mesh not specified.")
+  return value
+
+
 # Validator for direction
 def validateDir(value):
   """
@@ -77,8 +87,8 @@
   matId.meta['tip'] = "Fault identifier (must be unique across all faults " \
       "and materials)."
   
-  faultLabel = pyre.inventory.str("label", default="")
-  faultLabel.meta['tip'] = "Name of fault."
+  faultLabel = pyre.inventory.str("label", default="", validator=validateLabel)
+  faultLabel.meta['tip'] = "Label identifier for fault."
   
   upDir = pyre.inventory.list("up_dir", default=[0, 0, 1],
                               validator=validateDir)
@@ -216,12 +226,17 @@
     """
     Setup members using inventory.
     """
-    PetscComponent._configure(self)
-    self.faultQuadrature = self.inventory.faultQuadrature
-    self.upDir = map(float, self.inventory.upDir)
-    ModuleFault.id(self, self.inventory.matId)
-    ModuleFault.label(self, self.inventory.faultLabel)
-    self.perfLogger = self.inventory.perfLogger
+    try:
+      PetscComponent._configure(self)
+      self.faultQuadrature = self.inventory.faultQuadrature
+      self.upDir = map(float, self.inventory.upDir)
+      ModuleFault.id(self, self.inventory.matId)
+      ModuleFault.label(self, self.inventory.faultLabel)
+      self.perfLogger = self.inventory.perfLogger
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring fault "
+                       "(%s):\n%s" % (aliases, err.message))
     return
 
   

Modified: short/3D/PyLith/branches/multifields/pylith/feassemble/FIATLagrange.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/feassemble/FIATLagrange.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/feassemble/FIATLagrange.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -406,13 +406,18 @@
     """
     Set members based using inventory.
     """
-    ReferenceCell._configure(self)
-    self.cellDim = self.inventory.dimension
-    self.degree = self.inventory.degree
-    self.order = self.inventory.order
-
-    if self.order == -1:
-      self.order = self.degree+1
+    try:
+      ReferenceCell._configure(self)
+      self.cellDim = self.inventory.dimension
+      self.degree = self.inventory.degree
+      self.order = self.inventory.order
+      
+      if self.order == -1:
+        self.order = self.degree+1
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring quadrature "
+                       "(%s):\n%s" % (aliases, err.message))
     return
 
 

Modified: short/3D/PyLith/branches/multifields/pylith/feassemble/FIATSimplex.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/feassemble/FIATSimplex.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/feassemble/FIATSimplex.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -158,12 +158,17 @@
     """
     Set members based using inventory.
     """
-    ReferenceCell._configure(self)
-    self.shape = self.inventory.shape
-    self.degree = self.inventory.degree
-    self.order = self.inventory.order
-    if self.order == -1:
-      self.order = self.degree
+    try:
+      ReferenceCell._configure(self)
+      self.shape = self.inventory.shape
+      self.degree = self.inventory.degree
+      self.order = self.inventory.order
+      if self.order == -1:
+        self.order = self.degree
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring quadrature "
+                       "(%s):\n%s" % (aliases, err.message))
     return
 
   

Modified: short/3D/PyLith/branches/multifields/pylith/friction/FrictionModel.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/friction/FrictionModel.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/friction/FrictionModel.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -32,6 +32,16 @@
 
 from pylith.utils.PetscComponent import PetscComponent
 
+# Validator for label
+def validateLabel(value):
+  """
+  Validate descriptive label.
+  """
+  if 0 == len(value):
+    raise ValueError("Discriptive label for friction model not specified.")
+  return value
+
+
 # FrictionModel class
 class FrictionModel(PetscComponent):
   """
@@ -63,8 +73,8 @@
 
     import pyre.inventory
 
-    label = pyre.inventory.str("label", default="")
-    label.meta['tip'] = "Name of the friction model."
+    label = pyre.inventory.str("label", default="", validator=validateLabel)
+    label.meta['tip'] = "Descriptive label for friction model."
 
     from spatialdata.spatialdb.SimpleDB import SimpleDB
     dbProperties = pyre.inventory.facility("db_properties",
@@ -109,14 +119,19 @@
     """
     Setup members using inventory.
     """
-    PetscComponent._configure(self)
-    self.label(self.inventory.label)
-    self.dbProperties(self.inventory.dbProperties)
-    from pylith.utils.NullComponent import NullComponent
-    if not isinstance(self.inventory.dbInitialState, NullComponent):
-      self.dbInitialState(self.inventory.dbInitialState)
+    try:
+      PetscComponent._configure(self)
+      self.label(self.inventory.label)
+      self.dbProperties(self.inventory.dbProperties)
+      from pylith.utils.NullComponent import NullComponent
+      if not isinstance(self.inventory.dbInitialState, NullComponent):
+        self.dbInitialState(self.inventory.dbInitialState)
 
-    self.perfLogger = self.inventory.perfLogger
+      self.perfLogger = self.inventory.perfLogger
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring friction model "
+                       "(%s):\n%s" % (aliases, err.message))
     return
 
   

Modified: short/3D/PyLith/branches/multifields/pylith/materials/Material.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/materials/Material.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/materials/Material.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -32,6 +32,16 @@
 
 from pylith.utils.PetscComponent import PetscComponent
 
+# Validator for label
+def validateLabel(value):
+  """
+  Validate descriptive label.
+  """
+  if 0 == len(value):
+    raise ValueError("Descriptive label for material not specified.")
+  return value
+
+
 # Material class
 class Material(PetscComponent):
   """
@@ -56,7 +66,7 @@
     ##
     ## \b Properties
     ## @li \b id Material identifier (from mesh generator)
-    ## @li \b name Name of material
+    ## @li \b label Descriptive label for material.
     ##
     ## \b Facilities
     ## @li \b db_properties Database of material property parameters
@@ -68,8 +78,8 @@
     id = pyre.inventory.int("id", default=0)
     id.meta['tip'] = "Material identifier (from mesh generator)."
 
-    label = pyre.inventory.str("label", default="")
-    label.meta['tip'] = "Name of material."
+    label = pyre.inventory.str("label", default="", validator=validateLabel)
+    label.meta['tip'] = "Descriptive label for material."
 
     from spatialdata.spatialdb.SimpleDB import SimpleDB
     dbProperties = pyre.inventory.facility("db_properties",
@@ -169,16 +179,21 @@
     """
     Setup members using inventory.
     """
-    PetscComponent._configure(self)
-    self.id(self.inventory.id)
-    self.label(self.inventory.label)
-    self.dbProperties(self.inventory.dbProperties)
-    from pylith.utils.NullComponent import NullComponent
-    if not isinstance(self.inventory.dbInitialState, NullComponent):
-      self.dbInitialState(self.inventory.dbInitialState)
+    try:
+      PetscComponent._configure(self)
+      self.id(self.inventory.id)
+      self.label(self.inventory.label)
+      self.dbProperties(self.inventory.dbProperties)
+      from pylith.utils.NullComponent import NullComponent
+      if not isinstance(self.inventory.dbInitialState, NullComponent):
+        self.dbInitialState(self.inventory.dbInitialState)
 
-    self.quadrature = self.inventory.quadrature
-    self.perfLogger = self.inventory.perfLogger
+      self.quadrature = self.inventory.quadrature
+      self.perfLogger = self.inventory.perfLogger
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring material "
+                       "(%s):\n%s" % (aliases, err.message))
     return
 
   

Modified: short/3D/PyLith/branches/multifields/pylith/meshio/DataWriterVTK.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/meshio/DataWriterVTK.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/meshio/DataWriterVTK.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -82,4 +82,19 @@
     return
 
 
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Configure object.
+    """
+    try:
+      DataWriter._configure(self)
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring VTK output "
+                       "(%s):\n%s" % (aliases, err.message))
+
+    return
+
 # End of file 

Modified: short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOAscii.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOAscii.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOAscii.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -26,6 +26,16 @@
 from MeshIOObj import MeshIOObj
 from meshio import MeshIOAscii as ModuleMeshIOAscii
 
+# Validator for filename
+def validateFilename(value):
+  """
+  Validate filename.
+  """
+  if 0 == len(value):
+    raise ValueError("Filename for ASCII input mesh not specified.")
+  return value
+
+
 # MeshIOAscii class
 class MeshIOAscii(MeshIOObj, ModuleMeshIOAscii):
   """
@@ -53,7 +63,8 @@
 
     import pyre.inventory
 
-    filename = pyre.inventory.str("filename", default="")
+    filename = pyre.inventory.str("filename", default="", 
+                                  validator=validateFilename)
     filename.meta['tip'] = "Name of mesh file"
 
     from spatialdata.geocoords.CSCart import CSCart

Modified: short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOCubit.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOCubit.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOCubit.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -26,6 +26,16 @@
 from MeshIOObj import MeshIOObj
 from meshio import MeshIOCubit as ModuleMeshIOCubit
 
+# Validator for filename
+def validateFilename(value):
+  """
+  Validate filename.
+  """
+  if 0 == len(value):
+    raise ValueError("Filename for CUBIT input mesh not specified.")
+  return value
+
+
 # MeshIOCubit class
 class MeshIOCubit(MeshIOObj, ModuleMeshIOCubit):
   """
@@ -53,7 +63,8 @@
 
     import pyre.inventory
 
-    filename = pyre.inventory.str("filename", default="mesh.exo")
+    filename = pyre.inventory.str("filename", default="mesh.exo",
+                                  validator=validateFilename)
     filename.meta['tip'] = "Name of Cubit Exodus file."
 
     useNames = pyre.inventory.bool("use_nodeset_names", default=True)

Modified: short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOLagrit.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOLagrit.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/meshio/MeshIOLagrit.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -26,6 +26,26 @@
 from MeshIOObj import MeshIOObj
 from meshio import MeshIOLagrit as ModuleMeshIOLagrit
 
+# Validator for filename
+def validateFilenameGmv(value):
+  """
+  Validate filename.
+  """
+  if 0 == len(value):
+    raise ValueError("Filename for LaGriT input mesh not specified.")
+  return value
+
+
+# Validator for filename
+def validateFilenamePset(value):
+  """
+  Validate filename.
+  """
+  if 0 == len(value):
+    raise ValueError("Filename for LaGriT pset file not specified.")
+  return value
+
+
 # MeshIOLagrit class
 class MeshIOLagrit(MeshIOObj, ModuleMeshIOLagrit):
   """
@@ -56,10 +76,12 @@
 
     import pyre.inventory
 
-    filenameGmv = pyre.inventory.str("filename_gmv", default="mesh.gmv")
+    filenameGmv = pyre.inventory.str("filename_gmv", default="mesh.gmv",
+                                     validator=validateFilenameGmv)
     filenameGmv.meta['tip'] = "Name of mesh GMV file."
 
-    filenamePset = pyre.inventory.str("filename_pset", default="mesh.pset")
+    filenamePset = pyre.inventory.str("filename_pset", default="mesh.pset",
+                                      validator=validateFilenamePset)
     filenamePset.meta['tip'] = "Name of mesh PSET file."
 
     flipEndian = pyre.inventory.bool("flip_endian", default=False)

Modified: short/3D/PyLith/branches/multifields/pylith/meshio/OutputSolnSubset.py
===================================================================
--- short/3D/PyLith/branches/multifields/pylith/meshio/OutputSolnSubset.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/pylith/meshio/OutputSolnSubset.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -26,6 +26,16 @@
 from OutputManager import OutputManager
 from meshio import OutputSolnSubset as ModuleOutputSolnSubset
 
+# Validator for label
+def validateLabel(value):
+  """
+  Validate label for group/nodeset/pset.
+  """
+  if 0 == len(value):
+    raise ValueError("Label for group/nodeset/pset in mesh not specified.")
+  return value
+
+
 # OutputSolnSubset class
 class OutputSolnSubset(OutputManager, ModuleOutputSolnSubset):
   """
@@ -53,7 +63,7 @@
                                          default=["displacement"])
   vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
   
-  label = pyre.inventory.str("label", default="")
+  label = pyre.inventory.str("label", default="", validator=validateLabel)
   label.meta['tip'] = "Label identifier for subdomain."
 
   from DataWriterVTKSubMesh import DataWriterVTKSubMesh
@@ -138,15 +148,21 @@
     """
     Set members based using inventory.
     """
-    OutputManager._configure(self)
-    ModuleOutputSolnSubset.label(self, self.label)
-    ModuleOutputSolnSubset.coordsys(self, self.inventory.coordsys)
-    ModuleOutputSolnSubset.writer(self, self.inventory.writer)
-    from pylith.utils.NullComponent import NullComponent
-    if not isinstance(self.inventory.vertexFilter, NullComponent):
-      ModuleOutputSolnSubset.vertexFilter(self, self.inventory.vertexFilter)
-    if not isinstance(self.inventory.cellFilter, NullComponent):
-      ModuleOutputSolnSubset.cellFilter(self, self.inventory.cellFilter)
+    try:
+      OutputManager._configure(self)
+      ModuleOutputSolnSubset.label(self, self.label)
+      ModuleOutputSolnSubset.coordsys(self, self.inventory.coordsys)
+      ModuleOutputSolnSubset.writer(self, self.inventory.writer)
+      from pylith.utils.NullComponent import NullComponent
+      if not isinstance(self.inventory.vertexFilter, NullComponent):
+        ModuleOutputSolnSubset.vertexFilter(self, self.inventory.vertexFilter)
+      if not isinstance(self.inventory.cellFilter, NullComponent):
+        ModuleOutputSolnSubset.cellFilter(self, self.inventory.cellFilter)
+    except ValueError as err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring output over boundary "
+                       "(%s):\n%s" % (aliases, err.message))
+
     return
 
 

Modified: short/3D/PyLith/branches/multifields/setup.py
===================================================================
--- short/3D/PyLith/branches/multifields/setup.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/setup.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -22,7 +22,7 @@
 setup(
     
     name = 'PyLith', 
-    version = '1.6.0',
+    version = '1.6.1',
 
     zip_safe = False,
     packages = find_packages(),

Modified: short/3D/PyLith/branches/multifields/tests/2d/faultstrip/dynamic_slipweakening.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests/2d/faultstrip/dynamic_slipweakening.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests/2d/faultstrip/dynamic_slipweakening.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -8,9 +8,10 @@
 
 # Use slip-weakening friction
 friction = pylith.friction.SlipWeakening
+friction.label = Slip weakening
 
 friction.db_properties = spatialdata.spatialdb.UniformDB
-friction.db_properties.label = Slip weakening
+friction.db_properties.label = Slip weakening parameters
 friction.db_properties.values = [static-coefficient,dynamic-coefficient,slip-weakening-parameter,cohesion]
 friction.db_properties.data = [0.6,0.3,0.2*m,0.0*Pa]
 

Modified: short/3D/PyLith/branches/multifields/tests/2d/faultstrip/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests/2d/faultstrip/pylithapp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests/2d/faultstrip/pylithapp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -64,6 +64,7 @@
 label = Elastic material
 id = 1
 db_properties = spatialdata.spatialdb.UniformDB
+db_properties.label = Elastic properties
 db_properties.values = [density,vp,vs]
 db_properties.data = [2500*kg/m**3,1732.0*m/s,1000.0*m/s]
 

Deleted: short/3D/PyLith/branches/multifields/tests/refinefaulttip/Makefile.in
===================================================================
--- short/3D/PyLith/branches/multifields/tests/refinefaulttip/Makefile.in	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests/refinefaulttip/Makefile.in	2011-07-15 17:04:26 UTC (rev 18769)
@@ -1,447 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# -*- Makefile -*-
-#
-# ----------------------------------------------------------------------
-#
-# Brad T. Aagaard, U.S. Geological Survey
-# Charles A. Williams, GNS Science
-# Matthew G. Knepley, University of Chicago
-#
-# This code was developed as part of the Computational Infrastructure
-# for Geodynamics (http://geodynamics.org).
-#
-# Copyright (c) 2010-2011 University of California, Davis
-#
-# See COPYING for license information.
-#
-# ----------------------------------------------------------------------
-#
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = tests/refinefaulttip
-DIST_COMMON = $(dist_noinst_DATA) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ac_pkg_swig.m4 \
-	$(top_srcdir)/m4/cit_cppunit.m4 $(top_srcdir)/m4/cit_cuda.m4 \
-	$(top_srcdir)/m4/cit_funcstring.m4 \
-	$(top_srcdir)/m4/cit_hdf5.m4 $(top_srcdir)/m4/cit_mpi.m4 \
-	$(top_srcdir)/m4/cit_netcdf.m4 $(top_srcdir)/m4/cit_numpy.m4 \
-	$(top_srcdir)/m4/cit_petsc.m4 $(top_srcdir)/m4/cit_proj4.m4 \
-	$(top_srcdir)/m4/cit_python.m4 \
-	$(top_srcdir)/m4/cit_spatialdata.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/portinfo
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-DATA = $(dist_noinst_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_LDFLAGS = @AM_LDFLAGS@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUMPY_INCDIR = @NUMPY_INCDIR@
-NVCC = @NVCC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PETSC_ARCH = @PETSC_ARCH@
-PETSC_CC = @PETSC_CC@
-PETSC_CC_INCLUDES = @PETSC_CC_INCLUDES@
-PETSC_CXX = @PETSC_CXX@
-PETSC_CXX_INCLUDE = @PETSC_CXX_INCLUDE@
-PETSC_CXX_LIB = @PETSC_CXX_LIB@
-PETSC_DIR = @PETSC_DIR@
-PETSC_FC = @PETSC_FC@
-PETSC_FC_INCLUDES = @PETSC_FC_INCLUDES@
-PETSC_FORTRAN_LIB = @PETSC_FORTRAN_LIB@
-PETSC_LIB = @PETSC_LIB@
-PETSC_MPI_INCLUDE = @PETSC_MPI_INCLUDE@
-PETSC_MPI_LIB = @PETSC_MPI_LIB@
-PETSC_SIEVE_FLAGS = @PETSC_SIEVE_FLAGS@
-PETSC_VERSION_MAJOR = @PETSC_VERSION_MAJOR@
-PETSC_VERSION_MINOR = @PETSC_VERSION_MINOR@
-PETSC_VERSION_SUBMINOR = @PETSC_VERSION_SUBMINOR@
-PYLITH_SWIG_CPPFLAGS = @PYLITH_SWIG_CPPFLAGS@
-PYTHON = @PYTHON@
-PYTHONPATH = @PYTHONPATH@
-PYTHON_BLDLIBRARY = @PYTHON_BLDLIBRARY@
-PYTHON_EGG_CFLAGS = @PYTHON_EGG_CFLAGS@
-PYTHON_EGG_CPPFLAGS = @PYTHON_EGG_CPPFLAGS@
-PYTHON_EGG_LDFLAGS = @PYTHON_EGG_LDFLAGS@
-PYTHON_EGG_LIBS = @PYTHON_EGG_LIBS@
-PYTHON_EGG_PYXFLAGS = @PYTHON_EGG_PYXFLAGS@
-PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-PYTHON_INCDIR = @PYTHON_INCDIR@
-PYTHON_LA_LDFLAGS = @PYTHON_LA_LDFLAGS@
-PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
-PYTHON_LDLAST = @PYTHON_LDLAST@
-PYTHON_LDLIBRARY = @PYTHON_LDLIBRARY@
-PYTHON_LIBDIR = @PYTHON_LIBDIR@
-PYTHON_LIBP = @PYTHON_LIBP@
-PYTHON_LIBPL = @PYTHON_LIBPL@
-PYTHON_LIBS = @PYTHON_LIBS@
-PYTHON_LINKFORSHARED = @PYTHON_LINKFORSHARED@
-PYTHON_MODLIBS = @PYTHON_MODLIBS@
-PYTHON_PLATFORM = @PYTHON_PLATFORM@
-PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSLIBS = @PYTHON_SYSLIBS@
-PYTHON_VERSION = @PYTHON_VERSION@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-SWIG = @SWIG@
-SWIG_LIB = @SWIG_LIB@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-have_doxygen = @have_doxygen@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-pkgpyexecdir = @pkgpyexecdir@
-pkgpythondir = @pkgpythondir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-pyexecdir = @pyexecdir@
-pythondir = @pythondir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-dist_noinst_DATA = \
-	tri3.cfg \
-	tri3.mesh \
-	quad4.cfg \
-	quad4.mesh \
-	tet4.cfg \
-	tet4.mesh \
-	hex8.cfg \
-	hex8.mesh
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/refinefaulttip/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign tests/refinefaulttip/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
-
-# End of file 
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

Modified: short/3D/PyLith/branches/multifields/tests_auto/1d/line2/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/1d/line2/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/1d/line2/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -51,6 +51,7 @@
 [dislocation.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = line
 
@@ -75,7 +76,9 @@
 quadrature.cell.shape = point
 
 [dislocation.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Final slip
 slip.iohandler.filename = finalslip.spatialdb
+slip_time.label = Slip time
 slip_time.iohandler.filename = sliptime.spatialdb
 
 

Modified: short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensiondisp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensiondisp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensiondisp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
 [extensiondisp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = line
 

Modified: short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensionforce.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensionforce.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/1d/line2/extensionforce.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -48,6 +48,7 @@
 [extensionforce.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = line
 
@@ -64,6 +65,7 @@
 [extensionforce.timedependent.bc.fixed]
 bc_dof = [0]
 label = fault
+#db_initial.label = Zero displacement bc.
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/tests_auto/1d/line2/lgdeformtranslation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/1d/line2/lgdeformtranslation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/1d/line2/lgdeformtranslation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -50,6 +50,7 @@
 [pylithapp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = line
 

Modified: short/3D/PyLith/branches/multifields/tests_auto/1d/line3/axialextension.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/1d/line3/axialextension.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/1d/line3/axialextension.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
 [axialextension.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = line
 quadrature.cell.degree = 2

Modified: short/3D/PyLith/branches/multifields/tests_auto/1d/line3/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/1d/line3/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/1d/line3/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
 [dislocation.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = line
 quadrature.cell.degree = 2
@@ -74,7 +75,9 @@
 quadrature.cell.shape = point
 
 [dislocation.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.label = Final slip
 slip.iohandler.filename = finalslip.spatialdb
+slip_time.label = Slip time
 slip_time.iohandler.filename = sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/axialdisp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/axialdisp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/axialdisp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
 [axialdisp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -50,6 +50,7 @@
 [dislocation.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation2.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation2.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/dislocation2.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -55,6 +55,7 @@
 [pylithapp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_compression.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_compression.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_compression.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -40,13 +40,10 @@
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'y_neg' and 'x_pos'.
 bc = [x_neg,y_neg,x_pos]
 
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
-
 [friction_compression.timedependent.formulation.time_step]
 total_time = 0.0*s
 dt = 1.0*s
@@ -61,19 +58,12 @@
 material = pylith.materials.ElasticPlaneStrain
 
 [friction_compression.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
-label = elastic material
-
-# The cells associated with this material are given a material ID of 1
-# in the mesh file.
+label = Elastic material
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matprops.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
@@ -82,17 +72,14 @@
 # ----------------------------------------------------------------------
 # Provide information on the boundary conditions.
 
-# Boundary conditions to be applied to the negative x-side of the mesh.
 [friction_compression.timedependent.bc.x_neg]
 bc_dof = [0]
 label = 21
 
-# Boundary conditions to be applied to the negative y-side of the mesh.
 [friction_compression.timedependent.bc.y_neg]
 bc_dof = [1]
 label = 24
 
-# Boundary conditions to be applied to the positive x-side of the mesh.
 [friction_compression.timedependent.bc.x_pos]
 bc_dof = [0]
 label = 20
@@ -110,13 +97,10 @@
 
 fault = pylith.faults.FaultCohesiveDyn
 
-# Define fault properties.
 [friction_compression.timedependent.interfaces.fault]
 
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
 
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -125,6 +109,7 @@
 db_initial_tractions.values = [traction-shear,traction-normal]
 db_initial_tractions.data = [0.0*Pa, -1.0*MPa]
 
+friction.label = Static friction
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Static friction
 friction.db_properties.values = [friction-coefficient,cohesion]

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_opening.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_opening.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_opening.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -41,24 +41,15 @@
 # ----------------------------------------------------------------------
 # problem
 # ----------------------------------------------------------------------
-# Specify the problem settings.
-# This is a time-dependent problem, so we select this as our problem type.
-# We select a total time of 0 sec, and a time step size of 1 sec, so we
-# are performing a single time step.
-# The spatial dimension for this problem is 2.
-# For an implicit formulation (using implicit.cfg), we will perform 1
-# implicit time step from t = -1.0 to t = 0.0 (elastic solution step).
 [friction_opening.timedependent]
 dimension = 2
 normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 2 boundary conditions: 'x_neg', 'x_pos'
 bc = [x_neg,x_pos]
 bc.x_pos=pylith.bc.DirichletBoundary
 
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
 
@@ -70,51 +61,28 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
-# Specify the material information for the problem.
-# The material type is isotropic elastic formulated for plane strain.
 [friction_opening.timedependent.materials]
 material = pylith.materials.ElasticPlaneStrain
 
 [friction_opening.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
-label = elastic material
-
-# The cells associated with this material are given a material ID of 0
-# in the mesh file.
+label = Elastic material
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matelastic2D.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
-# Provide information on the boundary conditions.
-
-# Boundary conditions to be applied to the negative x-side of the mesh.
 [friction_opening.timedependent.bc.x_neg]
-
-# We are fixing the 0 (x) and 1 (y) degree of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_neg' in the mesh file.
 label = 21
 
-# Boundary conditions to be applied to the positive x-side of the mesh.
 [friction_opening.timedependent.bc.x_pos]
-
-# We are fixing the 1 (y) and prescribing 0 (x) degree of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -130,32 +98,18 @@
 
 fault = pylith.faults.FaultCohesiveDyn
 
-# Define fault properties.
 [friction_opening.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
 
-# NOTE: It is possible to assign an ID number to a fault (e.g.,
-# 'id = 10').  Care must be taken when doing this, however, because the
-# assigned ID will become the material ID for the cohesive element.
-# This ID must not conflict with any of the material ID numbers for
-# volume elements.  The default ID for a fault is 100.  If you have a
-# fault in your mesh you must:
-# 1.  If you create your own fault ID, make sure it does not conflict
-#     with any of you material ID's.
-# 2.  If you use the default fault ID, make sure that none of your
-#     material ID's are equal to 100.
-
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
 db_initial_tractions = spatialdata.spatialdb.UniformDB
-db_initial_tractions.label = "Initial fault tractions"
+db_initial_tractions.label = Initial fault tractions
 db_initial_tractions.values = [traction-shear,traction-normal]
 db_initial_tractions.data = [0.0*Pa, -1.0*MPa]
 
+friction.label = Static friction
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Static friction
 friction.db_properties.values = [friction-coefficient,cohesion]

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_sliding.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_sliding.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_sliding.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -30,9 +30,6 @@
 #debug = 1
 reader = pylith.meshio.MeshIOCubit
 
-# This component specification means we are using PyLith ASCII format,
-# and we then specify the filename and number of space dimensions for
-# the mesh.
 [friction_shear_sliding.mesh_generator.reader]
 filename = mesh.exo
 use_nodeset_names = False
@@ -41,26 +38,17 @@
 # ----------------------------------------------------------------------
 # problem
 # ----------------------------------------------------------------------
-# Specify the problem settings.
-# This is a time-dependent problem, so we select this as our problem type.
-# We select a total time of 0 sec, and a time step size of 1 sec, so we
-# are performing a single time step.
-# The spatial dimension for this problem is 2.
-# For an implicit formulation (using implicit.cfg), we will perform 1
-# implicit time step from t = -1.0 to t = 0.0 (elastic solution step).
 [friction_shear_sliding.timedependent]
 dimension = 2
 normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 2 boundary conditions: 'x_neg', 'x_pos'
 bc = [x_neg,x_pos,y_pos_fault,y_neg_fault]
 bc.x_pos = pylith.bc.DirichletBoundary
 bc.y_pos_fault = pylith.bc.Neumann
 bc.y_neg_fault = pylith.bc.Neumann
 
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
 
@@ -72,51 +60,27 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
-# Specify the material information for the problem.
-# The material type is isotropic elastic formulated for plane strain.
 [friction_shear_sliding.timedependent.materials]
 material = pylith.materials.ElasticPlaneStrain
 
 [friction_shear_sliding.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
-label = elastic material
-
-# The cells associated with this material are given a material ID of 0
-# in the mesh file.
+label = Elastic material
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matelastic2D.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
-
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
-# Provide information on the boundary conditions.
-
-# Boundary conditions to be applied to the negative x-side of the mesh.
 [friction_shear_sliding.timedependent.bc.x_neg]
-
-# We are fixing the 0 (x) and 1 (y) degrees of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_neg' in the mesh file.
 label = 21
 
-# Boundary conditions to be applied to the positive x-side of the mesh.
 [friction_shear_sliding.timedependent.bc.x_pos]
-
-# We are fixing the 0 (x) and prescribing 1 (y) degree of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -126,11 +90,7 @@
 
 
 
-# Boundary conditions to be applied to the positive y-side of the mesh.
 [friction_shear_sliding.timedependent.bc.y_pos_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_pos_fault' in the mesh file.
 label = 22
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -138,15 +98,10 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-0.6*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
-# Boundary conditions to be applied to the negative y-side of the mesh.
 [friction_shear_sliding.timedependent.bc.y_neg_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_neg_fault' in the mesh file.
 label = 23
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -154,7 +109,6 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-0.6*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -163,35 +117,19 @@
 # ----------------------------------------------------------------------
 # Provide information on the fault (interface).
 [friction_shear_sliding.timedependent.interfaces]
-
 fault = pylith.faults.FaultCohesiveDyn
 
-# Define fault properties.
 [friction_shear_sliding.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
-
-# NOTE: It is possible to assign an ID number to a fault (e.g.,
-# 'id = 10').  Care must be taken when doing this, however, because the
-# assigned ID will become the material ID for the cohesive element.
-# This ID must not conflict with any of the material ID numbers for
-# volume elements.  The default ID for a fault is 100.  If you have a
-# fault in your mesh you must:
-# 1.  If you create your own fault ID, make sure it does not conflict
-#     with any of you material ID's.
-# 2.  If you use the default fault ID, make sure that none of your
-#     material ID's are equal to 100.
-
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
 db_initial_tractions = spatialdata.spatialdb.UniformDB
-db_initial_tractions.label = "Initial fault tractions"
+db_initial_tractions.label = Initial fault tractions
 db_initial_tractions.values = [traction-shear,traction-normal]
 db_initial_tractions.data = [0.0*Pa, -1.0*MPa]
 
+friction.label = Static friction
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Static friction
 friction.db_properties.values = [friction-coefficient,cohesion]

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_stick.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_stick.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/friction_shear_stick.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -24,15 +24,10 @@
 # ----------------------------------------------------------------------
 # mesh_generator
 # ----------------------------------------------------------------------
-# The settings below control the mesh generation (importing mesh info).
-# Turn on debugging output for mesh generation.
 [friction_shear_stick.mesh_generator]
 #debug = 1
 reader = pylith.meshio.MeshIOCubit
 
-# This component specification means we are using PyLith ASCII format,
-# and we then specify the filename and number of space dimensions for
-# the mesh.
 [friction_shear_stick.mesh_generator.reader]
 filename = mesh.exo
 use_nodeset_names = False
@@ -41,26 +36,17 @@
 # ----------------------------------------------------------------------
 # problem
 # ----------------------------------------------------------------------
-# Specify the problem settings.
-# This is a time-dependent problem, so we select this as our problem type.
-# We select a total time of 0 sec, and a time step size of 1 sec, so we
-# are performing a single time step.
-# The spatial dimension for this problem is 2.
-# For an implicit formulation (using implicit.cfg), we will perform 1
-# implicit time step from t = -1.0 to t = 0.0 (elastic solution step).
 [friction_shear_stick.timedependent]
 dimension = 2
 normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos_disp', 'x_pos_tract'
 bc = [x_neg,x_pos_disp,x_pos_tract,y_pos_fault,y_neg_fault]
 bc.x_pos_tract = pylith.bc.Neumann
 bc.y_pos_fault = pylith.bc.Neumann
 bc.y_neg_fault = pylith.bc.Neumann
 
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
 [friction_shear_stick.timedependent.formulation.time_step]
@@ -71,22 +57,14 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
-# Specify the material information for the problem.
-# The material type is isotropic elastic formulated for plane strain.
 [friction_shear_stick.timedependent.materials]
 material = pylith.materials.ElasticPlaneStrain
 
 [friction_shear_stick.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
 label = elastic material
-
-# The cells associated with this material are given a material ID of 0
-# in the mesh file.
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matelastic2D.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 # Set cell type to quadrilateral (2-d Lagrange).
@@ -96,33 +74,15 @@
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
-# Provide information on the boundary conditions.
-
-# Boundary conditions to be applied to the negative x-side of the mesh.
 [friction_shear_stick.timedependent.bc.x_neg]
-
-# We are fixing the 0 (x) and 1 (y) degrees of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_neg' in the mesh file.
 label = 21
 
-# Boundary conditions to be applied to the positive x-side of the mesh.
 [friction_shear_stick.timedependent.bc.x_pos_disp]
-
-# We are fixing the 0 (x) degree of freedom.
 bc_dof = [0]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
-# Boundary conditions to be applied to the positive x-side of the mesh.
 [friction_shear_stick.timedependent.bc.x_pos_tract]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -130,18 +90,11 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [1.0*MPa,0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
 
-
-
-# Boundary conditions to be applied to the positive y-side of the mesh.
 [friction_shear_stick.timedependent.bc.y_pos_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_pos_fault' in the mesh file.
 label = 22
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -149,15 +102,10 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-1.0*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
-# Boundary conditions to be applied to the negative y-side of the mesh.
 [friction_shear_stick.timedependent.bc.y_neg_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_neg_fault' in the mesh file.
 label = 23
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -165,7 +113,6 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-1.0*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -205,6 +152,7 @@
 db_initial_tractions.values = [traction-shear,traction-normal]
 db_initial_tractions.data = [0.0*Pa, -10.0*MPa]
 
+friction.label = Static friction
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Static friction
 friction.db_properties.values = [friction-coefficient,cohesion]

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformrigidbody.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformrigidbody.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformrigidbody.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -52,6 +52,7 @@
 [lgdeformrigidbody.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformtraction.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformtraction.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/lgdeformtraction.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -52,6 +52,7 @@
 [lgdeformtraction.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/sheardisp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/sheardisp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/sheardisp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
 [sheardisp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_compression.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_compression.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_compression.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -40,10 +40,7 @@
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'y_neg' and 'x_pos'.
 bc = [x_neg,y_neg,x_pos]
-
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
 
@@ -55,34 +52,22 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
-# Specify the material information for the problem.
-# The material type is isotropic elastic formulated for plane strain.
 [slipweakening_compression.timedependent.materials]
 material = pylith.materials.ElasticPlaneStrain
 
 [slipweakening_compression.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
-label = elastic material
-
-# The cells associated with this material are given a material ID of 1
-# in the mesh file.
+label = Elastic material
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matprops.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
-# Provide information on the boundary conditions.
-
-# Boundary conditions to be applied to the negative x-side of the mesh.
 [slipweakening_compression.timedependent.bc.x_neg]
 bc_dof = [0]
 label = 21
@@ -112,11 +97,8 @@
 
 # Define fault properties.
 [slipweakening_compression.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
 
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -126,6 +108,7 @@
 db_initial_tractions.data = [0.0*Pa, -1.0*MPa]
 
 friction = pylith.friction.SlipWeakening
+friction.label = Slip-weakening friction
 
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Slip weakening

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_opening.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_opening.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_opening.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -24,15 +24,10 @@
 # ----------------------------------------------------------------------
 # mesh_generator
 # ----------------------------------------------------------------------
-# The settings below control the mesh generation (importing mesh info).
-# Turn on debugging output for mesh generation.
 [slipweakening_opening.mesh_generator]
 #debug = 1
 reader = pylith.meshio.MeshIOCubit
 
-# This component specification means we are using PyLith ASCII format,
-# and we then specify the filename and number of space dimensions for
-# the mesh.
 [slipweakening_opening.mesh_generator.reader]
 filename = mesh.exo
 use_nodeset_names = False
@@ -41,24 +36,15 @@
 # ----------------------------------------------------------------------
 # problem
 # ----------------------------------------------------------------------
-# Specify the problem settings.
-# This is a time-dependent problem, so we select this as our problem type.
-# We select a total time of 0 sec, and a time step size of 1 sec, so we
-# are performing a single time step.
-# The spatial dimension for this problem is 2.
-# For an implicit formulation (using implicit.cfg), we will perform 1
-# implicit time step from t = -1.0 to t = 0.0 (elastic solution step).
 [slipweakening_opening.timedependent]
 dimension = 2
 normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 2 boundary conditions: 'x_neg', 'x_pos'
 bc = [x_neg,x_pos]
 bc.x_pos=pylith.bc.DirichletBoundary
 
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
 
@@ -70,51 +56,30 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
-# Specify the material information for the problem.
-# The material type is isotropic elastic formulated for plane strain.
 [slipweakening_opening.timedependent.materials]
 material = pylith.materials.ElasticPlaneStrain
 
 [slipweakening_opening.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
 label = elastic material
-
-# The cells associated with this material are given a material ID of 0
-# in the mesh file.
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matelastic2D.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
-# Provide information on the boundary conditions.
-
 # Boundary conditions to be applied to the negative x-side of the mesh.
 [slipweakening_opening.timedependent.bc.x_neg]
-
-# We are fixing the 0 (x) and 1 (y) degree of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_neg' in the mesh file.
 label = 21
 
 # Boundary conditions to be applied to the positive x-side of the mesh.
 [slipweakening_opening.timedependent.bc.x_pos]
-
-# We are fixing the 1 (y) and prescribing 0 (x) degree of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -132,22 +97,7 @@
 
 # Define fault properties.
 [slipweakening_opening.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
-
-# NOTE: It is possible to assign an ID number to a fault (e.g.,
-# 'id = 10').  Care must be taken when doing this, however, because the
-# assigned ID will become the material ID for the cohesive element.
-# This ID must not conflict with any of the material ID numbers for
-# volume elements.  The default ID for a fault is 100.  If you have a
-# fault in your mesh you must:
-# 1.  If you create your own fault ID, make sure it does not conflict
-#     with any of you material ID's.
-# 2.  If you use the default fault ID, make sure that none of your
-#     material ID's are equal to 100.
-
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -157,6 +107,7 @@
 db_initial_tractions.data = [0.0*Pa, -1.0*MPa]
 
 friction = pylith.friction.SlipWeakening
+friction.label = Slip-weakening friction
 
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Slip weakening

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -24,15 +24,10 @@
 # ----------------------------------------------------------------------
 # mesh_generator
 # ----------------------------------------------------------------------
-# The settings below control the mesh generation (importing mesh info).
-# Turn on debugging output for mesh generation.
 [slipweakening_shear_sliding.mesh_generator]
 #debug = 1
 reader = pylith.meshio.MeshIOCubit
 
-# This component specification means we are using PyLith ASCII format,
-# and we then specify the filename and number of space dimensions for
-# the mesh.
 [slipweakening_shear_sliding.mesh_generator.reader]
 filename = mesh.exo
 use_nodeset_names = False
@@ -41,26 +36,17 @@
 # ----------------------------------------------------------------------
 # problem
 # ----------------------------------------------------------------------
-# Specify the problem settings.
-# This is a time-dependent problem, so we select this as our problem type.
-# We select a total time of 0 sec, and a time step size of 1 sec, so we
-# are performing a single time step.
-# The spatial dimension for this problem is 2.
-# For an implicit formulation (using implicit.cfg), we will perform 1
-# implicit time step from t = -1.0 to t = 0.0 (elastic solution step).
 [slipweakening_shear_sliding.timedependent]
 dimension = 2
 normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 2 boundary conditions: 'x_neg', 'x_pos'
 bc = [x_neg,x_pos,y_pos_fault,y_neg_fault]
 bc.x_pos = pylith.bc.DirichletBoundary
 bc.y_pos_fault = pylith.bc.Neumann
 bc.y_neg_fault = pylith.bc.Neumann
 
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
 
@@ -72,51 +58,30 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
-# Specify the material information for the problem.
-# The material type is isotropic elastic formulated for plane strain.
 [slipweakening_shear_sliding.timedependent.materials]
 material = pylith.materials.ElasticPlaneStrain
 
 [slipweakening_shear_sliding.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
 label = elastic material
-
-# The cells associated with this material are given a material ID of 0
-# in the mesh file.
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matelastic2D.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
-# Provide information on the boundary conditions.
-
 # Boundary conditions to be applied to the negative x-side of the mesh.
 [slipweakening_shear_sliding.timedependent.bc.x_neg]
-
-# We are fixing the 0 (x) and 1 (y) degrees of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_neg' in the mesh file.
 label = 21
 
 # Boundary conditions to be applied to the positive x-side of the mesh.
 [slipweakening_shear_sliding.timedependent.bc.x_pos]
-
-# We are fixing the 0 (x) and prescribing 1 (y) degree of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -125,12 +90,8 @@
 db_initial.data = [0.0*m,1.0*m]
 
 
-
 # Boundary conditions to be applied to the positive y-side of the mesh.
 [slipweakening_shear_sliding.timedependent.bc.y_pos_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_pos_fault' in the mesh file.
 label = 22
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -138,15 +99,11 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-0.6*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
 # Boundary conditions to be applied to the negative y-side of the mesh.
 [slipweakening_shear_sliding.timedependent.bc.y_neg_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_neg_fault' in the mesh file.
 label = 23
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -154,36 +111,18 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-0.6*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
 # ----------------------------------------------------------------------
 # faults
 # ----------------------------------------------------------------------
-# Provide information on the fault (interface).
 [slipweakening_shear_sliding.timedependent.interfaces]
 
 fault = pylith.faults.FaultCohesiveDyn
 
-# Define fault properties.
 [slipweakening_shear_sliding.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
-
-# NOTE: It is possible to assign an ID number to a fault (e.g.,
-# 'id = 10').  Care must be taken when doing this, however, because the
-# assigned ID will become the material ID for the cohesive element.
-# This ID must not conflict with any of the material ID numbers for
-# volume elements.  The default ID for a fault is 100.  If you have a
-# fault in your mesh you must:
-# 1.  If you create your own fault ID, make sure it does not conflict
-#     with any of you material ID's.
-# 2.  If you use the default fault ID, make sure that none of your
-#     material ID's are equal to 100.
-
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -193,6 +132,7 @@
 db_initial_tractions.data = [0.0*Pa, -1.0*MPa]
 
 friction = pylith.friction.SlipWeakening
+friction.label = Slip-weakening friction
 
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Slip weakening

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_stick.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_stick.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/quad4/slipweakening_shear_stick.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -24,15 +24,10 @@
 # ----------------------------------------------------------------------
 # mesh_generator
 # ----------------------------------------------------------------------
-# The settings below control the mesh generation (importing mesh info).
-# Turn on debugging output for mesh generation.
 [slipweakening_shear_stick.mesh_generator]
 #debug = 1
 reader = pylith.meshio.MeshIOCubit
 
-# This component specification means we are using PyLith ASCII format,
-# and we then specify the filename and number of space dimensions for
-# the mesh.
 [slipweakening_shear_stick.mesh_generator.reader]
 filename = mesh.exo
 use_nodeset_names = False
@@ -41,26 +36,17 @@
 # ----------------------------------------------------------------------
 # problem
 # ----------------------------------------------------------------------
-# Specify the problem settings.
-# This is a time-dependent problem, so we select this as our problem type.
-# We select a total time of 0 sec, and a time step size of 1 sec, so we
-# are performing a single time step.
-# The spatial dimension for this problem is 2.
-# For an implicit formulation (using implicit.cfg), we will perform 1
-# implicit time step from t = -1.0 to t = 0.0 (elastic solution step).
 [slipweakening_shear_stick.timedependent]
 dimension = 2
 normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos_disp', 'x_pos_tract'
 bc = [x_neg,x_pos_disp,x_pos_tract,y_pos_fault,y_neg_fault]
 bc.x_pos_tract = pylith.bc.Neumann
 bc.y_pos_fault = pylith.bc.Neumann
 bc.y_neg_fault = pylith.bc.Neumann
 
-# Set interfaces to an array with 1 fault: 'fault'.
 interfaces = [fault]
 
 [slipweakening_shear_stick.timedependent.formulation.time_step]
@@ -71,58 +57,31 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
-# Specify the material information for the problem.
-# The material type is isotropic elastic formulated for plane strain.
 [slipweakening_shear_stick.timedependent.materials]
 material = pylith.materials.ElasticPlaneStrain
 
 [slipweakening_shear_stick.timedependent.materials.material]
-
-# We give a label of 'elastic material' to this material.
 label = elastic material
-
-# The cells associated with this material are given a material ID of 0
-# in the mesh file.
 id = 1
 
-# The properties for this material are given in the spatial database file
-# 'matelastic2D.spatialdb'.
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
-# Provide information on the boundary conditions.
-
-# Boundary conditions to be applied to the negative x-side of the mesh.
 [slipweakening_shear_stick.timedependent.bc.x_neg]
-
-# We are fixing the 0 (x) and 1 (y) degrees of freedom.
 bc_dof = [0,1]
-
-# The nodes associated with this boundary condition have the name
-# 'x_neg' in the mesh file.
 label = 21
 
-# Boundary conditions to be applied to the positive x-side of the mesh.
 [slipweakening_shear_stick.timedependent.bc.x_pos_disp]
-
-# We are fixing the 0 (x) degree of freedom.
 bc_dof = [0]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
-# Boundary conditions to be applied to the positive x-side of the mesh.
 [slipweakening_shear_stick.timedependent.bc.x_pos_tract]
-
-# The nodes associated with this boundary condition have the name
-# 'x_pos' in the mesh file.
 label = 20
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -130,18 +89,11 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [1.0*MPa,0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
 
-
-
-# Boundary conditions to be applied to the positive y-side of the mesh.
 [slipweakening_shear_stick.timedependent.bc.y_pos_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_pos_fault' in the mesh file.
 label = 22
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -149,15 +101,10 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-1.0*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
-# Boundary conditions to be applied to the negative y-side of the mesh.
 [slipweakening_shear_stick.timedependent.bc.y_neg_fault]
-
-# The nodes associated with this boundary condition have the name
-# 'y_neg_fault' in the mesh file.
 label = 23
 
 db_initial = spatialdata.spatialdb.UniformDB
@@ -165,7 +112,6 @@
 db_initial.values = [traction-shear,traction-normal]
 db_initial.data = [-1.0*MPa, 0.0*MPa]
 
-# Set cell type to quadrilateral (1-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -179,24 +125,8 @@
 
 fault = pylith.faults.FaultCohesiveDyn
 
-# Define fault properties.
 [slipweakening_shear_stick.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
-
-# NOTE: It is possible to assign an ID number to a fault (e.g.,
-# 'id = 10').  Care must be taken when doing this, however, because the
-# assigned ID will become the material ID for the cohesive element.
-# This ID must not conflict with any of the material ID numbers for
-# volume elements.  The default ID for a fault is 100.  If you have a
-# fault in your mesh you must:
-# 1.  If you create your own fault ID, make sure it does not conflict
-#     with any of you material ID's.
-# 2.  If you use the default fault ID, make sure that none of your
-#     material ID's are equal to 100.
-
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
@@ -206,6 +136,7 @@
 db_initial_tractions.data = [0.0*Pa, -10.0*MPa]
 
 friction = pylith.friction.SlipWeakening
+friction.label = Slip weakening friction
 
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Slip weakening

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/axialdisp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/axialdisp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/axialdisp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
 [axialdisp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATSimplex
 quadrature.cell.shape = triangle

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -47,6 +47,7 @@
 [dislocation.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = triangle
 

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation2.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation2.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/dislocation2.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -47,6 +47,7 @@
 [dislocation2.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell.shape = triangle
 

Modified: short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/sheardisp.cfg
===================================================================
--- short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/sheardisp.cfg	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/tests_auto/2d/tri3/sheardisp.cfg	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
 [sheardisp.timedependent.materials.elastic]
 label = Elastic material
 id = 1
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 quadrature.cell = pylith.feassemble.FIATSimplex
 quadrature.cell.shape = triangle

Modified: short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDep.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDep.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDep.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -295,8 +295,7 @@
                                             dqV[model] * deltaStrain
           devStressTpdt += shearRatioV[model] * viscousStrainTpdt[model, iComp]
       devStressTpdt = elasFac * devStressTpdt + devStressInitial[iComp]
-      stressTpdt[iComp] = diag[iComp] * (meanStressTpdt + meanStressInitial) + \
-                          devStressTpdt
+      stressTpdt[iComp] = diag[iComp] * meanStressTpdt + devStressTpdt
     
     return stressTpdt, viscousStrainTpdt
 

Modified: short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -342,15 +342,15 @@
 };
 
 const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stress[] = {
-  1.73848741e+07,
-  2.23190000e+07,
-  2.72531259e+07,
+  1.73628741e+07,
+  2.22970000e+07,
+  2.72311259e+07,
   1.99361456e+07,
   2.48702715e+07,
   2.98043974e+07,
-  2.03492020e+06,
-  2.66720000e+06,
-  3.29947980e+06,
+  1.98292020e+06,
+  2.61520000e+06,
+  3.24747980e+06,
   2.55607698e+06,
   3.18835678e+06,
   3.82063657e+06,

Modified: short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDep.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDep.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDep.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -325,8 +325,7 @@
                                             dqV[model] * deltaStrain
           devStressTpdt += shearRatioV[model] * viscousStrainTpdt[model, iComp]
       devStressTpdt = elasFac * devStressTpdt + devStressInitial[iComp]
-      stressTpdt[iComp] = diag[iComp] * (meanStressTpdt + meanStressInitial) + \
-                          devStressTpdt
+      stressTpdt[iComp] = diag[iComp] * meanStressTpdt + devStressTpdt
     
     stressTpdtV = numpy.array([stressTpdt[0], stressTpdt[1], stressTpdt[3]],
                               dtype=numpy.float64)

Modified: short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc	2011-07-15 17:04:26 UTC (rev 18769)
@@ -281,11 +281,11 @@
 };
 
 const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stress[] = {
-  8.29099455e+06,
-  8.75027873e+06,
+  8.26999455e+06,
+  8.72927873e+06,
   6.46662036e+06,
-  4.33270011e+06,
-  4.38899464e+06,
+  4.28170011e+06,
+  4.33799464e+06,
   2.49387045e+06,
 };
 

Modified: short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestDirichletBC.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestDirichletBC.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestDirichletBC.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -45,6 +45,7 @@
     """
     from spatialdata.spatialdb.SimpleDB import SimpleDB
     db = SimpleDB()
+    db.inventory.label = "simple database"
     db._configure()
 
     from spatialdata.spatialdb.TimeHistory import TimeHistory
@@ -53,6 +54,7 @@
 
     from pylith.bc.DirichletBC import DirichletBC
     bc = DirichletBC()
+    bc.inventory.label = "abc"
     bc.inventory.dbInitial = db
     bc.inventory.dbRate = db
     bc.inventory.dbChange = db

Modified: short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestNeumann.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestNeumann.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/pytests/bc/TestNeumann.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -188,7 +188,6 @@
     """
     from spatialdata.spatialdb.SimpleDB import SimpleDB
     db = SimpleDB()
-    db._configure()
     db.inventory.label = "TestNeumann tri3"
     db.inventory.iohandler.inventory.filename = "data/tri3_tractions.spatialdb"
     db.inventory.iohandler._configure()

Modified: short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveDyn.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveDyn.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveDyn.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -46,6 +46,7 @@
     Test _configure().
     """
     fault = FaultCohesiveDyn()
+    fault.inventory.faultLabel = "fault group"
     fault._configure()
     return
 
@@ -299,6 +300,7 @@
     
     from pylith.friction.StaticFriction import StaticFriction
     friction = StaticFriction()
+    friction.inventory.label = "Static friction"
     friction.inventory.dbProperties = dbFriction
     friction._configure()
 

Modified: short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveKin.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/pytests/faults/TestFaultCohesiveKin.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -46,6 +46,7 @@
     Test _configure().
     """
     fault = FaultCohesiveKin()
+    fault.inventory.faultLabel = "fault group"
     fault._configure()
     return
 
@@ -65,6 +66,7 @@
     Test useFaultMesh().
     """
     fault = FaultCohesiveKin()
+    fault.inventory.faultLabel = "fault group"
     fault._configure()
 
     fault.useFaultMesh(True);
@@ -77,7 +79,8 @@
     """
     Test faultMeshFilename().
     """
-    fault = FaultCohesiveKin()
+    fault = FaultCohesiveKin() 
+    fault.inventory.faultLabel = "fault group"
     fault._configure()
 
     filename = "SanAndreas.inp"

Modified: short/3D/PyLith/branches/multifields/unittests/pytests/materials/TestElasticMaterial.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/pytests/materials/TestElasticMaterial.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/pytests/materials/TestElasticMaterial.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -49,6 +49,7 @@
     db._configure()
 
     material = self.material
+    material.inventory.label = "Elastic material"
     material.inventory.dbInitialStress = db
     material.inventory.useInitialStress = True
     material._configure()
@@ -69,6 +70,7 @@
     db._configure()
 
     material = self.material
+    material.inventory.label = "Elastic material"
     material.inventory.dbInitialStrain = db
     material.inventory.useInitialStrain = True
     material._configure()

Modified: short/3D/PyLith/branches/multifields/unittests/pytests/meshio/TestOutputSolnSubset.py
===================================================================
--- short/3D/PyLith/branches/multifields/unittests/pytests/meshio/TestOutputSolnSubset.py	2011-07-15 17:02:55 UTC (rev 18768)
+++ short/3D/PyLith/branches/multifields/unittests/pytests/meshio/TestOutputSolnSubset.py	2011-07-15 17:04:26 UTC (rev 18769)
@@ -67,6 +67,7 @@
     """
     output = OutputSolnSubset()
     output.inventory.writer._configure()
+    output.inventory.label = "nodeset"
     output._configure()
     return
 



More information about the CIG-COMMITS mailing list