[cig-commits] r21183 - in short/3D/PyLith/branches/pylith-scecdynrup: . doc/developer doc/releasenotes doc/userguide doc/userguide/cover doc/userguide/install doc/userguide/tutorials/3dhex8/dike doc/userguide/tutorials/3dtet4 examples/2d/greensfns/reverse examples/2d/greensfns/strikeslip libsrc/pylith libsrc/pylith/faults libsrc/pylith/friction modulesrc/friction pylith pylith/bc pylith/friction pylith/meshio pylith/problems share tests/2d tests_auto/eqinfo unittests/libtests/friction unittests/libtests/friction/data unittests/libtests/meshio unittests/pytests/bc unittests/pytests/friction unittests/pytests/meshio unittests/pytests/meshio/data

brad at geodynamics.org brad at geodynamics.org
Wed Dec 19 13:14:32 PST 2012


Author: brad
Date: 2012-12-19 13:14:31 -0800 (Wed, 19 Dec 2012)
New Revision: 21183

Added:
   short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.1.txt
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.hh
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningStress.i
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningStress.py
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/nonplanar/
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningStress.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/point.txt
Modified:
   short/3D/PyLith/branches/pylith-scecdynrup/README
   short/3D/PyLith/branches/pylith-scecdynrup/configure.ac
   short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.0.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover.pdf
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover.svg.gz
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/cover_small.jpg
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/dike/dike.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dtet4/3dtet4.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/reverse/pylithapp.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/strikeslip/pylithapp.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveImpulses.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/GreensFns.py
   short/3D/PyLith/branches/pylith-scecdynrup/setup.py
   short/3D/PyLith/branches/pylith-scecdynrup/share/valgrind-python.supp
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/eqinfo/TestEqInfo.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestOutputSolnPoints.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/Makefile.am
Log:
Merge from v1.7-trunk.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/README	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/README	2012-12-19 21:14:31 UTC (rev 21183)
@@ -3,7 +3,7 @@
 not permitted.
 
 
-We are pleased to announce release of PyLith version 1.8.0
+We are pleased to announce release of PyLith version 1.8.1
 
 Please submit bug reports via the World Wide Web at:
     http://geodynamics.org/roundup    
@@ -67,6 +67,32 @@
   formulation = pylith.problems.ExplicitTet4
 
 ----------------------------------------------------------------------
+Version 1.8.1
+----------------------------------------------------------------------
+
+* Bug fixes
+
+  - Fixed two MPI related bugs in computing Green's functions in
+    parallel. The number of impulses corresponded to only those on
+    process 0.
+
+  - Corrected computation of fault tractions (Lagrange multipliers) on
+    process boundaries for prescribed slip with explicit time stepping.
+
+  - Fixed bug when reading in list of output points with just one
+    point.
+
+  - Adjusted autoconf Python setup macro to remove temporary
+    sysconfig.pyc file.
+
+  - Added check to make sure degree of freedom specified in Dirichlet
+    BC is consistent with spatial dimension of problem.
+
+  - Corrected two typos in the manual related to fault opening and
+    tractions in examples/3d/hex8/step20 and updating to the use of
+    cell.dimension for the quadrature scheme with tets.
+
+----------------------------------------------------------------------
 Version 1.8.0
 ----------------------------------------------------------------------
 
@@ -108,6 +134,12 @@
     size using an Exodus-II vertex field. Note that this required
     updating the NetCDF library.
 
+  * New CUBIT meshing examples demonstrating how to merge surfaces and
+    use and an Exodus-II vertex field to specify the discretization
+    size.
+    + examples/meshing/surface_nurbs/merge_surfs
+    + examples/meshing/cubit_cellsize
+
 * Bug fixes
 
   - Fixed omission of synchronization of stable time step computation

Modified: short/3D/PyLith/branches/pylith-scecdynrup/configure.ac
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/configure.ac	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/configure.ac	2012-12-19 21:14:31 UTC (rev 21183)
@@ -17,7 +17,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT([PyLith], [1.8.0], [cig-short at geodynamics.org])
+AC_INIT([PyLith], [1.8.1], [cig-short at geodynamics.org])
 AC_CONFIG_AUX_DIR([./aux-config])
 AC_CONFIG_HEADER([portinfo])
 AC_CONFIG_MACRO_DIR([m4])
@@ -43,16 +43,15 @@
 	[if test "$enableval" = yes ; then enable_testing=yes; else enable_testing=no; fi],
 	[enable_testing=no])
 AM_CONDITIONAL([ENABLE_TESTING], [test "$enable_testing" = yes])
-# Enable full-scale testing except on cygwin (need to rebase)
-if test "$enable_testing" = yes ; then
-  enable_full_testing=yes
+if test "$enable_testing" = yes; then
+  enable_full_testing=yes  
+  # Disable full-scale testing on cygwin (need to rebase)
   AC_CANONICAL_HOST
   case $host_os in
     cygwin*)
       enable_full_testing=no ;;
   esac
 fi
-AM_CONDITIONAL([ENABLE_FULL_TESTING], [test "$enable_full_testing" = yes])
 
 # CUBIT I/O w/netcdf
 AC_ARG_ENABLE([cubit],
@@ -213,6 +212,21 @@
   CIT_HDF5_LIB_PARALLEL
 fi
 
+# Full-scale testing with h5py
+if test "$enable_full_testing" = yes ; then
+  AM_PATH_PYTHON
+   AC_MSG_CHECKING(for python module h5py for full scale testing)
+  $PYTHON -c "import h5py" 2>/dev/null   
+  if test $? == 0; then
+    AC_MSG_RESULT([found h5py, enabling full scale testing])
+    enable_full_testing=yes
+  else
+    AC_MSG_RESULT([not found, disabling full scale testing])
+    enable_full_testing=no
+  fi
+fi
+AM_CONDITIONAL([ENABLE_FULL_TESTING], [test "$enable_full_testing" = yes])
+
 # CUDA
 if test "$enable_cuda" = "yes" ; then
   CIT_CUDA_INCDIR

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt	2012-12-19 21:14:31 UTC (rev 21183)
@@ -7,7 +7,7 @@
 svn log | less
 
 # Merge from stable branch.
-svn merge -r REV_FROM_LAST_MERGE:HEAD svn+ssh://svn@geodynamics.org/cig/short/3D/PyLith/branches/v1.7-stable .
+svn merge -r REV_FROM_LAST_MERGE:HEAD svn+ssh://svn@geodynamics.org/cig/short/3D/PyLith/branches/v1.7-trunk .
 
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.0.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.0.txt	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.0.txt	2012-12-19 21:14:31 UTC (rev 21183)
@@ -64,6 +64,12 @@
     size using an Exodus-II vertex field. Note that this required
     updating the NetCDF library.
 
+  * New CUBIT meshing examples demonstrating how to merge surfaces and
+    use and an Exodus-II vertex field to specify the discretization
+    size.
+    + examples/meshing/surface_nurbs/merge_surfs
+    + examples/meshing/cubit_cellsize
+
 * Bug fixes
 
   - Fixed omission of synchronization of stable time step computation

Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.1.txt (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/doc/releasenotes/announce_v1.8.1.txt)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.1.txt	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.8.1.txt	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,126 @@
+Greetings,
+
+I am pleased to announce the release of PyLith 1.8.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.8.0. We strongly recommend
+all users of previous PyLith releases switch to this latest
+release.
+
+See the README file for changes required to switch to the v1.8.x
+release series from previous versions.
+
+You can download the source code and binaries from
+
+    http://geodynamics.org/cig/software/packages/short/pylith
+
+Detailed installation instructions 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 - PyLith v1.8.1
+
+* Bug fixes
+
+  - Fixed two MPI related bugs in computing Green's functions in
+    parallel. The number of impulses corresponded to only those on
+    processor 0.
+
+  - Corrected computation of fault tractions (Lagrange multipliers) on
+    process boundaries for prescribed slip with explicit time stepping.
+
+  - Fixed bug when reading in list of output points with just one
+    point.
+
+  - Adjusted autoconf Python setup macro to remove temporary
+    sysconfig.pyc file.
+
+  - Added check to make sure degree of freedom specified in Dirichlet
+    BC is consistent with spatial dimension of problem.
+
+  - Corrected two typos in the manual related to fault opening and
+    tractions in examples/3d/hex8/step20 and updating to the use of
+    cell.dimension for the quadrature scheme with tets.
+
+RELEASE NOTES - PyLith v1.8.0
+
+* New features
+
+  * Additional flexibility in PETSc nonlinear solver parameters
+
+    The default line search type for the PETSc nonlinear (SNES) solver
+    is a customized backtrace method included in PyLith. The user may
+    now select alternative line search types (basic, bt, l2, cp)
+    available in PETSc.
+
+  * Post-processing utility pylith_eqinfo to compute slip information.
+
+    This post-processing utility computes the moment magnitude,
+    seismic moment, seismic potency, and average slip at
+    user-specified snapshots in time from PyLith HDF5 output.
+    Information is given for each fault and across all faults. See
+    the Post-processing section of the manual in the Running PyLith
+    chapter for more information.
+
+  * Computation of the stable time step for explicit time-stepping.
+
+    The stable time step for explicit time-stepping is computed based
+    on the CFL condition and minimum edge lengths. For triangular and
+    tetrahedral cells we also account for a reduction in the stable
+    time step due to distorted cells (e.g., slivers and needles). See
+    the Stable time step section in the Materials chapter of the
+    manual for more information.
+
+  * Output the stable time step for each cell in a material.
+ 
+    Output cell_info_fields "stable_dt_implicit" and
+    "stable_dt_explicit" can be included in material output.
+
+  * Added netCDF Python module to binary distribution to provide
+    Python interface to NetCDF files, including Exodus-II files. This
+    is used in a new meshing example for setting the discretization
+    size using an Exodus-II vertex field. Note that this required
+    updating the NetCDF library.
+
+  * New CUBIT meshing examples demonstrating how to merge surfaces and
+    use and an Exodus-II vertex field to specify the discretization
+    size.
+    + examples/meshing/surface_nurbs/merge_surfs
+    + examples/meshing/cubit_cellsize
+
+* Bug fixes
+
+  - Fixed omission of synchronization of stable time step computation
+    among processors. Minimum time step among all processors rather
+    than local value should be used.
+
+  - Fixed density scale not being set in NondimElasticQuasistatic.
+    Density scale should be set based on shear modulus, length scale,
+    and relaxation time.
+
+  - Added warning when initial state for a fault constitutive model is
+    not set. If an initial state value is not given, for rate-state
+    friction using a default value of L / reference slip rate. Other
+    fault constitutive models use a default value of 0.0 for initial
+    state variables.
+
+  - Separated tensor components in Xdmf files to avoid confusion. The
+    corresponding HDF5 files remain unchanged.
+
+  - Removed explicit time-stepping formulation with non-lumped
+    Jacobian. This formulation was not setup properly for spontaneous
+    rupture models and is too computationally expensive for practical
+    problems. The ExplicitLumped* formulations are now simply Explicit*.
+
+  - Fixed parallel bug that resulting in inconsistent orientation of
+    fault slip directions. Flipping the fault orientation was not
+    synchronized across processors. This bug would only appear when
+    running in parallel with faults that change from dipping in one
+    direction to dipping in the opposite direction.
+
+  - Fixed bug in setting name of field in OutputSolnPoints when output
+    multiple fields. This bug caused the name of the first output
+    field to be used and output data to overwrite each other.
+

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

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

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

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx	2012-12-19 21:14:31 UTC (rev 21183)
@@ -253,7 +253,7 @@
 
 \begin_deeper
 \begin_layout LyX-Code
-$ tar -xzf pylith-1.8.0-linux-i686.tgz
+$ tar -xzf pylith-1.8.1-linux-i686.tgz
 \end_layout
 
 \end_deeper
@@ -328,7 +328,7 @@
 
 \begin_deeper
 \begin_layout LyX-Code
-$ tar -xzf pylith-1.8.0-darwin-10.5.tgz
+$ tar -xzf pylith-1.8.1-darwin-10.5.tgz
 \end_layout
 
 \end_deeper

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/preface.lyx	2012-12-19 21:14:31 UTC (rev 21183)
@@ -190,14 +190,14 @@
  Strand, and C.
  Williams (2011), 
 \emph on
-PyLith User Manual, Version 1.8.0.
+PyLith User Manual, Version 1.8.1.
 
 \emph default
  Davis, CA: Computational Infrastructure of Geodynamics.
 \begin_inset Newline newline
 \end_inset
 
-URL: geodynamics.org/cig/software/pylith/pylith_manual-1.8.0.pdf
+URL: geodynamics.org/cig/software/pylith/pylith_manual-1.8.1.pdf
 \end_layout
 
 \begin_layout Section

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/dike/dike.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/dike/dike.lyx	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dhex8/dike/dike.lyx	2012-12-19 21:14:31 UTC (rev 21183)
@@ -171,7 +171,7 @@
 \family typewriter
 open_free_surface
 \family default
- to True in order for the tractions to be imposed when the fault is open;
+ to False in order for the tractions to be imposed when the fault is open;
  the default behavior for fault opening is a free surface (the two sides
  of the fault are completely uncoupled).
  The most important fault parameters for prescribing the tensile fault tractions
@@ -183,7 +183,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-open_free_surface = True
+open_free_surface = False
 \begin_inset Newline newline
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dtet4/3dtet4.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dtet4/3dtet4.lyx	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/3dtet4/3dtet4.lyx	2012-12-19 21:14:31 UTC (rev 21183)
@@ -520,7 +520,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-quadrature.cell.shape = tetrahedron
+quadrature.cell.dimension = 3
 \end_layout
 
 \begin_layout LyX-Code
@@ -548,7 +548,7 @@
 \end_layout
 
 \begin_layout LyX-Code
-quadrature.cell.shape = tetrahedron
+quadrature.cell.dimension = 3
 \end_layout
 
 \begin_layout LyX-Code

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx	2012-12-19 21:14:31 UTC (rev 21183)
@@ -136,7 +136,7 @@
 \begin_inset Newline newline
 \end_inset
 
-Version 1.8.0
+Version 1.8.1
 \end_layout
 
 \begin_layout Date

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/reverse/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/reverse/pylithapp.cfg	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/reverse/pylithapp.cfg	2012-12-19 21:14:31 UTC (rev 21183)
@@ -153,7 +153,7 @@
 sub_pc_factor_shift_type = nonzero
 
 ksp_rtol = 1.0e-8
-ksp_atol = 1.0e-20
+ksp_atol = 1.0e-10
 ksp_max_it = 500
 
 ksp_monitor = true

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/strikeslip/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/strikeslip/pylithapp.cfg	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/2d/greensfns/strikeslip/pylithapp.cfg	2012-12-19 21:14:31 UTC (rev 21183)
@@ -154,7 +154,7 @@
 sub_pc_factor_shift_type = nonzero
 
 ksp_rtol = 1.0e-8
-ksp_atol = 1.0e-20
+ksp_atol = 1.0e-10
 ksp_max_it = 500
 
 ksp_monitor = true

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -105,6 +105,7 @@
 	friction/StaticFriction.cc \
 	friction/SlipWeakening.cc \
 	friction/SlipWeakeningTime.cc \
+	friction/SlipWeakeningStress.cc \
 	friction/RateStateAgeing.cc \
 	friction/TimeWeakening.cc \
 	materials/Metadata.cc \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveImpulses.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveImpulses.cc	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveImpulses.cc	2012-12-19 21:14:31 UTC (rev 21183)
@@ -90,12 +90,14 @@
 pylith::faults::FaultCohesiveImpulses::impulseDOF(const int* flags,
 						  const int size)
 { // impulseDOF
-  if (size > 0)
+  if (size > 0) {
     assert(flags);
+  } // if
 
   _impulseDOF.resize(size);
-  for (int i=0; i < size; ++i)
+  for (int i=0; i < size; ++i) {
     _impulseDOF[i] = flags[i];
+  } // for
 } // impulseDOF
 
 // ----------------------------------------------------------------------
@@ -118,7 +120,15 @@
 int
 pylith::faults::FaultCohesiveImpulses::numImpulses(void) const
 { // numImpulses
-  return _impulsePoints.size();
+  assert(_faultMesh);
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  MPI_Comm comm = faultSieveMesh->comm();
+  int numImpulsesLocal = _impulsePoints.size();
+  int numImpulses = 0;
+  MPI_Allreduce(&numImpulsesLocal, &numImpulses, 1, MPI_INT, MPI_SUM, comm);
+
+  return numImpulses;
 } // numImpulses
 
 // ----------------------------------------------------------------------
@@ -181,7 +191,7 @@
 // Get vertex field associated with integrator.
 const pylith::topology::Field<pylith::topology::SubMesh>&
 pylith::faults::FaultCohesiveImpulses::vertexField(const char* name,
-                                              const topology::SolutionFields* fields)
+						   const topology::SolutionFields* fields)
 { // vertexField
   assert(_faultMesh);
   assert(_quadrature);
@@ -196,11 +206,9 @@
   PylithScalar scale = 0.0;
   int fiberDim = 0;
   if (0 == strcasecmp("slip", name)) {
-    const topology::Field<topology::SubMesh>& dispRel = 
-      _fields->get("relative disp");
+    const topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
     _allocateBufferVectorField();
-    topology::Field<topology::SubMesh>& buffer =
-        _fields->get("buffer (vector)");
+    topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (vector)");
     buffer.copy(dispRel);
     buffer.label("slip");
     FaultCohesiveLagrange::globalToFault(&buffer, orientation);
@@ -210,50 +218,41 @@
     const ALE::Obj<RealSection>& orientationSection = _fields->get(
       "orientation").section();
     assert(!orientationSection.isNull());
-    const ALE::Obj<RealSection>& dirSection = orientationSection->getFibration(
-      0);
+    const ALE::Obj<RealSection>& dirSection = orientationSection->getFibration(0);
     assert(!dirSection.isNull());
     _allocateBufferVectorField();
-    topology::Field<topology::SubMesh>& buffer =
-        _fields->get("buffer (vector)");
+    topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (vector)");
     buffer.copy(dirSection);
     buffer.label("strike_dir");
     buffer.scale(1.0);
     return buffer;
 
   } else if (2 == cohesiveDim && 0 == strcasecmp("dip_dir", name)) {
-    const ALE::Obj<RealSection>& orientationSection = _fields->get(
-      "orientation").section();
+    const ALE::Obj<RealSection>& orientationSection = _fields->get("orientation").section();
     assert(!orientationSection.isNull());
-    const ALE::Obj<RealSection>& dirSection = orientationSection->getFibration(
-      1);
+    const ALE::Obj<RealSection>& dirSection = orientationSection->getFibration(1);
     _allocateBufferVectorField();
-    topology::Field<topology::SubMesh>& buffer =
-        _fields->get("buffer (vector)");
+    topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (vector)");
     buffer.copy(dirSection);
     buffer.label("dip_dir");
     buffer.scale(1.0);
     return buffer;
 
   } else if (0 == strcasecmp("normal_dir", name)) {
-    const ALE::Obj<RealSection>& orientationSection = _fields->get(
-      "orientation").section();
+    const ALE::Obj<RealSection>& orientationSection = _fields->get("orientation").section();
     assert(!orientationSection.isNull());
     const int space = (0 == cohesiveDim) ? 0 : (1 == cohesiveDim) ? 1 : 2;
-    const ALE::Obj<RealSection>& dirSection = orientationSection->getFibration(
-      space);
+    const ALE::Obj<RealSection>& dirSection = orientationSection->getFibration(space);
     assert(!dirSection.isNull());
     _allocateBufferVectorField();
-    topology::Field<topology::SubMesh>& buffer =
-        _fields->get("buffer (vector)");
+    topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (vector)");
     buffer.copy(dirSection);
     buffer.label("normal_dir");
     buffer.scale(1.0);
     return buffer;
 
   } else if (0 == strcasecmp("impulse_amplitude", name)) {
-    topology::Field<topology::SubMesh>& amplitude =
-        _fields->get("impulse amplitude");
+    topology::Field<topology::SubMesh>& amplitude = _fields->get("impulse amplitude");
     return amplitude;
 
   } else if (0 == strcasecmp("area", name)) {
@@ -264,8 +263,7 @@
     assert(fields);
     const topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
     _allocateBufferVectorField();
-    topology::Field<topology::SubMesh>& buffer =
-        _fields->get("buffer (vector)");
+    topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (vector)");
     _calcTractionsChange(&buffer, dispT);
     return buffer;
 
@@ -303,8 +301,7 @@
 
   // Create section to hold amplitudes of impulses.
   _fields->add("impulse amplitude", "impulse_amplitude");
-  topology::Field<topology::SubMesh>& amplitude = 
-    _fields->get("impulse amplitude");
+  topology::Field<topology::SubMesh>& amplitude = _fields->get("impulse amplitude");
   topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
   const int fiberDim = 1;
   amplitude.newSection(dispRel, fiberDim);
@@ -322,8 +319,7 @@
   assert(!faultSieveMesh.isNull());
 
   scalar_array coordsVertex(spaceDim);
-  const ALE::Obj<RealSection>& coordsSection =
-    faultSieveMesh->getRealSection("coordinates");
+  const ALE::Obj<RealSection>& coordsSection = faultSieveMesh->getRealSection("coordinates");
   assert(!coordsSection.isNull());
 
   assert(_dbImpulseAmp);
@@ -338,12 +334,10 @@
     const int v_fault = _cohesiveVertices[iVertex].fault;
 
     coordsSection->restrictPoint(v_fault, &coordsVertex[0], coordsVertex.size());
-    _normalizer->dimensionalize(&coordsVertex[0], coordsVertex.size(),
-				lengthScale);
+    _normalizer->dimensionalize(&coordsVertex[0], coordsVertex.size(), lengthScale);
 
     amplitudeVertex = 0.0;
-    int err = _dbImpulseAmp->query(&amplitudeVertex, 1,
-				   &coordsVertex[0], coordsVertex.size(), cs);
+    int err = _dbImpulseAmp->query(&amplitudeVertex, 1, &coordsVertex[0], coordsVertex.size(), cs);
     if (err) {
       std::ostringstream msg;
       msg << "Could not find amplitude for Green's function impulses at \n" << "(";
@@ -389,13 +383,14 @@
   assert(!faultSieveMesh.isNull());
 
   // Gather number of points on each processor.
-  const int numImpulsesLocal = pointOrder.size();
+  int numImpulsesLocal = pointOrder.size();
   const int commSize = faultSieveMesh->commSize();
   const int commRank = faultSieveMesh->commRank();
   int_array numImpulsesAll(commSize);
   MPI_Comm comm = faultSieveMesh->comm();
-  MPI_Allgather((void*)&numImpulsesLocal, 1, MPI_INT, (void*)&numImpulsesAll[0], commSize, MPI_INT, comm);
-  
+  PetscErrorCode err = 0;
+  err = MPI_Allgather(&numImpulsesLocal, 1, MPI_INT, &numImpulsesAll[0], 1, MPI_INT, comm);CHKERRXX(err);
+
   int localOffset = 0;
   for (int i=0; i < commRank; ++i) {
     localOffset += numImpulsesAll[i];
@@ -423,8 +418,11 @@
   for (int irank=0; irank < commSize; ++irank) {
     MPI_Barrier(comm);
     if (commRank == irank) {
-      for (int i=0; i < _impulsePoints.size(); ++i, ++impulse) {
-	const ImpulseInfoStruct& info = _impulsePoints[impulse];
+      std::cout << "RANK: " << commRank << ", # impulses: " << _impulsePoints.size() << std::endl;
+      const srcs_type::const_iterator impulsePointsEnd = _impulsePoints.end();
+      for (srcs_type::const_iterator piter=_impulsePoints.begin(); piter != impulsePointsEnd; ++piter) {
+	const int impulse = piter->first;
+	const ImpulseInfoStruct& info = piter->second;
 	const PylithScalar* amplitudeVertex = amplitudeSection->restrictPoint(_cohesiveVertices[info.indexCohesive].fault);
 	std::cout << "["<<irank<<"]: " << impulse << " -> (" << info.indexCohesive << "," << info.indexDOF << "), v_fault: " << _cohesiveVertices[info.indexCohesive].fault << ", amplitude: " << amplitudeVertex[0] << std::endl;
       } // for

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2012-12-19 21:14:31 UTC (rev 21183)
@@ -829,6 +829,13 @@
     const int v_negative = _cohesiveVertices[iVertex].negative;
     const int v_positive = _cohesiveVertices[iVertex].positive;
 
+    // Set Lagrange multiplier value. Value from preliminary solve is
+    // bogus due to artificial diagonal entry.
+    dispTIncrVertexL = 0.0;
+    assert(dispTIncrVertexL.size() == 
+	   dispTIncrSection->getFiberDimension(v_lagrange));
+    dispTIncrSection->updatePoint(v_lagrange, &dispTIncrVertexL[0]);
+
     // Compute contribution only if Lagrange constraint is local.
     if (!globalOrder->isLocal(v_lagrange))
       continue;
@@ -910,8 +917,8 @@
     // Set Lagrange multiplier value. Value from preliminary solve is
     // bogus due to artificial diagonal entry.
     assert(dispTIncrVertexL.size() == 
-	   dispTIncrSection->getFiberDimension(v_lagrange));
-    dispTIncrSection->updatePoint(v_lagrange, &dispTIncrVertexL[0]);
+	   dispTIncrAdjSection->getFiberDimension(v_lagrange));
+    dispTIncrAdjSection->updatePoint(v_lagrange, &dispTIncrVertexL[0]);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(updateEvent);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -25,6 +25,7 @@
 	StaticFriction.hh \
 	SlipWeakening.hh \
 	SlipWeakeningTime.hh \
+	SlipWeakeningStress.hh \
 	RateStateAgeing.hh \
 	TimeWeakening.hh \
 	frictionfwd.hh

Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.cc (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningStress.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.cc	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,332 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// 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.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "SlipWeakeningStress.hh" // implementation of object methods
+
+#include "pylith/materials/Metadata.hh" // USES Metadata
+
+#include "pylith/utils/array.hh" // USES scalar_array
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
+
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include "petsc.h" // USES PetscLogFlops
+
+#include <cassert> // USES assert()
+#include <sstream> // USES std::ostringstream
+#include <stdexcept> // USES std::runtime_error
+
+// ----------------------------------------------------------------------
+namespace pylith {
+  namespace friction {
+    namespace _SlipWeakeningStress {
+
+      // Number of physical properties.
+      const int numProperties = 4;
+
+      // Physical properties.
+      const pylith::materials::Metadata::ParamDescription properties[4] = {
+	{ "static_stress", 1, pylith::topology::FieldBase::SCALAR },
+	{ "dynamic_stress", 1, pylith::topology::FieldBase::SCALAR },
+        { "slip_weakening_parameter", 1, pylith::topology::FieldBase::SCALAR },
+	{ "weakening_time", 1, pylith::topology::FieldBase::SCALAR },
+      };
+
+      // Number of State Variables.
+      const int numStateVars = 2;
+
+      // State Variables.
+      const pylith::materials::Metadata::ParamDescription stateVars[] = {
+	{ "cumulative_slip", 1, pylith::topology::FieldBase::SCALAR },
+	{ "previous_slip", 1, pylith::topology::FieldBase::SCALAR },
+      };
+
+      // Values expected in spatial database
+      const int numDBProperties = 4;
+      const char* dbProperties[4] = { "static-stress",
+				      "dynamic-stress",
+				      "slip-weakening-parameter",
+				      "weakening-time",
+      };
+
+      const int numDBStateVars = 2;
+      const char* dbStateVars[2] = { "cumulative-slip",
+				     "previous-slip",
+      };      
+      
+    } // _SlipWeakeningStress
+  } // friction
+} // pylith
+
+// Indices of physical properties
+const int pylith::friction::SlipWeakeningStress::p_stressStatic = 0;
+const int pylith::friction::SlipWeakeningStress::p_stressDyn = 
+  pylith::friction::SlipWeakeningStress::p_stressStatic + 1;
+const int pylith::friction::SlipWeakeningStress::p_d0 = 
+  pylith::friction::SlipWeakeningStress::p_stressDyn + 1;
+const int pylith::friction::SlipWeakeningStress::p_weaktime =
+  pylith::friction::SlipWeakeningStress::p_d0 + 1;
+
+// Indices of database values (order must match dbProperties)
+const int pylith::friction::SlipWeakeningStress::db_stressStatic = 0;
+const int pylith::friction::SlipWeakeningStress::db_stressDyn = 
+  pylith::friction::SlipWeakeningStress::db_stressStatic + 1;
+const int pylith::friction::SlipWeakeningStress::db_d0 = 
+  pylith::friction::SlipWeakeningStress::db_stressDyn + 1;
+const int pylith::friction::SlipWeakeningStress::db_weaktime =
+  pylith::friction::SlipWeakeningStress::db_d0 + 1;
+
+// Indices of state variables.
+const int pylith::friction::SlipWeakeningStress::s_slipCum = 0;
+const int pylith::friction::SlipWeakeningStress::s_slipPrev = 
+  pylith::friction::SlipWeakeningStress::s_slipCum + 1;
+
+// Indices of database values (order must match dbProperties)
+const int pylith::friction::SlipWeakeningStress::db_slipCum = 0;
+const int pylith::friction::SlipWeakeningStress::db_slipPrev = 
+  pylith::friction::SlipWeakeningStress::db_slipCum + 1;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::friction::SlipWeakeningStress::SlipWeakeningStress(void) :
+  FrictionModel(materials::Metadata(_SlipWeakeningStress::properties,
+				    _SlipWeakeningStress::numProperties,
+				    _SlipWeakeningStress::dbProperties,
+				    _SlipWeakeningStress::numDBProperties,
+				    _SlipWeakeningStress::stateVars,
+				    _SlipWeakeningStress::numStateVars,
+				    _SlipWeakeningStress::dbStateVars,
+				    _SlipWeakeningStress::numDBStateVars))
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::friction::SlipWeakeningStress::~SlipWeakeningStress(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Compute properties from values in spatial database.
+void
+pylith::friction::SlipWeakeningStress::_dbToProperties(PylithScalar* const propValues,
+						       const scalar_array& dbValues) const
+{ // _dbToProperties
+  assert(propValues);
+  const int numDBValues = dbValues.size();
+  assert(_SlipWeakeningStress::numDBProperties == numDBValues);
+
+  const PylithScalar db_static = dbValues[db_stressStatic];
+  const PylithScalar db_dyn = dbValues[db_stressDyn];
+  const PylithScalar db_do = dbValues[db_d0];
+  const PylithScalar db_t = dbValues[db_weaktime];
+
+  if (db_static < 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned negative value for static stress.\n"
+	<< "static stress: " << db_static << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_dyn < 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned negative value for dynamic stress.\n"
+	<< "dynamic stress: " << db_dyn << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_d0 <= 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned nonpositive value for slip weakening parameter.\n"
+	<< "slip weakening parameter: " << db_d0 << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  if (db_t < 0.0) {
+    std::ostringstream msg;
+    msg << "Spatial database returned negative value for weakening time.\n"
+	<< "weakening time: " << db_t << "\n";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  propValues[p_stressStatic] = db_static;
+  propValues[p_stressDyn] = db_dyn;
+  propValues[p_d0] = db_do;
+  propValues[p_weaktime] = db_t;
+
+} // _dbToProperties
+
+// ----------------------------------------------------------------------
+// Nondimensionalize properties.
+void
+pylith::friction::SlipWeakeningStress::_nondimProperties(PylithScalar* const values,
+						    const int nvalues) const
+{ // _nondimProperties
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningStress::numProperties);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+
+  values[p_d0] /= lengthScale;
+  values[p_stressStatic] /= pressureScale;
+  values[p_stressDyn] /= pressureScale;
+  values[p_weaktime] /= timeScale;
+} // _nondimProperties
+
+// ----------------------------------------------------------------------
+// Dimensionalize properties.
+void
+pylith::friction::SlipWeakeningStress::_dimProperties(PylithScalar* const values,
+						      const int nvalues) const
+{ // _dimProperties
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningStress::numProperties);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+
+  values[p_d0] *= lengthScale;
+  values[p_stressStatic] *= pressureScale;
+  values[p_stressDyn] *= pressureScale;
+  values[p_weaktime] *= timeScale;
+} // _dimProperties
+
+// ----------------------------------------------------------------------
+// Compute state variables from values in spatial database.
+void
+pylith::friction::SlipWeakeningStress::_dbToStateVars(PylithScalar* const stateValues,
+						      const scalar_array& dbValues) const
+{ // _dbToStateVars
+  assert(stateValues);
+  const int numDBValues = dbValues.size();
+  assert(_SlipWeakeningStress::numDBStateVars == numDBValues);
+
+  const PylithScalar cumulativeSlip = dbValues[db_slipCum];
+  const PylithScalar previousSlip = dbValues[db_slipPrev];
+ 
+  stateValues[s_slipCum] = cumulativeSlip;
+  stateValues[s_slipPrev] = previousSlip;
+} // _dbToStateVars
+
+// ----------------------------------------------------------------------
+// Nondimensionalize state variables.
+void
+pylith::friction::SlipWeakeningStress::_nondimStateVars(PylithScalar* const values,
+							const int nvalues) const
+{ // _nondimStateVars
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningStress::numStateVars);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+
+  values[s_slipCum] /= lengthScale;
+  values[s_slipPrev] /= lengthScale;
+} // _nondimStateVars
+
+// ----------------------------------------------------------------------
+// Dimensionalize state variables.
+void
+pylith::friction::SlipWeakeningStress::_dimStateVars(PylithScalar* const values,
+					       const int nvalues) const
+{ // _dimStateVars
+  assert(_normalizer);
+  assert(values);
+  assert(nvalues == _SlipWeakeningStress::numStateVars);
+
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+
+  values[s_slipCum] *= lengthScale;
+  values[s_slipPrev] *= lengthScale;
+} // _dimStateVars
+
+// ----------------------------------------------------------------------
+// Compute friction from properties and state variables.
+PylithScalar
+pylith::friction::SlipWeakeningStress::_calcFriction(const PylithScalar t,
+						     const PylithScalar slip,
+						     const PylithScalar slipRate,
+						     const PylithScalar normalTraction,
+						     const PylithScalar* properties,
+						     const int numProperties,
+						     const PylithScalar* stateVars,
+						     const int numStateVars)
+{ // _calcFriction
+  assert(properties);
+  assert(_SlipWeakeningStress::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakeningStress::numStateVars == numStateVars);
+
+  PylithScalar friction = 0.0;
+  if (normalTraction <= 0.0) {
+    // if fault is in compression
+    if (stateVars[s_slipCum] < properties[p_d0] &&
+	t < properties[p_weaktime]) {
+	// if/else linear slip-weakening form
+	friction = properties[p_stressStatic] -
+	  (properties[p_stressStatic] - properties[p_stressDyn]) * 
+	  stateVars[s_slipCum] / properties[p_d0];
+      } else {
+	friction = properties[p_stressDyn];
+      } // if/else
+  } // if
+
+  PetscLogFlops(6);
+
+  return friction;
+} // _calcFriction
+
+// ----------------------------------------------------------------------
+// Update state variables (for next time step).
+void
+pylith::friction::SlipWeakeningStress::_updateStateVars(const PylithScalar t,
+							const PylithScalar slip,
+							const PylithScalar slipRate,
+							const PylithScalar normalTraction,
+							PylithScalar* const stateVars,
+							const int numStateVars,
+							const PylithScalar* properties,
+							const int numProperties)
+{ // _updateStateVars
+  assert(properties);
+  assert(_SlipWeakeningStress::numProperties == numProperties);
+  assert(stateVars);
+  assert(_SlipWeakeningStress::numStateVars == numStateVars);
+
+  const PylithScalar tolerance = 1.0e-12;
+  if (slipRate > tolerance) {
+    const PylithScalar slipPrev = stateVars[s_slipPrev];
+
+    stateVars[s_slipPrev] = slip;
+    stateVars[s_slipCum] += fabs(slip - slipPrev);
+  } else {
+    // Sliding has stopped, so reset state variables.
+    stateVars[s_slipPrev] = slip;
+    stateVars[s_slipCum] = 0.0;
+  } // else
+} // _updateStateVars
+
+
+// End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.hh (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/friction/SlipWeakeningStress.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakeningStress.hh	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,180 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// 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 libsrc/friction/SlipWeakeningStress.hh
+ *
+ * @brief C++ slip weakening fault constitutive model with
+ * stress-based friction and additional time parameter for nucleation.
+ */
+
+#if !defined(pylith_friction_slipweakeningstress_hh)
+#define pylith_friction_slipweakeningstress_hh
+
+// Include directives ---------------------------------------------------
+#include "FrictionModel.hh" // ISA FrictionModel
+
+// SlipWeakeningStress -------------------------------------------------------
+/** @brief C++ slip weakening fault constitutive model.
+ *
+ * Friction is equal stress as a function of slip.
+ */
+
+class pylith::friction::SlipWeakeningStress : public FrictionModel
+{ // class SlipWeakeningStress
+  friend class TestSlipWeakeningStress; // unit testing
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  SlipWeakeningStress(void);
+
+  /// Destructor.
+  ~SlipWeakeningStress(void);
+
+  // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+  /// These methods should be implemented by every constitutive model.
+
+  /** Compute properties from values in spatial database.
+   *
+   * @param propValues Array of property values.
+   * @param dbValues Array of database values.
+   */
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) const;
+
+  /** Nondimensionalize properties.
+   *
+   * @param values Array of property values.
+   * @param nvalues Number of values.
+   */
+  void _nondimProperties(PylithScalar* const values,
+			 const int nvalues) const;
+
+  /** Dimensionalize properties.
+   *
+   * @param values Array of property values.
+   * @param nvalues Number of values.
+   */
+  void _dimProperties(PylithScalar* const values,
+		      const int nvalues) const;
+
+  /** Compute friction from properties and state variables.
+   *
+   * @param slip Current slip at location.
+   * @param slipRate Current slip rate at location.
+   * @param normalTraction Normal traction at location.
+   * @param properties Properties at location.
+   * @param numProperties Number of properties.
+   * @param stateVars State variables at location.
+   * @param numStateVars Number of state variables.
+   */
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues) const;
+
+  /** Nondimensionalize state variables.
+   *
+   * @param values Array of initial state values.
+   * @param nvalues Number of values.
+   */
+  void _nondimStateVars(PylithScalar* const values,
+			   const int nvalues) const;
+  
+  /** Dimensionalize state variables.
+   *
+   * @param values Array of initial state values.
+   * @param nvalues Number of values.
+   */
+  void _dimStateVars(PylithScalar* const values,
+			const int nvalues) const;
+
+  /** Compute friction from properties and state variables.
+   *
+   * @param t Time in simulation.
+   * @param slip Current slip at location.
+   * @param slipRate Current slip rate at location.
+   * @param normalTraction Normal traction at location.
+   * @param properties Properties at location.
+   * @param numProperties Number of properties.
+   * @param stateVars State variables at location.
+   * @param numStateVars Number of state variables.
+   */
+  PylithScalar _calcFriction(const PylithScalar t,
+			     const PylithScalar slip,
+			     const PylithScalar slipRate,
+			     const PylithScalar normalTraction,
+			     const PylithScalar* properties,
+			     const int numProperties,
+			     const PylithScalar* stateVars,
+			     const int numStateVars);
+
+  /** Update state variables (for next time step).
+   *
+   * @param t Time in simulation.
+   * @param slip Current slip at location.
+   * @param slipRate Current slip rate at location.
+   * @param normalTraction Normal traction at location.
+   * @param stateVars State variables at location.
+   * @param numStateVars Number of state variables.
+   * @param properties Properties at location.
+   * @param numProperties Number of properties.
+   */
+  void _updateStateVars(const PylithScalar t,
+			const PylithScalar slip,
+			const PylithScalar slipRate,
+			const PylithScalar normalTraction,
+			PylithScalar* const stateVars,
+			const int numStateVars,
+			const PylithScalar* properties,
+			const int numProperties);
+
+  // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+  /// Indices for properties in section and spatial database.
+  static const int p_stressStatic;
+  static const int p_stressDyn;
+  static const int p_d0;
+  static const int p_weaktime;
+
+  static const int db_stressStatic;
+  static const int db_stressDyn;
+  static const int db_d0;
+  static const int db_weaktime;
+
+  /// Indices for state variables in section and spatial database.
+  static const int s_slipCum;
+  static const int s_slipPrev;
+
+  static const int db_slipCum;
+  static const int db_slipPrev;
+
+  // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+  SlipWeakeningStress(const SlipWeakeningStress&); ///< Not implemented.
+  const SlipWeakeningStress& operator=(const SlipWeakeningStress&); ///< Not implemented
+
+}; // class SlipWeakeningStress
+
+#endif // pylith_friction_slipweakeningstress_hh
+
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/frictionfwd.hh	2012-12-19 21:14:31 UTC (rev 21183)
@@ -35,6 +35,7 @@
     class StaticFriction;
     class SlipWeakening;
     class SlipWeakeningTime;
+    class SlipWeakeningStress;
     class RateStateAgeing;
     class TimeWeakening;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -29,6 +29,7 @@
 	StaticFriction.i \
 	SlipWeakening.i \
 	SlipWeakeningTime.i \
+	SlipWeakeningStress.i \
 	RateStateAgeing.i \
 	TimeWeakening.i
 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningStress.i (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/modulesrc/friction/SlipWeakeningStress.i)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningStress.i	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakeningStress.i	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// 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 modulesrc/friction/SlipWeakeningStress.i
+ *
+ * Python interface to C++ SlipWeakeningStress object.
+ */
+
+namespace pylith {
+  namespace friction {
+
+    class SlipWeakeningStress : public FrictionModel
+    { // class SlipWeakeningStress
+
+      // PUBLIC METHODS /////////////////////////////////////////////////
+    public :
+
+      /// Default constructor.
+      SlipWeakeningStress(void);
+
+      /// Destructor.
+      ~SlipWeakeningStress(void);
+
+      // PROTECTED METHODS //////////////////////////////////////////////
+    protected :
+
+      /** Compute properties from values in spatial database.
+       *
+       * @param propValues Array of property values.
+       * @param dbValues Array of database values.
+       */
+      void _dbToProperties(PylithScalar* const propValues,
+			   const scalar_array& dbValues) const;
+
+      /** Nondimensionalize properties.
+       *
+       * @param values Array of property values.
+       * @param nvalues Number of values.
+       */
+      void _nondimProperties(PylithScalar* const values,
+			     const int nvalues) const;
+
+      /** Dimensionalize properties.
+       *
+       * @param values Array of property values.
+       * @param nvalues Number of values.
+       */
+      void _dimProperties(PylithScalar* const values,
+			  const int nvalues) const;
+
+      /** Compute friction from properties and state variables.
+       *
+       * @param t Current time.
+       * @param slip Current slip at location.
+       * @param slipRate Current slip rate at location.
+       * @param normalTraction Normal traction at location.
+       * @param properties Properties at location.
+       * @param numProperties Number of properties.
+       * @param stateVars State variables at location.
+       * @param numStateVars Number of state variables.
+       */
+      PylithScalar _calcFriction(const PylithScalar t,
+				 const PylithScalar slip,
+				 const PylithScalar slipRate,
+				 const PylithScalar normalTraction,
+				 const PylithScalar* properties,
+				 const int numProperties,
+				 const PylithScalar* stateVars,
+				 const int numStateVars);
+
+    }; // class SlipWeakeningStress
+
+  } // friction
+} // pylith
+
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i	2012-12-19 21:14:31 UTC (rev 21183)
@@ -30,6 +30,7 @@
 #include "pylith/friction/StaticFriction.hh"
 #include "pylith/friction/SlipWeakening.hh"
 #include "pylith/friction/SlipWeakeningTime.hh"
+#include "pylith/friction/SlipWeakeningStress.hh"
 #include "pylith/friction/RateStateAgeing.hh"
 #include "pylith/friction/TimeWeakening.hh"
 
@@ -66,6 +67,7 @@
 %include "StaticFriction.i"
 %include "SlipWeakening.i"
 %include "SlipWeakeningTime.i"
+%include "SlipWeakeningStress.i"
 %include "RateStateAgeing.i"
 %include "TimeWeakening.i"
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -71,6 +71,7 @@
 	friction/StaticFriction.py \
 	friction/SlipWeakening.py \
 	friction/SlipWeakeningTime.py \
+	friction/SlipWeakeningStress.py \
 	friction/RateStateAgeing.py \
 	friction/TimeWeakening.py \
 	materials/__init__.py \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -80,6 +80,11 @@
     self._eventLogger.eventBegin(logEvent)
 
     BoundaryCondition.verifyConfiguration(self, self.mesh)
+    spaceDim = self.mesh.coordsys().spaceDim()
+    for d in self.bcDOF:
+      if d < 0 or d >= spaceDim:
+        raise ValueError("Attempting to constrain DOF (%d) that doesn't exist. Space dimension is %d." % \
+                         (d, spaceDim))
 
     self._eventLogger.eventEnd(logEvent)
     return

Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningStress.py (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/pylith/friction/SlipWeakeningStress.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningStress.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/SlipWeakeningStress.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,79 @@
+#!/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 pylith/friction/SlipWeakeningStress.py
+##
+## @brief Python object implementing slip weakening with stress levels
+## and forced weakening at a give time (sometimes used for
+## nucleation).
+##
+## Factory: friction_model.
+
+from FrictionModel import FrictionModel
+from friction import SlipWeakeningStress as ModuleSlipWeakeningStress
+
+# SlipWeakeningStress class
+class SlipWeakeningStress(FrictionModel, ModuleSlipWeakeningStress):
+  """
+  Python object implementing Slip Weakening.
+
+  Factory: friction_model.
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="slipweakening"):
+    """
+    Constructor.
+    """
+    FrictionModel.__init__(self, name)
+    self.availableFields = \
+        {'vertex': \
+           {'info': ["static_stress",
+                     "dynamic_stress",
+                     "slip_weakening_parameter",
+                     "weakening_time"],
+            'data': ["cumulative_slip",
+                     "previous_slip"]},
+         'cell': \
+           {'info': [],
+            'data': []}}
+    self._loggingPrefix = "FrSWS "
+    return
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _createModuleObj(self):
+    """
+    Call constructor for module object for access to C++ object.
+    """
+    ModuleSlipWeakeningStress.__init__(self)
+    return
+  
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def friction_model():
+  """
+  Factory associated with SlipWeakeningStress.
+  """
+  return SlipWeakeningStress()
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -89,6 +89,10 @@
       points = numpy.loadtxt(self.filename,
                              comments=self.commentDelimiter, 
                              delimiter=self.valueDelimiter)
+    ndims = len(points.shape)
+    if ndims == 1:
+      spaceDim = points.shape[0]
+      points = points.reshape((1,spaceDim))
     return points
   
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/GreensFns.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/GreensFns.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/GreensFns.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -151,7 +151,7 @@
     for material in self.materials.components():
       material.useElasticBehavior(True)
 
-    nimpulses = self.source.numImpulses()*self.source.numComponents()
+    nimpulses = self.source.numImpulses()
     ipulse = 0;
     dt = 1.0
     while ipulse < nimpulses:

Modified: short/3D/PyLith/branches/pylith-scecdynrup/setup.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/setup.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/setup.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -22,7 +22,7 @@
 setup(
     
     name = 'PyLith', 
-    version = '1.8.0',
+    version = '1.8.1',
 
     zip_safe = False,
     packages = find_packages(),

Modified: short/3D/PyLith/branches/pylith-scecdynrup/share/valgrind-python.supp
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/share/valgrind-python.supp	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/share/valgrind-python.supp	2012-12-19 21:14:31 UTC (rev 21183)
@@ -20,41 +20,70 @@
    ADDRESS_IN_RANGE/Invalid read of size 4
    Memcheck:Addr4
    fun:PyObject_Free
+   ...
 }
 
 {
    ADDRESS_IN_RANGE/Invalid read of size 4
-   Memcheck:Addr4
-   fun:PyObject_Realloc
+   Memcheck:Value4
+   fun:PyObject_Free
+   ...
 }
 
 {
    ADDRESS_IN_RANGE/Use of uninitialised value of size 8
    Memcheck:Value8
    fun:PyObject_Free
+   ...
 }
 
 {
-   ADDRESS_IN_RANGE/Use of uninitialised value of size 8
-   Memcheck:Value8
+   ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value(s)
+   Memcheck:Cond
+   fun:PyObject_Free
+   ...
+}
+
+{
+   ADDRESS_IN_RANGE/Invalid read of size 4
+   Memcheck:Addr4
    fun:PyObject_Realloc
+   ...
 }
 
 {
-   ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value(s)
-   Memcheck:Cond
-   fun:PyObject_Free
+   ADDRESS_IN_RANGE/Invalid read of size 4
+   Memcheck:Value4
+   fun:PyObject_Realloc
+   ...
 }
 
 {
+   ADDRESS_IN_RANGE/Use of uninitialised value of size 8
+   Memcheck:Value8
+   fun:PyObject_Realloc
+   ...
+}
+
+{
    ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value(s)
    Memcheck:Cond
    fun:PyObject_Realloc
+   ...
 }
 
 {
    ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value(s)
    Memcheck:Cond
    fun:__strcpy_chk
+   ...
 }
 
+{
+   ADDRESS_IN_RANGE/blocks are still reachable in loss
+   Memcheck:Leak
+   ...
+   fun:Py_InitializeEx
+   fun:_ZN11spatialdata5units6ParserC1Ev
+   ...
+}
\ No newline at end of file

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/nonplanar (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/tests/2d/nonplanar)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/eqinfo/TestEqInfo.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/eqinfo/TestEqInfo.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/eqinfo/TestEqInfo.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -22,6 +22,7 @@
 
 import unittest
 import numpy
+import math
 
 class TestEqInfo(unittest.TestCase):
   """
@@ -32,7 +33,6 @@
     """
     Check earthquake stats.
     """
-    tol = 1.0e-6
     attrs = ["timestamp",
              "ruparea",
              "potency",
@@ -53,9 +53,12 @@
       for (valueE, value) in zip(valuesE, values):
         msg = "Mismatch in value for attribute '%s', %g != %g." % (attr, valueE, value)
         if valueE != 0.0:
-          self.assertAlmostEqual(valueE, value, msg=msg, delta=abs(tol*valueE))
+          if math.isinf(math.fabs(valueE)):
+            self.assertAlmostEqual(1.0, math.fabs(value)/1.0e+30, places=6, msg=msg)
+          else:
+            self.assertAlmostEqual(1.0, value/valueE, places=6, msg=msg)
         else:
-          self.assertAlmostEqual(valueE, value, msg=msg, delta=tol)
+          self.assertAlmostEqual(valueE, value, places=6, msg=msg)
         
     return
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -32,6 +32,7 @@
 	TestStaticFriction.cc \
 	TestSlipWeakening.cc \
 	TestSlipWeakeningTime.cc \
+	TestSlipWeakeningStress.cc \
 	TestRateStateAgeing.cc \
 	TestTimeWeakening.cc
 
@@ -41,6 +42,7 @@
 	TestStaticFriction.hh \
 	TestSlipWeakening.hh \
 	TestSlipWeakeningTime.hh \
+	TestSlipWeakeningStress.hh \
 	TestRateStateAgeing.hh \
 	TestTimeWeakening.hh
 
@@ -50,6 +52,7 @@
 	data/StaticFrictionData.cc \
 	data/SlipWeakeningData.cc \
 	data/SlipWeakeningTimeData.cc \
+	data/SlipWeakeningStressData.cc \
 	data/RateStateAgeingData.cc \
 	data/TimeWeakeningData.cc
 
@@ -59,6 +62,7 @@
 	data/StaticFrictionData.hh \
 	data/SlipWeakeningData.hh \
 	data/SlipWeakeningTimeData.hh \
+	data/SlipWeakeningStressData.hh \
 	data/RateStateAgeingData.hh \
 	data/TimeWeakeningData.hh
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2012-12-19 21:14:31 UTC (rev 21183)
@@ -442,14 +442,12 @@
     
     const PylithScalar* const propertiesE = &_data->properties[iLoc*propertiesSize];
     const PylithScalar tolerance = 1.0e-06;
+
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesE[i]) > tolerance)
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
-				     properties[i]/propertiesE[i],
-				     tolerance);
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, properties[i]/propertiesE[i], tolerance);
       else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesE[i], properties[i],
-				     tolerance);
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesE[i], properties[i], tolerance);
     } // for
   } // for
 } // testDBToProperties

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.cc (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/TestSlipWeakeningStress.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.cc	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,87 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// 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.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestSlipWeakeningStress.hh" // Implementation of class methods
+
+#include "data/SlipWeakeningStressData.hh" // USES SlipWeakeningStressData
+
+#include "pylith/friction/SlipWeakeningStress.hh" // USES SlipWeakeningStress
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::friction::TestSlipWeakeningStress );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::friction::TestSlipWeakeningStress::setUp(void)
+{ // setUp
+  _friction = new SlipWeakeningStress();
+  _data = new SlipWeakeningStressData();
+  setupNormalizer();
+} // setUp
+
+// ----------------------------------------------------------------------
+// Test properties metadata.
+void
+pylith::friction::TestSlipWeakeningStress::testPropertiesMetadata(void)
+{ // testPropertiesMetadata
+  SlipWeakeningStress model;
+
+  CPPUNIT_ASSERT_EQUAL(4, model._metadata.numDBProperties());
+  const char* const* names = model._metadata.dbProperties();
+  CPPUNIT_ASSERT_EQUAL(std::string("static-stress"), std::string(names[0]));
+  CPPUNIT_ASSERT_EQUAL(std::string("dynamic-stress"), std::string(names[1]));
+  CPPUNIT_ASSERT_EQUAL(std::string("slip-weakening-parameter"), std::string(names[2]));
+  CPPUNIT_ASSERT_EQUAL(std::string("weakening-time"), std::string(names[3]));
+} // testPropertiesMetadata
+
+// ----------------------------------------------------------------------
+// Test state variable metadata.
+void
+pylith::friction::TestSlipWeakeningStress::testStateVarsMetadata(void)
+{ // testStateVarsMetadata
+  SlipWeakeningStress model;
+
+  CPPUNIT_ASSERT_EQUAL(2, model._metadata.numDBStateVars());
+  const char* const* names = model._metadata.dbStateVars();
+  CPPUNIT_ASSERT_EQUAL(std::string("cumulative-slip"), 
+		       std::string(names[0]));
+  CPPUNIT_ASSERT_EQUAL(std::string("previous-slip"), 
+		       std::string(names[1]));
+} // testStateVarsMetadata
+
+// ----------------------------------------------------------------------
+// Test hasPropStateVar().
+void
+pylith::friction::TestSlipWeakeningStress::testHasPropStateVar(void)
+{ // testHasPropStateVar
+  SlipWeakeningStress material;
+
+  CPPUNIT_ASSERT(material.hasPropStateVar("static_stress"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("dynamic_stress"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("slip_weakening_parameter"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("weakening_time"));
+  CPPUNIT_ASSERT(!material.hasPropStateVar("aaa"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("cumulative_slip"));
+  CPPUNIT_ASSERT(material.hasPropStateVar("previous_slip"));
+} // testHasPropStateVar
+
+
+// End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.hh (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/TestSlipWeakeningStress.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestSlipWeakeningStress.hh	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,80 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// 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 unittests/libtests/friction/TestSlipWeakeningStress.hh
+ *
+ * @brief C++ TestSlipWeakeningStress object
+ *
+ * C++ unit testing for SlipWeakeningStress.
+ */
+
+#if !defined(pylith_friction_testslipweakeningstress_hh)
+#define pylith_friction_testslipweakeningstress_hh
+
+#include "TestFrictionModel.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace friction {
+    class TestSlipWeakeningStress;
+  } // friction
+} // pylith
+
+/// C++ unit testing for SlipWeakeningStress
+class pylith::friction::TestSlipWeakeningStress : public TestFrictionModel
+{ // class TestSlipWeakeningStress
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestSlipWeakeningStress );
+
+  CPPUNIT_TEST( testPropertiesMetadata );
+  CPPUNIT_TEST( testStateVarsMetadata );
+  CPPUNIT_TEST( testDBToProperties );
+  CPPUNIT_TEST( testNonDimProperties );
+  CPPUNIT_TEST( testDimProperties );
+  CPPUNIT_TEST( testDBToStateVars );
+  CPPUNIT_TEST( testNonDimStateVars );
+  CPPUNIT_TEST( testDimStateVars );
+  CPPUNIT_TEST( testHasPropStateVar );
+  CPPUNIT_TEST( test_calcFriction );
+  CPPUNIT_TEST( test_updateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Test properties metadata.
+  void testPropertiesMetadata(void);
+
+  /// Test state variable metadata.
+  void testStateVarsMetadata(void);
+
+  /// Test hasPropStateVar().
+  void testHasPropStateVar(void);
+
+}; // class TestSlipWeakeningStress
+
+#endif // pylith_friction_testslipweakeningstress_hh
+
+
+// End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.cc (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningStressData.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.cc	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,185 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// 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.
+//
+// ======================================================================
+//
+
+#include "SlipWeakeningStressData.hh"
+
+const int pylith::friction::SlipWeakeningStressData::_numLocs = 2;
+
+const int pylith::friction::SlipWeakeningStressData::_numProperties = 4;
+
+const int pylith::friction::SlipWeakeningStressData::_numStateVars = 2;
+
+const int pylith::friction::SlipWeakeningStressData::_numDBProperties = 4;
+
+const int pylith::friction::SlipWeakeningStressData::_numDBStateVars = 2;
+
+const int pylith::friction::SlipWeakeningStressData::_numPropsVertex = 4;
+
+const int pylith::friction::SlipWeakeningStressData::_numVarsVertex = 2;
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_lengthScale =   1.00000000e+03;
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_timeScale =   1.00000000e+01;
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_pressureScale =   2.5000000e+10;
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_densityScale =   1.00000000e+03;
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_dt = 0.01;
+
+const int pylith::friction::SlipWeakeningStressData::_numPropertyValues[] = {
+  1,
+  1,
+  1,
+  1,
+};
+
+const int pylith::friction::SlipWeakeningStressData::_numStateVarValues[] = {
+  1,
+  1,
+};
+
+const char* pylith::friction::SlipWeakeningStressData::_dbPropertyValues[] = {
+  "static-stress",
+  "dynamic-stress",
+  "slip-weakening-parameter",
+  "weakening-time",
+};
+
+const char* pylith::friction::SlipWeakeningStressData::_dbStateVarValues[] = {
+  "cumulative-slip",
+  "previous-slip",
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_dbProperties[] = {
+  2.0e+6,
+  1.0e+6,
+  0.8,
+  2.0,
+  2.5e+6,
+  1.25e+6,
+  0.4,
+  1.0,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_dbStateVars[] = {
+  0.4,
+  0.2,
+  0.5,
+  0.1,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_properties[] = {
+  2.0e+6,
+  1.0e+6,
+  0.8,
+  2.0,
+  2.5e+6,
+  1.25e+6,
+  0.4,
+  1.0,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_stateVars[] = {
+  0.4,
+  0.2,
+  0.5,
+  0.1,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_propertiesNondim[] = {
+  2.0e+6/2.5e+10,
+  1.0e+6/2.5e+10,
+  0.0008,
+  0.2,
+  2.5e+6/2.5e+10,
+  1.25e+6/2.5e+10,
+  0.0004,
+  0.1,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_stateVarsNondim[] = {
+  0.0004,
+  0.0002,
+  0.0005,
+  0.0001,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_friction[] = {
+  1.5e+6,
+  1.25e+6,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_slip[] = {
+  0.12,
+  0.25,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_slipRate[] = {
+  0.74,
+  0.64,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_normalTraction[] = {
+  -2.2,
+  -2.3,
+};
+
+const PylithScalar pylith::friction::SlipWeakeningStressData::_stateVarsUpdated[] = {
+  0.48,
+  0.12,
+  0.65,
+  0.25,
+};
+
+pylith::friction::SlipWeakeningStressData::SlipWeakeningStressData(void)
+{ // constructor
+  numLocs = _numLocs;
+  numProperties = _numProperties;
+  numStateVars = _numStateVars;
+  numDBProperties = _numDBProperties;
+  numDBStateVars = _numDBStateVars;
+  numPropsVertex = _numPropsVertex;
+  numVarsVertex = _numVarsVertex;
+  lengthScale = _lengthScale;
+  timeScale = _timeScale;
+  pressureScale = _pressureScale;
+  densityScale = _densityScale;
+  numPropertyValues = const_cast<int*>(_numPropertyValues);
+  numStateVarValues = const_cast<int*>(_numStateVarValues);
+  dbPropertyValues = const_cast<char**>(_dbPropertyValues);
+  dbStateVarValues = const_cast<char**>(_dbStateVarValues);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  dt = _dt;
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  friction = const_cast<PylithScalar*>(_friction);
+  slip = const_cast<PylithScalar*>(_slip);
+  slipRate = const_cast<PylithScalar*>(_slipRate);
+  normalTraction = const_cast<PylithScalar*>(_normalTraction);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
+} // constructor
+
+pylith::friction::SlipWeakeningStressData::~SlipWeakeningStressData(void)
+{}
+
+
+// End of file

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.hh (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/unittests/libtests/friction/data/SlipWeakeningStressData.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningStressData.hh	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,101 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// 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.
+//
+// ======================================================================
+//
+
+#if !defined(pylith_friction_slipweakeningstressdata_hh)
+#define pylith_friction_slipweakeningstressdata_hh
+
+#include "FrictionModelData.hh"
+
+namespace pylith {
+  namespace friction {
+     class SlipWeakeningStressData;
+  } // pylith
+} // friction
+
+class pylith::friction::SlipWeakeningStressData : public FrictionModelData
+{
+
+public: 
+
+  /// Constructor
+  SlipWeakeningStressData(void);
+
+  /// Destructor
+  ~SlipWeakeningStressData(void);
+
+private:
+
+  static const int _numLocs;
+
+  static const int _numProperties;
+
+  static const int _numStateVars;
+
+  static const int _numDBProperties;
+
+  static const int _numDBStateVars;
+
+  static const int _numPropsVertex;
+
+  static const int _numVarsVertex;
+
+  static const PylithScalar _lengthScale;
+
+  static const PylithScalar _timeScale;
+
+  static const PylithScalar _pressureScale;
+
+  static const PylithScalar _densityScale;
+
+  static const PylithScalar _dt;
+
+  static const int _numPropertyValues[];
+
+  static const int _numStateVarValues[];
+
+  static const char* _dbPropertyValues[];
+
+  static const char* _dbStateVarValues[];
+
+  static const PylithScalar _dbProperties[];
+
+  static const PylithScalar _dbStateVars[];
+
+  static const PylithScalar _properties[];
+
+  static const PylithScalar _stateVars[];
+
+  static const PylithScalar _propertiesNondim[];
+
+  static const PylithScalar _stateVarsNondim[];
+
+  static const PylithScalar _friction[];
+
+  static const PylithScalar _slip[];
+
+  static const PylithScalar _slipRate[];
+
+  static const PylithScalar _normalTraction[];
+
+  static const PylithScalar _stateVarsUpdated[];
+
+};
+
+#endif // pylith_friction_slipweakeningstressdata_hh
+
+// End of file

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningTimeData.hh	2012-12-19 21:14:31 UTC (rev 21183)
@@ -16,8 +16,8 @@
 // ======================================================================
 //
 
-#if !defined(pylith_friction_slipweakeningdata_hh)
-#define pylith_friction_slipweakeningdata_hh
+#if !defined(pylith_friction_slipweakeningtimedata_hh)
+#define pylith_friction_slipweakeningtimedata_hh
 
 #include "FrictionModelData.hh"
 
@@ -96,6 +96,6 @@
 
 };
 
-#endif // pylith_friction_slipweakeningdata_hh
+#endif // pylith_friction_slipweakeningtimedata_hh
 
 // End of file

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -386,147 +386,171 @@
 	output_vertex_filter_t12.vtk \
 	output_cell_t12.vtk \
 	output_cell_filter_t12.vtk \
+	hex8_points_t10.vtk \
+	hex8_points_vertex_t10.vtk \
+	quad4_points_t10.vtk \
+	quad4_points_vertex_t10.vtk \
+	tet4_points_t10.vtk \
+	tet4_points_vertex_t10.vtk \
+	tri3_points_t10.vtk \
+	tri3_points_vertex_t10.vtk \
 	test.h5 \
 	test.dat \
 	line2.h5 \
 	line2_cell.h5 \
 	line2_vertex.h5 \
+	line2_mat.h5 \
+	line2_mat_vertex.h5 \
+	line2_mat_cell.h5 \
+	line2_surf.h5 \
+	line2_surf_vertex.h5 \
+	line2_surf_cell.h5 \
 	tri3.h5 \
+	tri3.xmf \
 	tri3_cell.h5 \
+	tri3_cell.xmf \
 	tri3_vertex.h5 \
+	tri3_vertex.xmf \
+	tri3_mat.h5 \
+	tri3_mat.xmf \
+	tri3_mat_vertex.h5 \
+	tri3_mat_vertex.xmf \
+	tri3_mat_cell.h5 \
+	tri3_mat_cell.xmf \
+	tri3_surf.h5 \
+	tri3_surf.xmf \
+	tri3_surf_vertex.h5 \
+	tri3_surf_vertex.xmf \
+	tri3_surf_cell.h5 \
+	tri3_surf_cell.xmf \
+	tri3_bc.h5 \
+	tri3_bc.xmf \
+	tri3_bc_vertex.h5 \
+	tri3_bc_vertex.xmf \
+	tri3_bc_cell.h5 \
+	tri3_bc_cell.xmf \
+	tri3_fault.h5 \
+	tri3_fault.xmf \
+	tri3_fault_vertex.h5 \
+	tri3_fault_vertex.xmf \
+	tri3_fault_cell.h5 \
+	tri3_fault_cell.xmf \
 	quad4.h5 \
+	quad4.xmf \
 	quad4_cell.h5 \
+	quad4_cell.xmf \
 	quad4_vertex.h5 \
+	quad4_vertex.xmf \
+	quad4_mat.h5 \
+	quad4_mat.smf \
+	quad4_mat_vertex.h5 \
+	quad4_mat_vertex.xmf \
+	quad4_mat_cell.h5 \
+	quad4_mat_cell.xmf \
+	quad4_surf.h5 \
+	quad4_surf.xmf \
+	quad4_surf_vertex.h5 \
+	quad4_surf_vertex.xmf \
+	quad4_surf_cell.h5 \
+	quad4_surf_cell.xmf \
+	quad4_bc.h5 \
+	quad4_bc.xmf \
+	quad4_bc_vertex.h5 \
+	quad4_bc_vertex.xmf \
+	quad4_bc_cell.h5 \
+	quad4_bc_cell.xmf \
+	quad4_fault.h5 \
+	quad4_fault.xmf \
+	quad4_fault_vertex.h5 \
+	quad4_fault_vertex.xmf \
+	quad4_fault_cell.h5 \
+	quad4_fault_cell.xmf \
 	tet4.h5 \
+	tet4.xmf \
 	tet4_cell.h5 \
+	tet4_cell.xmf \
 	tet4_vertex.h5 \
+	tet4_vertex.xmf \
+	tet4_mat.h5 \
+	tet4_mat.xmf \
+	tet4_mat_vertex.h5 \
+	tet4_mat_vertex.xmf \
+	tet4_mat_cell.h5 \
+	tet4_mat_cell.xmf \
+	tet4_surf.h5 \
+	tet4_surf.xmf \
+	tet4_surf_vertex.h5 \
+	tet4_surf_vertex.xmf \
+	tet4_surf_cell.h5 \
+	tet4_surf_cell.xmf \
+	tet4_bc.h5 \
+	tet4_bc.xmf \
+	tet4_bc_vertex.h5 \
+	tet4_bc_vertex.xmf \
+	tet4_bc_cell.h5 \
+	tet4_bc_cell.xmf \
+	tet4_fault.h5 \
+	tet4_fault.xmf \
+	tet4_fault_vertex.h5 \
+	tet4_fault_vertex.xmf \
+	tet4_fault_cell.h5 \
+	tet4_fault_cell.xmf \
 	hex8.h5 \
+	hex8.xmf \
 	hex8_cell.h5 \
+	hex8_cell.xmf \
 	hex8_vertex.h5 \
-	line2_mat.h5 \
-	line2_mat_vertex.h5 \
-	line2_mat_cell.h5 \
-	tri3_mat.h5 \
-	tri3_mat_vertex.h5 \
-	tri3_mat_cell.h5 \
-	quad4_mat.h5 \
-	quad4_mat_vertex.h5 \
-	quad4_mat_cell.h5 \
-	tet4_mat.h5 \
-	tet4_mat_vertex.h5 \
-	tet4_mat_cell.h5 \
+	hex8_vertex.xmf \
 	hex8_mat.h5 \
+	hex8_mat.xmf \
 	hex8_mat_vertex.h5 \
+	hex8_mat_vertex.xmf \
 	hex8_mat_cell.h5 \
-	line2_surf.h5 \
-	line2_surf_vertex.h5 \
-	line2_surf_cell.h5 \
-	tri3_surf.h5 \
-	tri3_surf_vertex.h5 \
-	tri3_surf_cell.h5 \
-	quad4_surf.h5 \
-	quad4_surf_vertex.h5 \
-	quad4_surf_cell.h5 \
-	tet4_surf.h5 \
-	tet4_surf_vertex.h5 \
-	tet4_surf_cell.h5 \
+	hex8_mat_cell.xmf \
 	hex8_surf.h5 \
+	hex8_surf.xmf \
 	hex8_surf_vertex.h5 \
+	hex8_surf_vertex.xmf \
 	hex8_surf_cell.h5 \
-	tri3_bc.h5 \
-	tri3_bc_vertex.h5 \
-	tri3_bc_cell.h5 \
-	quad4_bc.h5 \
-	quad4_bc_vertex.h5 \
-	quad4_bc_cell.h5 \
-	tet4_bc.h5 \
-	tet4_bc_vertex.h5 \
-	tet4_bc_cell.h5 \
+	hex8_surf_cell.xmf \
 	hex8_bc.h5 \
+	hex8_bc.xmf \
 	hex8_bc_vertex.h5 \
+	hex8_bc_vertex.xmf \
 	hex8_bc_cell.h5 \
-	tri3_fault.h5 \
-	tri3_fault_vertex.h5 \
-	tri3_fault_cell.h5 \
-	quad4_fault.h5 \
-	quad4_fault_vertex.h5 \
-	quad4_fault_cell.h5 \
-	tet4_fault.h5 \
-	tet4_fault_vertex.h5 \
-	tet4_fault_cell.h5 \
+	hex8_bc_cell.xmf \
 	hex8_fault.h5 \
+	hex8_fault.xmf \
 	hex8_fault_vertex.h5 \
+	hex8_fault_vertex.xmf \
 	hex8_fault_cell.h5 \
-	hex8_cell_cells.dat \
-	hex8_cell_cells.dat.info \
-	hex8_cell_info_cells.dat.info \
-	hex8_cell_info_other.dat.info \
-	hex8_cell_info_pressure.dat.info \
-	hex8_cell_info_traction.dat.info \
-	hex8_cell_info_vertices.dat.info \
-	hex8_cell_other.dat \
-	hex8_cell_other.dat.info \
-	hex8_cell_pressure.dat \
-	hex8_cell_pressure.dat.info \
-	hex8_cells.dat \
-	hex8_cells.dat.info \
-	hex8_cell_traction.dat \
-	hex8_cell_traction.dat.info \
-	hex8_cell_vertices.dat \
-	hex8_cell_vertices.dat.info \
-	hex8_info_cells.dat.info \
-	hex8_info_vertices.dat.info \
-	hex8_mat_cell_cells.dat \
-	hex8_mat_cell_cells.dat.info \
-	hex8_mat_cell_other.dat \
-	hex8_mat_cell_other.dat.info \
-	hex8_mat_cell_pressure.dat \
-	hex8_mat_cell_pressure.dat.info \
-	hex8_mat_cells.dat \
-	hex8_mat_cells.dat.info \
-	hex8_mat_cell_traction.dat \
-	hex8_mat_cell_traction.dat.info \
-	hex8_mat_cell_vertices.dat \
-	hex8_mat_cell_vertices.dat.info \
-	hex8_mat_vertex_cells.dat \
-	hex8_mat_vertex_cells.dat.info \
-	hex8_mat_vertex_displacements.dat \
-	hex8_mat_vertex_displacements.dat.info \
-	hex8_mat_vertex_other.dat \
-	hex8_mat_vertex_other.dat.info \
-	hex8_mat_vertex_pressure.dat \
-	hex8_mat_vertex_pressure.dat.info \
-	hex8_mat_vertex_vertices.dat \
-	hex8_mat_vertex_vertices.dat.info \
-	hex8_mat_vertices.dat \
-	hex8_mat_vertices.dat.info \
-	hex8_vertex_cells.dat \
-	hex8_vertex_cells.dat.info \
-	hex8_vertex_displacements.dat \
-	hex8_vertex_displacements.dat.info \
-	hex8_vertex_info_cells.dat.info \
-	hex8_vertex_info_displacements.dat.info \
-	hex8_vertex_info_other.dat.info \
-	hex8_vertex_info_pressure.dat.info \
-	hex8_vertex_info_vertices.dat.info \
-	hex8_vertex_other.dat \
-	hex8_vertex_other.dat.info \
-	hex8_vertex_pressure.dat \
-	hex8_vertex_pressure.dat.info \
-	hex8_vertex_vertices.dat \
-	hex8_vertex_vertices.dat.info \
-	hex8_vertices.dat \
-	hex8_vertices.dat.info \
+	hex8_fault_cell.xmf \
+	line2_cells.dat \
+	line2_cells.dat.info \
+	line2_vertices.dat \
+	line2_vertices.dat.info \
+	line2_vertex_cells.dat \
+	line2_vertex_cells.dat.info \
+	line2_vertex_displacement.dat \
+	line2_vertex_displacement.dat.info \
+	line2_vertex_other.dat \
+	line2_vertex_other.dat.info \
+	line2_vertex_stress.dat \
+	line2_vertex_stress.dat.info \
+	line2_vertex_pressure.dat \
+	line2_vertex_pressure.dat.info \
+	line2_vertex_vertices.dat \
+	line2_vertex_vertices.dat.info \
 	line2_cell_cells.dat \
 	line2_cell_cells.dat.info \
 	line2_cell_other.dat \
 	line2_cell_other.dat.info \
 	line2_cell_pressure.dat \
 	line2_cell_pressure.dat.info \
-	line2_cells.dat \
-	line2_cells.dat.info \
 	line2_cell_traction.dat \
 	line2_cell_traction.dat.info \
+	line2_cell_stress.dat \
+	line2_cell_stress.dat.info \
 	line2_cell_vertices.dat \
 	line2_cell_vertices.dat.info \
 	line2_mat_cell_cells.dat \
@@ -539,42 +563,218 @@
 	line2_mat_cells.dat.info \
 	line2_mat_cell_traction.dat \
 	line2_mat_cell_traction.dat.info \
+	line2_mat_cell_stress.dat \
+	line2_mat_cell_stress.dat.info \
 	line2_mat_cell_vertices.dat \
 	line2_mat_cell_vertices.dat.info \
 	line2_mat_vertex_cells.dat \
 	line2_mat_vertex_cells.dat.info \
-	line2_mat_vertex_displacements.dat \
-	line2_mat_vertex_displacements.dat.info \
+	line2_mat_vertex_displacement.dat \
+	line2_mat_vertex_displacement.dat.info \
 	line2_mat_vertex_other.dat \
 	line2_mat_vertex_other.dat.info \
 	line2_mat_vertex_pressure.dat \
 	line2_mat_vertex_pressure.dat.info \
+	line2_mat_vertex_stress.dat \
+	line2_mat_vertex_stress.dat.info \
 	line2_mat_vertex_vertices.dat \
 	line2_mat_vertex_vertices.dat.info \
 	line2_mat_vertices.dat \
 	line2_mat_vertices.dat.info \
-	line2_vertex_cells.dat \
-	line2_vertex_cells.dat.info \
-	line2_vertex_displacements.dat \
-	line2_vertex_displacements.dat.info \
-	line2_vertex_other.dat \
-	line2_vertex_other.dat.info \
-	line2_vertex_pressure.dat \
-	line2_vertex_pressure.dat.info \
-	line2_vertex_vertices.dat \
-	line2_vertex_vertices.dat.info \
-	line2_vertices.dat \
-	line2_vertices.dat.info \
+	line2_surf_cell_cells.dat \
+	line2_surf_cell_cells.dat.info \
+	line2_surf_cell_other.dat \
+	line2_surf_cell_other.dat.info \
+	line2_surf_cell_pressure.dat \
+	line2_surf_cell_pressure.dat.info \
+	line2_surf_cells.dat \
+	line2_surf_cells.dat.info \
+	line2_surf_cell_stress.dat \
+	line2_surf_cell_stress.dat.info \
+	line2_surf_cell_traction.dat \
+	line2_surf_cell_traction.dat.info \
+	line2_surf_cell_vertices.dat \
+	line2_surf_cell_vertices.dat.info \
+	line2_surf_vertex_cells.dat \
+	line2_surf_vertex_cells.dat.info \
+	line2_surf_vertex_displacement.dat \
+	line2_surf_vertex_displacement.dat.info \
+	line2_surf_vertex_other.dat \
+	line2_surf_vertex_other.dat.info \
+	line2_surf_vertex_pressure.dat \
+	line2_surf_vertex_pressure.dat.info \
+	line2_surf_vertex_stress.dat \
+	line2_surf_vertex_stress.dat.info \
+	line2_surf_vertex_vertices.dat \
+	line2_surf_vertex_vertices.dat.info \
+	line2_surf_vertices.dat \
+	line2_surf_vertices.dat.info \
+	tri3_cells.dat \
+	tri3_cells.dat.info \
+	tri3_vertices.dat \
+	tri3_vertices.dat.info \
+	tri3_vertex_cells.dat \
+	tri3_vertex_cells.dat.info \
+	tri3_vertex_displacement.dat \
+	tri3_vertex_displacement.dat.info \
+	tri3_vertex_other.dat \
+	tri3_vertex_other.dat.info \
+	tri3_vertex_pressure.dat \
+	tri3_vertex_pressure.dat.info \
+	tri3_vertex_stress.dat \
+	tri3_vertex_stress.dat.info \
+	tri3_vertex_vertices.dat \
+	tri3_vertex_vertices.dat.info \
+	tri3_cell_cells.dat \
+	tri3_cell_cells.dat.info \
+	tri3_cell_other.dat \
+	tri3_cell_other.dat.info \
+	tri3_cell_pressure.dat \
+	tri3_cell_pressure.dat.info \
+	tri3_cell_traction.dat \
+	tri3_cell_traction.dat.info \
+	tri3_cell_stress.dat \
+	tri3_cell_stress.dat.info \
+	tri3_cell_vertices.dat \
+	tri3_cell_vertices.dat.info \
+	tri3_mat_cell_cells.dat \
+	tri3_mat_cell_cells.dat.info \
+	tri3_mat_cell_other.dat \
+	tri3_mat_cell_other.dat.info \
+	tri3_mat_cell_pressure.dat \
+	tri3_mat_cell_pressure.dat.info \
+	tri3_mat_cell_stress.dat \
+	tri3_mat_cell_stress.dat.info \
+	tri3_mat_cells.dat \
+	tri3_mat_cells.dat.info \
+	tri3_mat_cell_traction.dat \
+	tri3_mat_cell_traction.dat.info \
+	tri3_mat_cell_vertices.dat \
+	tri3_mat_cell_vertices.dat.info \
+	tri3_mat_vertex_cells.dat \
+	tri3_mat_vertex_cells.dat.info \
+	tri3_mat_vertex_displacement.dat \
+	tri3_mat_vertex_displacement.dat.info \
+	tri3_mat_vertex_other.dat \
+	tri3_mat_vertex_other.dat.info \
+	tri3_mat_vertex_pressure.dat \
+	tri3_mat_vertex_pressure.dat.info \
+	tri3_mat_vertex_stress.dat \
+	tri3_mat_vertex_stress.dat.info \
+	tri3_mat_vertex_vertices.dat \
+	tri3_mat_vertex_vertices.dat.info \
+	tri3_mat_vertices.dat \
+	tri3_mat_vertices.dat.info \
+	tri3_surf_cell_cells.dat \
+	tri3_surf_cell_cells.dat.info \
+	tri3_surf_cell_other.dat \
+	tri3_surf_cell_other.dat.info \
+	tri3_surf_cell_pressure.dat \
+	tri3_surf_cell_pressure.dat.info \
+	tri3_surf_cells.dat \
+	tri3_surf_cells.dat.info \
+	tri3_surf_cell_stress.dat \
+	tri3_surf_cell_stress.dat.info \
+	tri3_surf_cell_traction.dat \
+	tri3_surf_cell_traction.dat.info \
+	tri3_surf_cell_vertices.dat \
+	tri3_surf_cell_vertices.dat.info \
+	tri3_surf_vertex_cells.dat \
+	tri3_surf_vertex_cells.dat.info \
+	tri3_surf_vertex_displacement.dat \
+	tri3_surf_vertex_displacement.dat.info \
+	tri3_surf_vertex_other.dat \
+	tri3_surf_vertex_other.dat.info \
+	tri3_surf_vertex_pressure.dat \
+	tri3_surf_vertex_pressure.dat.info \
+	tri3_surf_vertex_stress.dat \
+	tri3_surf_vertex_stress.dat.info \
+	tri3_surf_vertex_vertices.dat \
+	tri3_surf_vertex_vertices.dat.info \
+	tri3_surf_vertices.dat \
+	tri3_surf_vertices.dat.info \
+	tri3_bc_cell_cells.dat \
+	tri3_bc_cell_cells.dat.info \
+	tri3_bc_cell_other.dat \
+	tri3_bc_cell_other.dat.info \
+	tri3_bc_cell_pressure.dat \
+	tri3_bc_cell_pressure.dat.info \
+	tri3_bc_cells.dat \
+	tri3_bc_cells.dat.info \
+	tri3_bc_cell_stress.dat \
+	tri3_bc_cell_stress.dat.info \
+	tri3_bc_cell_traction.dat \
+	tri3_bc_cell_traction.dat.info \
+	tri3_bc_cell_vertices.dat \
+	tri3_bc_cell_vertices.dat.info \
+	tri3_bc_vertex_cells.dat \
+	tri3_bc_vertex_cells.dat.info \
+	tri3_bc_vertex_displacement.dat \
+	tri3_bc_vertex_displacement.dat.info \
+	tri3_bc_vertex_other.dat \
+	tri3_bc_vertex_other.dat.info \
+	tri3_bc_vertex_pressure.dat \
+	tri3_bc_vertex_pressure.dat.info \
+	tri3_bc_vertex_stress.dat \
+	tri3_bc_vertex_stress.dat.info \
+	tri3_bc_vertex_vertices.dat \
+	tri3_bc_vertex_vertices.dat.info \
+	tri3_bc_vertices.dat \
+	tri3_bc_vertices.dat.info \
+	tri3_fault_cell_cells.dat \
+	tri3_fault_cell_cells.dat.info \
+	tri3_fault_cell_other.dat \
+	tri3_fault_cell_other.dat.info \
+	tri3_fault_cell_pressure.dat \
+	tri3_fault_cell_pressure.dat.info \
+	tri3_fault_cells.dat \
+	tri3_fault_cells.dat.info \
+	tri3_fault_cell_stress.dat \
+	tri3_fault_cell_stress.dat.info \
+	tri3_fault_cell_traction.dat \
+	tri3_fault_cell_traction.dat.info \
+	tri3_fault_cell_vertices.dat \
+	tri3_fault_cell_vertices.dat.info \
+	tri3_fault_vertex_cells.dat \
+	tri3_fault_vertex_cells.dat.info \
+	tri3_fault_vertex_displacement.dat \
+	tri3_fault_vertex_displacement.dat.info \
+	tri3_fault_vertex_other.dat \
+	tri3_fault_vertex_other.dat.info \
+	tri3_fault_vertex_pressure.dat \
+	tri3_fault_vertex_pressure.dat.info \
+	tri3_fault_vertex_stress.dat \
+	tri3_fault_vertex_stress.dat.info \
+	tri3_fault_vertex_vertices.dat \
+	tri3_fault_vertex_vertices.dat.info \
+	tri3_fault_vertices.dat \
+	tri3_fault_vertices.dat.info \
+	quad4_cells.dat \
+	quad4_cells.dat.info \
+	quad4_vertices.dat \
+	quad4_vertices.dat.info \
+	quad4_vertex_cells.dat \
+	quad4_vertex_cells.dat.info \
+	quad4_vertex_displacement.dat \
+	quad4_vertex_displacement.dat.info \
+	quad4_vertex_other.dat \
+	quad4_vertex_other.dat.info \
+	quad4_vertex_pressure.dat \
+	quad4_vertex_pressure.dat.info \
+	quad4_vertex_stress.dat \
+	quad4_vertex_stress.dat.info \
+	quad4_vertex_vertices.dat \
+	quad4_vertex_vertices.dat.info \
 	quad4_cell_cells.dat \
 	quad4_cell_cells.dat.info \
 	quad4_cell_other.dat \
 	quad4_cell_other.dat.info \
 	quad4_cell_pressure.dat \
 	quad4_cell_pressure.dat.info \
-	quad4_cells.dat \
-	quad4_cells.dat.info \
 	quad4_cell_traction.dat \
 	quad4_cell_traction.dat.info \
+	quad4_cell_stress.dat \
+	quad4_cell_stress.dat.info \
 	quad4_cell_vertices.dat \
 	quad4_cell_vertices.dat.info \
 	quad4_mat_cell_cells.dat \
@@ -591,8 +791,8 @@
 	quad4_mat_cell_vertices.dat.info \
 	quad4_mat_vertex_cells.dat \
 	quad4_mat_vertex_cells.dat.info \
-	quad4_mat_vertex_displacements.dat \
-	quad4_mat_vertex_displacements.dat.info \
+	quad4_mat_vertex_displacement.dat \
+	quad4_mat_vertex_displacement.dat.info \
 	quad4_mat_vertex_other.dat \
 	quad4_mat_vertex_other.dat.info \
 	quad4_mat_vertex_pressure.dat \
@@ -601,26 +801,118 @@
 	quad4_mat_vertex_vertices.dat.info \
 	quad4_mat_vertices.dat \
 	quad4_mat_vertices.dat.info \
-	quad4_vertex_cells.dat \
-	quad4_vertex_cells.dat.info \
-	quad4_vertex_displacements.dat \
-	quad4_vertex_displacements.dat.info \
-	quad4_vertex_other.dat \
-	quad4_vertex_other.dat.info \
-	quad4_vertex_pressure.dat \
-	quad4_vertex_pressure.dat.info \
-	quad4_vertex_vertices.dat \
-	quad4_vertex_vertices.dat.info \
-	quad4_vertices.dat \
-	quad4_vertices.dat.info \
+	quad4_mat_cell_stress.dat \
+	quad4_mat_cell_stress.dat.info \
+	quad4_mat_vertex_stress.dat \
+	quad4_mat_vertex_stress.dat.info \
+	quad4_surf_cell_cells.dat \
+	quad4_surf_cell_cells.dat.info \
+	quad4_surf_cell_other.dat \
+	quad4_surf_cell_other.dat.info \
+	quad4_surf_cell_pressure.dat \
+	quad4_surf_cell_pressure.dat.info \
+	quad4_surf_cells.dat \
+	quad4_surf_cells.dat.info \
+	quad4_surf_cell_stress.dat \
+	quad4_surf_cell_stress.dat.info \
+	quad4_surf_cell_traction.dat \
+	quad4_surf_cell_traction.dat.info \
+	quad4_surf_cell_vertices.dat \
+	quad4_surf_cell_vertices.dat.info \
+	quad4_surf_vertex_cells.dat \
+	quad4_surf_vertex_cells.dat.info \
+	quad4_surf_vertex_displacement.dat \
+	quad4_surf_vertex_displacement.dat.info \
+	quad4_surf_vertex_other.dat \
+	quad4_surf_vertex_other.dat.info \
+	quad4_surf_vertex_pressure.dat \
+	quad4_surf_vertex_pressure.dat.info \
+	quad4_surf_vertex_stress.dat \
+	quad4_surf_vertex_stress.dat.info \
+	quad4_surf_vertex_vertices.dat \
+	quad4_surf_vertex_vertices.dat.info \
+	quad4_surf_vertices.dat \
+	quad4_surf_vertices.dat.info \
+	quad4_bc_cell_cells.dat \
+	quad4_bc_cell_cells.dat.info \
+	quad4_bc_cell_other.dat \
+	quad4_bc_cell_other.dat.info \
+	quad4_bc_cell_pressure.dat \
+	quad4_bc_cell_pressure.dat.info \
+	quad4_bc_cells.dat \
+	quad4_bc_cells.dat.info \
+	quad4_bc_cell_stress.dat \
+	quad4_bc_cell_stress.dat.info \
+	quad4_bc_cell_traction.dat \
+	quad4_bc_cell_traction.dat.info \
+	quad4_bc_cell_vertices.dat \
+	quad4_bc_cell_vertices.dat.info \
+	quad4_bc_vertex_cells.dat \
+	quad4_bc_vertex_cells.dat.info \
+	quad4_bc_vertex_displacement.dat \
+	quad4_bc_vertex_displacement.dat.info \
+	quad4_bc_vertex_other.dat \
+	quad4_bc_vertex_other.dat.info \
+	quad4_bc_vertex_pressure.dat \
+	quad4_bc_vertex_pressure.dat.info \
+	quad4_bc_vertex_stress.dat \
+	quad4_bc_vertex_stress.dat.info \
+	quad4_bc_vertex_vertices.dat \
+	quad4_bc_vertex_vertices.dat.info \
+	quad4_bc_vertices.dat \
+	quad4_bc_vertices.dat.info \
+	quad4_fault_cell_cells.dat \
+	quad4_fault_cell_cells.dat.info \
+	quad4_fault_cell_other.dat \
+	quad4_fault_cell_other.dat.info \
+	quad4_fault_cell_pressure.dat \
+	quad4_fault_cell_pressure.dat.info \
+	quad4_fault_cells.dat \
+	quad4_fault_cells.dat.info \
+	quad4_fault_cell_stress.dat \
+	quad4_fault_cell_stress.dat.info \
+	quad4_fault_cell_traction.dat \
+	quad4_fault_cell_traction.dat.info \
+	quad4_fault_cell_vertices.dat \
+	quad4_fault_cell_vertices.dat.info \
+	quad4_fault_vertex_cells.dat \
+	quad4_fault_vertex_cells.dat.info \
+	quad4_fault_vertex_displacement.dat \
+	quad4_fault_vertex_displacement.dat.info \
+	quad4_fault_vertex_other.dat \
+	quad4_fault_vertex_other.dat.info \
+	quad4_fault_vertex_pressure.dat \
+	quad4_fault_vertex_pressure.dat.info \
+	quad4_fault_vertex_stress.dat \
+	quad4_fault_vertex_stress.dat.info \
+	quad4_fault_vertex_vertices.dat \
+	quad4_fault_vertex_vertices.dat.info \
+	quad4_fault_vertices.dat \
+	quad4_fault_vertices.dat.info \
+	tet4_cells.dat \
+	tet4_cells.dat.info \
+	tet4_vertices.dat \
+	tet4_vertices.dat.info \
+	tet4_vertex_cells.dat \
+	tet4_vertex_cells.dat.info \
+	tet4_vertex_displacement.dat \
+	tet4_vertex_displacement.dat.info \
+	tet4_vertex_other.dat \
+	tet4_vertex_other.dat.info \
+	tet4_vertex_pressure.dat \
+	tet4_vertex_pressure.dat.info \
+	tet4_vertex_stress.dat \
+	tet4_vertex_stress.dat.info \
+	tet4_vertex_vertices.dat \
+	tet4_vertex_vertices.dat.info \
 	tet4_cell_cells.dat \
 	tet4_cell_cells.dat.info \
 	tet4_cell_other.dat \
 	tet4_cell_other.dat.info \
 	tet4_cell_pressure.dat \
 	tet4_cell_pressure.dat.info \
-	tet4_cells.dat \
-	tet4_cells.dat.info \
+	tet4_cell_stress.dat \
+	tet4_cell_stress.dat.info \
 	tet4_cell_traction.dat \
 	tet4_cell_traction.dat.info \
 	tet4_cell_vertices.dat \
@@ -639,8 +931,8 @@
 	tet4_mat_cell_vertices.dat.info \
 	tet4_mat_vertex_cells.dat \
 	tet4_mat_vertex_cells.dat.info \
-	tet4_mat_vertex_displacements.dat \
-	tet4_mat_vertex_displacements.dat.info \
+	tet4_mat_vertex_displacement.dat \
+	tet4_mat_vertex_displacement.dat.info \
 	tet4_mat_vertex_other.dat \
 	tet4_mat_vertex_other.dat.info \
 	tet4_mat_vertex_pressure.dat \
@@ -649,68 +941,237 @@
 	tet4_mat_vertex_vertices.dat.info \
 	tet4_mat_vertices.dat \
 	tet4_mat_vertices.dat.info \
-	tet4_vertex_cells.dat \
-	tet4_vertex_cells.dat.info \
-	tet4_vertex_displacements.dat \
-	tet4_vertex_displacements.dat.info \
-	tet4_vertex_other.dat \
-	tet4_vertex_other.dat.info \
-	tet4_vertex_pressure.dat \
-	tet4_vertex_pressure.dat.info \
-	tet4_vertex_vertices.dat \
-	tet4_vertex_vertices.dat.info \
-	tet4_vertices.dat \
-	tet4_vertices.dat.info \
-	tri3_cell_cells.dat \
-	tri3_cell_cells.dat.info \
-	tri3_cell_other.dat \
-	tri3_cell_other.dat.info \
-	tri3_cell_pressure.dat \
-	tri3_cell_pressure.dat.info \
-	tri3_cells.dat \
-	tri3_cells.dat.info \
-	tri3_cell_traction.dat \
-	tri3_cell_traction.dat.info \
-	tri3_cell_vertices.dat \
-	tri3_cell_vertices.dat.info \
-	tri3_mat_cell_cells.dat \
-	tri3_mat_cell_cells.dat.info \
-	tri3_mat_cell_other.dat \
-	tri3_mat_cell_other.dat.info \
-	tri3_mat_cell_pressure.dat \
-	tri3_mat_cell_pressure.dat.info \
-	tri3_mat_cells.dat \
-	tri3_mat_cells.dat.info \
-	tri3_mat_cell_traction.dat \
-	tri3_mat_cell_traction.dat.info \
-	tri3_mat_cell_vertices.dat \
-	tri3_mat_cell_vertices.dat.info \
-	tri3_mat_vertex_cells.dat \
-	tri3_mat_vertex_cells.dat.info \
-	tri3_mat_vertex_displacements.dat \
-	tri3_mat_vertex_displacements.dat.info \
-	tri3_mat_vertex_other.dat \
-	tri3_mat_vertex_other.dat.info \
-	tri3_mat_vertex_pressure.dat \
-	tri3_mat_vertex_pressure.dat.info \
-	tri3_mat_vertex_vertices.dat \
-	tri3_mat_vertex_vertices.dat.info \
-	tri3_mat_vertices.dat \
-	tri3_mat_vertices.dat.info \
-	tri3_vertex_cells.dat \
-	tri3_vertex_cells.dat.info \
-	tri3_vertex_displacements.dat \
-	tri3_vertex_displacements.dat.info \
-	tri3_vertex_other.dat \
-	tri3_vertex_other.dat.info \
-	tri3_vertex_pressure.dat \
-	tri3_vertex_pressure.dat.info \
-	tri3_vertex_vertices.dat \
-	tri3_vertex_vertices.dat.info \
-	tri3_vertices.dat \
-	tri3_vertices.dat.info
+	tet4_mat_cell_stress.dat \
+	tet4_mat_cell_stress.dat.info \
+	tet4_mat_vertex_stress.dat \
+	tet4_mat_vertex_stress.dat.info \
+	tet4_surf_cell_cells.dat \
+	tet4_surf_cell_cells.dat.info \
+	tet4_surf_cell_other.dat \
+	tet4_surf_cell_other.dat.info \
+	tet4_surf_cell_pressure.dat \
+	tet4_surf_cell_pressure.dat.info \
+	tet4_surf_cells.dat \
+	tet4_surf_cells.dat.info \
+	tet4_surf_cell_stress.dat \
+	tet4_surf_cell_stress.dat.info \
+	tet4_surf_cell_traction.dat \
+	tet4_surf_cell_traction.dat.info \
+	tet4_surf_cell_vertices.dat \
+	tet4_surf_cell_vertices.dat.info \
+	tet4_surf_vertex_cells.dat \
+	tet4_surf_vertex_cells.dat.info \
+	tet4_surf_vertex_displacement.dat \
+	tet4_surf_vertex_displacement.dat.info \
+	tet4_surf_vertex_other.dat \
+	tet4_surf_vertex_other.dat.info \
+	tet4_surf_vertex_pressure.dat \
+	tet4_surf_vertex_pressure.dat.info \
+	tet4_surf_vertex_stress.dat \
+	tet4_surf_vertex_stress.dat.info \
+	tet4_surf_vertex_vertices.dat \
+	tet4_surf_vertex_vertices.dat.info \
+	tet4_surf_vertices.dat \
+	tet4_surf_vertices.dat.info \
+	tet4_bc_cell_cells.dat \
+	tet4_bc_cell_cells.dat.info \
+	tet4_bc_cell_other.dat \
+	tet4_bc_cell_other.dat.info \
+	tet4_bc_cell_pressure.dat \
+	tet4_bc_cell_pressure.dat.info \
+	tet4_bc_cells.dat \
+	tet4_bc_cells.dat.info \
+	tet4_bc_cell_stress.dat \
+	tet4_bc_cell_stress.dat.info \
+	tet4_bc_cell_traction.dat \
+	tet4_bc_cell_traction.dat.info \
+	tet4_bc_cell_vertices.dat \
+	tet4_bc_cell_vertices.dat.info \
+	tet4_bc_vertex_cells.dat \
+	tet4_bc_vertex_cells.dat.info \
+	tet4_bc_vertex_displacement.dat \
+	tet4_bc_vertex_displacement.dat.info \
+	tet4_bc_vertex_other.dat \
+	tet4_bc_vertex_other.dat.info \
+	tet4_bc_vertex_pressure.dat \
+	tet4_bc_vertex_pressure.dat.info \
+	tet4_bc_vertex_stress.dat \
+	tet4_bc_vertex_stress.dat.info \
+	tet4_bc_vertex_vertices.dat \
+	tet4_bc_vertex_vertices.dat.info \
+	tet4_bc_vertices.dat \
+	tet4_bc_vertices.dat.info \
+	tet4_fault_cell_cells.dat \
+	tet4_fault_cell_cells.dat.info \
+	tet4_fault_cell_other.dat \
+	tet4_fault_cell_other.dat.info \
+	tet4_fault_cell_pressure.dat \
+	tet4_fault_cell_pressure.dat.info \
+	tet4_fault_cells.dat \
+	tet4_fault_cells.dat.info \
+	tet4_fault_cell_stress.dat \
+	tet4_fault_cell_stress.dat.info \
+	tet4_fault_cell_traction.dat \
+	tet4_fault_cell_traction.dat.info \
+	tet4_fault_cell_vertices.dat \
+	tet4_fault_cell_vertices.dat.info \
+	tet4_fault_vertex_cells.dat \
+	tet4_fault_vertex_cells.dat.info \
+	tet4_fault_vertex_displacement.dat \
+	tet4_fault_vertex_displacement.dat.info \
+	tet4_fault_vertex_other.dat \
+	tet4_fault_vertex_other.dat.info \
+	tet4_fault_vertex_pressure.dat \
+	tet4_fault_vertex_pressure.dat.info \
+	tet4_fault_vertex_stress.dat \
+	tet4_fault_vertex_stress.dat.info \
+	tet4_fault_vertex_vertices.dat \
+	tet4_fault_vertex_vertices.dat.info \
+	tet4_fault_vertices.dat \
+	tet4_fault_vertices.dat.info \
+	hex8_cells.dat \
+	hex8_cells.dat.info \
+	hex8_vertices.dat \
+	hex8_vertices.dat.info \
+	hex8_vertex_cells.dat \
+	hex8_vertex_cells.dat.info \
+	hex8_vertex_displacement.dat \
+	hex8_vertex_displacement.dat.info \
+	hex8_vertex_other.dat \
+	hex8_vertex_other.dat.info \
+	hex8_vertex_pressure.dat \
+	hex8_vertex_pressure.dat.info \
+	hex8_vertex_vertices.dat \
+	hex8_vertex_vertices.dat.info \
+	hex8_vertex_stress.dat \
+	hex8_vertex_stress.dat.info \
+	hex8_cell_cells.dat \
+	hex8_cell_cells.dat.info \
+	hex8_cell_other.dat \
+	hex8_cell_other.dat.info \
+	hex8_cell_pressure.dat \
+	hex8_cell_pressure.dat.info \
+	hex8_cell_traction.dat \
+	hex8_cell_traction.dat.info \
+	hex8_cell_vertices.dat \
+	hex8_cell_vertices.dat.info \
+	hex8_cell_stress.dat \
+	hex8_cell_stress.dat.info \
+	hex8_mat_cell_cells.dat \
+	hex8_mat_cell_cells.dat.info \
+	hex8_mat_cell_other.dat \
+	hex8_mat_cell_other.dat.info \
+	hex8_mat_cell_pressure.dat \
+	hex8_mat_cell_pressure.dat.info \
+	hex8_mat_cells.dat \
+	hex8_mat_cells.dat.info \
+	hex8_mat_cell_traction.dat \
+	hex8_mat_cell_traction.dat.info \
+	hex8_mat_cell_stress.dat \
+	hex8_mat_cell_stress.dat.info \
+	hex8_mat_cell_vertices.dat \
+	hex8_mat_cell_vertices.dat.info \
+	hex8_mat_vertex_cells.dat \
+	hex8_mat_vertex_cells.dat.info \
+	hex8_mat_vertex_displacement.dat \
+	hex8_mat_vertex_displacement.dat.info \
+	hex8_mat_vertex_other.dat \
+	hex8_mat_vertex_other.dat.info \
+	hex8_mat_vertex_pressure.dat \
+	hex8_mat_vertex_pressure.dat.info \
+	hex8_mat_vertex_vertices.dat \
+	hex8_mat_vertex_vertices.dat.info \
+	hex8_mat_vertices.dat \
+	hex8_mat_vertices.dat.info \
+	hex8_mat_vertex_stress.dat \
+	hex8_mat_vertex_stress.dat.info \
+	hex8_surf_cell_cells.dat \
+	hex8_surf_cell_cells.dat.info \
+	hex8_surf_cell_other.dat \
+	hex8_surf_cell_other.dat.info \
+	hex8_surf_cell_pressure.dat \
+	hex8_surf_cell_pressure.dat.info \
+	hex8_surf_cells.dat \
+	hex8_surf_cells.dat.info \
+	hex8_surf_cell_stress.dat \
+	hex8_surf_cell_stress.dat.info \
+	hex8_surf_cell_traction.dat \
+	hex8_surf_cell_traction.dat.info \
+	hex8_surf_cell_vertices.dat \
+	hex8_surf_cell_vertices.dat.info \
+	hex8_surf_vertex_cells.dat \
+	hex8_surf_vertex_cells.dat.info \
+	hex8_surf_vertex_displacement.dat \
+	hex8_surf_vertex_displacement.dat.info \
+	hex8_surf_vertex_other.dat \
+	hex8_surf_vertex_other.dat.info \
+	hex8_surf_vertex_pressure.dat \
+	hex8_surf_vertex_pressure.dat.info \
+	hex8_surf_vertex_stress.dat \
+	hex8_surf_vertex_stress.dat.info \
+	hex8_surf_vertex_vertices.dat \
+	hex8_surf_vertex_vertices.dat.info \
+	hex8_surf_vertices.dat \
+	hex8_surf_vertices.dat.info \
+	hex8_bc_cell_cells.dat \
+	hex8_bc_cell_cells.dat.info \
+	hex8_bc_cell_other.dat \
+	hex8_bc_cell_other.dat.info \
+	hex8_bc_cell_pressure.dat \
+	hex8_bc_cell_pressure.dat.info \
+	hex8_bc_cells.dat \
+	hex8_bc_cells.dat.info \
+	hex8_bc_cell_stress.dat \
+	hex8_bc_cell_stress.dat.info \
+	hex8_bc_cell_traction.dat \
+	hex8_bc_cell_traction.dat.info \
+	hex8_bc_cell_vertices.dat \
+	hex8_bc_cell_vertices.dat.info \
+	hex8_bc_vertex_cells.dat \
+	hex8_bc_vertex_cells.dat.info \
+	hex8_bc_vertex_displacement.dat \
+	hex8_bc_vertex_displacement.dat.info \
+	hex8_bc_vertex_other.dat \
+	hex8_bc_vertex_other.dat.info \
+	hex8_bc_vertex_pressure.dat \
+	hex8_bc_vertex_pressure.dat.info \
+	hex8_bc_vertex_stress.dat \
+	hex8_bc_vertex_stress.dat.info \
+	hex8_bc_vertex_vertices.dat \
+	hex8_bc_vertex_vertices.dat.info \
+	hex8_bc_vertices.dat \
+	hex8_bc_vertices.dat.info \
+	hex8_fault_cell_cells.dat \
+	hex8_fault_cell_cells.dat.info \
+	hex8_fault_cell_other.dat \
+	hex8_fault_cell_other.dat.info \
+	hex8_fault_cell_pressure.dat \
+	hex8_fault_cell_pressure.dat.info \
+	hex8_fault_cells.dat \
+	hex8_fault_cells.dat.info \
+	hex8_fault_cell_stress.dat \
+	hex8_fault_cell_stress.dat.info \
+	hex8_fault_cell_traction.dat \
+	hex8_fault_cell_traction.dat.info \
+	hex8_fault_cell_vertices.dat \
+	hex8_fault_cell_vertices.dat.info \
+	hex8_fault_vertex_cells.dat \
+	hex8_fault_vertex_cells.dat.info \
+	hex8_fault_vertex_displacement.dat \
+	hex8_fault_vertex_displacement.dat.info \
+	hex8_fault_vertex_other.dat \
+	hex8_fault_vertex_other.dat.info \
+	hex8_fault_vertex_pressure.dat \
+	hex8_fault_vertex_pressure.dat.info \
+	hex8_fault_vertex_stress.dat \
+	hex8_fault_vertex_stress.dat.info \
+	hex8_fault_vertex_vertices.dat \
+	hex8_fault_vertex_vertices.dat.info \
+	hex8_fault_vertices.dat \
+	hex8_fault_vertices.dat.info
 
 
+
 CLEANFILES = $(noinst_tmp)
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -99,6 +99,22 @@
     return
 
 
+  def test_verifyConfiguration(self):
+    """
+    Test verifyConfiguration().
+
+    WARNING: This is not a rigorous test of verifyConfiguration() because we
+    don't verify the results.
+    """
+
+    (mesh, bc, field) = self._initialize()
+    bc.verifyConfiguration()
+
+    # We should really add something here to check to make sure things
+    # actually initialized correctly    
+    return
+
+
   def test_setConstraintSizes(self):
     """
     Test setConstraintSizes().

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -31,6 +31,7 @@
 	TestStaticFriction.py \
 	TestSlipWeakening.py \
 	TestSlipWeakeningTime.py \
+	TestSlipWeakeningStress.py \
 	TestRateStateAgeing.py \
 	TestTimeWeakening.py
 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningStress.py (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/friction/TestSlipWeakeningStress.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningStress.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/TestSlipWeakeningStress.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,57 @@
+#!/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 unittests/pytests/friction/TestSlipWeakeningStress.py
+
+## @brief Unit testing of SlipWeakeningStress object.
+
+import unittest
+
+from pylith.friction.SlipWeakeningStress import SlipWeakeningStress
+
+# ----------------------------------------------------------------------
+class TestSlipWeakeningStress(unittest.TestCase):
+  """
+  Unit testing of SlipWeakeningStress object.
+  """
+
+  def setUp(self):
+    """
+    Setup test subject.
+    """
+    self.friction = SlipWeakeningStress()
+    return
+  
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.friction.SlipWeakeningStress import friction_model
+    m = friction_model()
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/friction/testfriction.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -71,6 +71,9 @@
     from TestSlipWeakeningTime import TestSlipWeakeningTime
     suite.addTest(unittest.makeSuite(TestSlipWeakeningTime))
 
+    from TestSlipWeakeningStress import TestSlipWeakeningStress
+    suite.addTest(unittest.makeSuite(TestSlipWeakeningStress))
+
     from TestRateStateAgeing import TestRateStateAgeing
     suite.addTest(unittest.makeSuite(TestRateStateAgeing))
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestOutputSolnPoints.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestOutputSolnPoints.py	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestOutputSolnPoints.py	2012-12-19 21:14:31 UTC (rev 21183)
@@ -102,6 +102,22 @@
     return
   
   
+  def test_initialize2(self):
+    """
+    Test initialize().
+    """
+    output = OutputSolnPoints()
+    output.inventory.reader.inventory.filename = "data/point.txt"
+    output.inventory.reader._configure()
+    output.inventory.writer.inventory.filename = "test.vtk"
+    output.inventory.writer._configure()
+    output._configure()
+
+    output.preinitialize()
+    output.initialize(self.mesh, self.normalizer)
+    return
+
+
   def test_initialize(self):
     """
     Test initialize().

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/Makefile.am	2012-12-19 20:20:19 UTC (rev 21182)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/Makefile.am	2012-12-19 21:14:31 UTC (rev 21183)
@@ -23,7 +23,8 @@
 	cube2.txt \
 	twohex8.exo \
 	twohex8.txt \
-	points.txt
+	points.txt \
+	point.txt
 
 noinst_TMP = \
 	cube2_test.txt \

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/point.txt (from rev 21182, short/3D/PyLith/branches/v1.7-trunk/unittests/pytests/meshio/data/point.txt)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/point.txt	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/data/point.txt	2012-12-19 21:14:31 UTC (rev 21183)
@@ -0,0 +1,2 @@
+# Here is a point within the volume of the hex8 mesh.
+ 0.5  0.2  0.0



More information about the CIG-COMMITS mailing list