[cig-commits] r20722 - in short/3D/PyLith/branches/v1.7-stable: doc/userguide/materials unittests/libtests/meshio unittests/libtests/meshio/data

brad at geodynamics.org brad at geodynamics.org
Mon Sep 17 14:52:12 PDT 2012


Author: brad
Date: 2012-09-17 14:52:11 -0700 (Mon, 17 Sep 2012)
New Revision: 20722

Added:
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell.xmf
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex.xmf
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell.xmf
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex.xmf
Modified:
   short/3D/PyLith/branches/v1.7-stable/doc/userguide/materials/materials.lyx
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/Makefile.am
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_points_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_points_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell.xmf
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_points_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex.xmf
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell.xmf
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_points_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_cell.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex.h5
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex.xmf
   short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex_t10.vtk
Log:
Updated meshio unit tests so that VTK and HDF5 output test all vector field types. Fixed typos in manual associated with ordering of tensor components in Xdmf files.

Modified: short/3D/PyLith/branches/v1.7-stable/doc/userguide/materials/materials.lyx
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/doc/userguide/materials/materials.lyx	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/doc/userguide/materials/materials.lyx	2012-09-17 21:52:11 UTC (rev 20722)
@@ -1,6161 +1,6170 @@
-#LyX 2.0 created this file. For more info see http://www.lyx.org/
-\lyxformat 413
-\begin_document
-\begin_header
-\textclass book
-\begin_preamble
-\newcommand\Prefix[3]{\vphantom{#3}#1#2#3}
-\end_preamble
-\use_default_options false
-\maintain_unincluded_children false
-\language english
-\language_package default
-\inputencoding latin1
-\fontencoding global
-\font_roman default
-\font_sans default
-\font_typewriter default
-\font_default_family default
-\use_non_tex_fonts false
-\font_sc false
-\font_osf false
-\font_sf_scale 100
-\font_tt_scale 100
-
-\graphics default
-\default_output_format default
-\output_sync 0
-\bibtex_command default
-\index_command default
-\paperfontsize default
-\spacing single
-\use_hyperref false
-\papersize default
-\use_geometry true
-\use_amsmath 1
-\use_esint 0
-\use_mhchem 1
-\use_mathdots 1
-\cite_engine basic
-\use_bibtopic false
-\use_indices false
-\paperorientation portrait
-\suppress_date false
-\use_refstyle 0
-\index Index
-\shortcut idx
-\color #008000
-\end_index
-\leftmargin 1in
-\topmargin 1in
-\rightmargin 1in
-\bottommargin 2in
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\paragraph_indentation default
-\quotes_language english
-\papercolumns 1
-\papersides 2
-\paperpagestyle default
-\tracking_changes false
-\output_changes false
-\html_math_output 0
-\html_css_as_file 0
-\html_be_strict false
-\end_header
-
-\begin_body
-
-\begin_layout Chapter
-\begin_inset CommandInset label
-LatexCommand label
-name "cha:material:models"
-
-\end_inset
-
-Material Models
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Plain Layout
-
-
-\backslash
-raggedbottom
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Specifying Material Properties
-\end_layout
-
-\begin_layout Standard
-Associating material properties with a given cell involves several steps.
- 
-\end_layout
-
-\begin_layout Enumerate
-In the mesh generation process, assign a material identifier to each cell.
-\end_layout
-
-\begin_layout Enumerate
-Define material property groups corresponding to each material identifier.
-\end_layout
-
-\begin_layout Enumerate
-Set the parameters for each material group using 
-\family typewriter
-.cfg
-\family default
- or 
-\family typewriter
-.pml
-\family default
- files and/or command-line arguments.
-\end_layout
-
-\begin_layout Enumerate
-Specify the spatial variation in material property parameters using a spatial
- database file.
-\end_layout
-
-\begin_layout Subsection
-Setting the Material Identifier
-\end_layout
-
-\begin_layout Standard
-Each cell in the finite-element mesh must have a material identifier.
- This integer value is associated with a bulk material model.
- The parameters of the material model need not be uniform for cells with
- the same material identifier.
- The bulk constitutive model and numerical integration (quadrature) scheme
- will, however, be the same for all cells with the same material identifier
- value.
- The material identifier is set during the mesh generation process.
- The procedure for assigning this integer value to a cell depends on the
- mesh generator.
- For example, in the PyLith mesh ASCII format, the identifiers are listed
- in the cells group using the material-id data; in CUBIT materials are defined
- using blocks; in LaGriT materials are defined by the attribute 
-\family typewriter
-imt1
-\family default
- and the mregion command.
-\end_layout
-
-\begin_layout Subsection
-Material Property Groups
-\end_layout
-
-\begin_layout Standard
-The material property group associates a material model (label for the material,
- a bulk constitutive model, and parameters for the constitutive model) with
- a material identifier.
- In previous versions of PyLith it was necessary to specify containers that
- defined the number of groups and associated information for each group.
- This was necessary because previous versions of Pyre did not support dynamic
- arrays of components, and it was necessary to predefine these arrays.
- More recent versions of Pythia do support this, however, and it is now
- possible to define material property groups using a 
-\family typewriter
-.cfg
-\family default
- file, a 
-\family typewriter
-.pml
-\family default
- file, or on the command-line.
- User-defined containers are no longer necessary, and the predefined containers
- are no longer available (or necessary).
- If a set of material groups is not specified, a single material model is
- used for the entire problem.
- See Sections 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:Tutorial-3d-hex8"
-
-\end_inset
-
- and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:Tutorial-3d-tet4"
-
-\end_inset
-
- for examples that demonstrate how to specify more than one material model.
-\end_layout
-
-\begin_layout Subsection
-\begin_inset CommandInset label
-LatexCommand label
-name "sec:material:parameters"
-
-\end_inset
-
-Material Parameters
-\end_layout
-
-\begin_layout Standard
-For each material group, there is a single component defining the material
- model to be used.
- The default material model is 
-\family typewriter
-elasticisotropic3d
-\family default
-.
- For each material model, the available components are:
-\end_layout
-
-\begin_layout Description
-db_properties Spatial database specifying the spatial variation in the parameter
-s of the bulk constitutive model (default is a SimpleDB).
-\end_layout
-
-\begin_layout Description
-db_initial_state Spatial database specifying the spatial variation in the
- initial variables (default is none).
-\end_layout
-
-\begin_layout Description
-output The output manager used for outputting material information.
-\end_layout
-
-\begin_layout Description
-quadrature Numerical integration scheme used in integrating fields over
- each cell.
-\end_layout
-
-\begin_layout Standard
-The properties for each material group are:
-\end_layout
-
-\begin_layout Description
-id This is the material identifier that matches the integer value assigned
- to each cell in the mesh generation process.
-\end_layout
-
-\begin_layout Description
-label Name or label for the material.
- This is used in error and diagnostic reports.
-\end_layout
-
-\begin_layout Standard
-An example of setting these parameters in a 
-\family typewriter
-.cfg
-\family default
- file for a problem with two material groups is:
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent]
-\end_layout
-
-\begin_layout LyX-Code
-materials = [elastic,viscoelastic]
-\end_layout
-
-\begin_layout LyX-Code
- 
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent.materials.elastic]
-\end_layout
-
-\begin_layout LyX-Code
-label = Elastic material
-\end_layout
-
-\begin_layout LyX-Code
-id = 1
-\end_layout
-
-\begin_layout LyX-Code
-db_properties.iohandler.filename = mat_elastic.spatialdb
-\end_layout
-
-\begin_layout LyX-Code
-quadrature.cell = pylith.feassemble.FIATLagrange
-\end_layout
-
-\begin_layout LyX-Code
-quadrature.cell.dimension = 3
-\end_layout
-
-\begin_layout LyX-Code
- 
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent.materials.viscoelastic]
-\end_layout
-
-\begin_layout LyX-Code
-label = Viscoelastic material
-\end_layout
-
-\begin_layout LyX-Code
-id = 2
-\end_layout
-
-\begin_layout LyX-Code
-db_properties.iohandler.filename = mat_viscoelastic.spatialdb
-\end_layout
-
-\begin_layout LyX-Code
-quadrature.cell = pylith.feassemble.FIATLagrange
-\end_layout
-
-\begin_layout LyX-Code
-quadrature.cell.dimension = 3
-\end_layout
-
-\begin_layout Standard
-These settings correspond to the the problem in Section 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:Tutorial-3d-hex8"
-
-\end_inset
-
-.
- The parameters for the bulk constitutive models are specified using the
- spatial databases 
-\family typewriter
-mat_elastic.spatialdb
-\family default
- and 
-\family typewriter
-mat_viscoelastic.spatialdb
-\family default
-.
- Refer to the discussion of each material model to find the parameters that
- must be specified in the spatial database.
- Appendix 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:Spatialdata:SimpleIOAscii"
-
-\end_inset
-
- describes the format of the SimpleDB spatial database files.
- In a more realistic problem, a different spatial database, and possibly
- a different material model, would be used for each material group.
-\end_layout
-
-\begin_layout Standard
-By default the output manager for a material does not output any information.
- This behavior may be changed by specifying output files for each material
- group:
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent.materials.elastic.output]
-\end_layout
-
-\begin_layout LyX-Code
-cell_filter = pylith.meshio.CellFilterAvgMesh
-\end_layout
-
-\begin_layout LyX-Code
-writer.filename = dislocation-elastic.vtk
-\end_layout
-
-\begin_layout LyX-Code
- 
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent.materials.viscoelastic.output]
-\end_layout
-
-\begin_layout LyX-Code
-cell_filter = pylith.meshio.CellFilterAvgMesh
-\end_layout
-
-\begin_layout LyX-Code
-writer.filename = dislocation-viscoelastic.vtk
-\end_layout
-
-\begin_layout Standard
-These settings again correspond to the problem in Section 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:Tutorial-3d-hex8"
-
-\end_inset
-
-.
- The specification of a state variable base filename (
-\family typewriter
-writer.filename
-\family default
- settings) will cause two files to be created for each material group: an
- info file, which describes the material properties used in the model, and
- a state variables file, which contains the state variable information.
- Note that the material properties described by the info file are the properties
- used internally by PyLith.
- They do not necessarily correspond to properties specified by the user.
- If the problem has more than one time step, a state variable output file
- will be created for each requested time step.
- We have requested that the values be averaged over each cell.
- Otherwise, output would be produced for each quadrature point, which can
- cause problems with some visualization packages.
- For this example problem, the material is three-dimensional isotropic elastic,
- and is thus described by only three material properties (
-\begin_inset Formula $\lambda$
-\end_inset
-
-, 
-\begin_inset Formula $\mu$
-\end_inset
-
-, 
-\begin_inset Formula $\rho$
-\end_inset
-
-), as described below.
- These properties are output by default.
- Other material models require additional parameters, and if users want
- these to be output, they must be specified.
- Similarly, other material models require state variables in addition to
- the default stress and strain variables that are used by all material models.
- Additional output may be requested for a material model, as in this example
- (see Section 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:Tutorial-Two-hexahedra"
-
-\end_inset
-
-):
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent.materials.material.output]
-\end_layout
-
-\begin_layout LyX-Code
-cell_data_fields = [total_strain,viscous_strain,stress]
-\end_layout
-
-\begin_layout LyX-Code
-cell_info_fields = [mu,lambda,density,maxwell_time]
-\end_layout
-
-\begin_layout Standard
-The properties and state variables available for output in each material
- model are listed in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:material-model-output"
-
-\end_inset
-
-.
- The order of the state variables in the output arrays is given in Table
- 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:material-model-statevars"
-
-\end_inset
-
-.
- For the generalized Maxwell model, values of 
-\family typewriter
-shear_ratio
-\family default
- and 
-\family typewriter
-maxwell_time
-\family default
- are given for each Maxwell element in the model (there are presently three,
- as described below).
- Similarly, there are three sets of 
-\family typewriter
-viscous_strain
-\family default
- values for the generalized Maxwell model.
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:material-model-output"
-
-\end_inset
-
-Properties and state variables available for output for existing material
- models.
- Physical properties are available for output as 
-\family typewriter
-cell_info_fields
-\family default
- and state variables are available for output as 
-\family typewriter
-cell_data_fields
-\family default
-.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="4">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="1.5in">
-<column alignment="center" valignment="top" width="1.8in">
-<column alignment="center" valignment="top" width="1.5in">
-<column alignment="center" valignment="top" width="1in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Model
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Physical Properties
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-State Variables
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Requires nonlinear solver?
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Elastic
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-mu, lambda, density
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-total_strain, stress
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-No
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Maxwell Viscoelastic
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-mu, lambda, density, maxwell_time
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-total_strain,
-\end_layout
-
-\begin_layout Plain Layout
-
-\family typewriter
-stress, viscous_strain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-No
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Generalized Maxwell Viscoelastic
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-mu, lambda, density,
-\end_layout
-
-\begin_layout Plain Layout
-
-\family typewriter
-shear_ratio,
-\end_layout
-
-\begin_layout Plain Layout
-
-\family typewriter
-maxwell_time
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-total_strain, stress, viscous_strain_1,
-\begin_inset Newline newline
-\end_inset
-
-viscous_strain_2,
-\begin_inset Newline newline
-\end_inset
-
-viscous_strain_3
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-No
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Power-law Viscoelastic
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-mu, lambda, density,
-\end_layout
-
-\begin_layout Plain Layout
-
-\family typewriter
-reference_strain_rate, reference_stress,
-\end_layout
-
-\begin_layout Plain Layout
-
-\family typewriter
-power_law_exponent
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-total_strain, stress, viscous_strain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Yes
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Drucker-Prager Elastoplastic
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-mu, lambda, density, alpha_yield
-\family default
-,
-\family typewriter
- beta, alpha_flow 
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-total_strain, stress, plastic_strain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Yes
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:material-model-statevars"
-
-\end_inset
-
-Order of components in tensor state-variables for material models.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="5" columns="4">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="1.25in">
-<column alignment="center" valignment="top" width="0.5in">
-<column alignment="center" valignment="top" width="1.25in">
-<column alignment="center" valignment="top" width="2.25in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-State Variable
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-1D
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-2D
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-3D
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-total_strain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xx}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{xy}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{zz}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{xy}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{yz}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{xz}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-stress
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\sigma_{xx}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\sigma_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{xy}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\sigma_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{zz}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{xy}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{yz}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{xz}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-viscous_strain, plastic_strain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xx}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{zz}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{xy}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{zz}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{xy}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{yz}$
-\end_inset
-
-, 
-\begin_inset Formula $\epsilon_{xz}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-stress4
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\sigma_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{zz}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{xy}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:material:output:components"
-
-\end_inset
-
-Order of components in tensor values in Xdmf files for 3D material models.
- All nine tensor components are available even though the tensor is symmetric
- with six independent components.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="7" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="1.25in">
-<column alignment="center" valignment="top" width="2.25in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Index
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Component
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xx}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{xx}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-1, 3
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xy}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{xy}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-2, 6
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{xz}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{xz}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-4
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{yy}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{yy}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-5, 7
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{yz}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{yz}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-8
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\epsilon_{zz}$
-\end_inset
-
-, 
-\begin_inset Formula $\sigma_{zz}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Elastic Material Models
-\end_layout
-
-\begin_layout Standard
-The generalized form of Hooke's law relating stress and strain for linear
- elastic materials is
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula 
-\begin{gather}
-\sigma_{ij}=C_{ijkl}\left(\epsilon_{kl}-\epsilon_{kl}^{I}\right)+\sigma_{ij}^{I}\,,\label{eq:1}
-\end{gather}
-
-\end_inset
-
-where we have included both initial strains and initial stresses, denoted
- with the superscript 
-\shape slanted
-I
-\shape default
-.
- Due to symmetry considerations, however, the 81 components of the elasticity
- matrix are reduced to 21 independent components for the most general case
- of anisotropic elasticity.
- Representing the stress and strain in terms of vectors, the constitutive
- relation may be written
-\begin_inset Formula 
-\begin{gather}
-\overrightarrow{\sigma}=\underline{C}\left(\vec{\epsilon}-\vec{\epsilon}^{I}\right)+\vec{\sigma}^{I},\label{eq:2}
-\end{gather}
-
-\end_inset
-
-where
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula 
-\begin{gather}
-\underline{C}=\left[\begin{array}{cccccc}
-C_{1111} & C_{1122} & C_{1133} & C_{1112} & C_{1123} & C_{1113}\\
-C_{1122} & C_{2222} & C_{2233} & C_{2212} & C_{2223} & C_{2213}\\
-C_{1133} & C_{2233} & C_{3333} & C_{3312} & C_{3323} & C_{3313}\\
-C_{1112} & C_{2212} & C_{3312} & C_{1212} & C_{1223} & C_{1213}\\
-C_{1123} & C_{2223} & C_{3323} & C_{1223} & C_{2323} & C_{2313}\\
-C_{1113} & C_{2213} & C_{3313} & C_{1213} & C_{2313} & C_{1313}
-\end{array}\right]\:.\label{eq:3}
-\end{gather}
-
-\end_inset
-
-For the case of isotropic elasticity, the number of independent components
- reduces to two, and the model can be characterized by two parameters, Lame's
- constants 
-\begin_inset Formula $\mu$
-\end_inset
-
- and 
-\begin_inset Formula $\lambda$
-\end_inset
-
-.
- Lame's constants are related to the density (
-\begin_inset Formula $\rho$
-\end_inset
-
-), shear wave speed (
-\begin_inset Formula $v_{s}$
-\end_inset
-
-), and compressional wave speed (
-\begin_inset Formula $v_{p}$
-\end_inset
-
-) via
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula 
-\begin{equation}
-\begin{aligned}\mu= & \rho v_{s}^{2}\\
-\lambda= & \rho v_{p}^{2}-2\mu
-\end{aligned}
-\label{eq:4}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Values in spatial database used as parameters in the elastic material constituti
-ve models.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="4" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="middle" width="0.85in">
-<column alignment="center" valignment="middle" width="2.47in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Parameter
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\align center
-
-\series bold
-Name in Spatial Database
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{p}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vp
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{s}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vs
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\rho$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-density
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-1D Elastic Material Models
-\end_layout
-
-\begin_layout Standard
-In 1D we can write Hooke's law as 
-\begin_inset Formula $\sigma_{11}=C_{1111}\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{11}^{I}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Subsubsection
-Elastic 
-\begin_inset Quotes eld
-\end_inset
-
-Linear
-\begin_inset Quotes erd
-\end_inset
-
- Strain
-\end_layout
-
-\begin_layout Standard
-For purely 1D axial deformation 
-\begin_inset Formula $C_{1111}=\lambda+2\mu$
-\end_inset
-
-, so we have
-\begin_inset Formula 
-\begin{equation}
-\sigma_{11}=(\lambda+2\mu)\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{11}^{I},\label{eq:5}
-\end{equation}
-
-\end_inset
-
-with
-\begin_inset Formula 
-\begin{gather}
-\sigma_{22}=\sigma_{33}=\lambda\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{22}^{I},\nonumber \\
-\sigma_{12}=\sigma_{23}=\sigma_{13}=0.\label{eq:6}
-\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-Elastic 
-\begin_inset Quotes eld
-\end_inset
-
-Linear
-\begin_inset Quotes erd
-\end_inset
-
- Stress
-\end_layout
-
-\begin_layout Standard
-For deformation where the tractions are confined to the axial direction,
- 
-\begin_inset Formula $C_{1111}=\frac{\mu(3\lambda+2\mu)}{\lambda+\mu}$
-\end_inset
-
-, so we have
-\begin_inset Formula 
-\begin{equation}
-\sigma_{11}=\frac{\mu(3\lambda+2\mu)}{\lambda+\mu}\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{11}^{I},\label{eq:7}
-\end{equation}
-
-\end_inset
-
-with
-\begin_inset Formula 
-\begin{gather}
-\epsilon_{22}=\epsilon_{33}=-\frac{\lambda}{2(\lambda+\mu)}\epsilon_{11}+\epsilon_{22}^{I},\label{eq:8}\\
-\sigma_{22}=\sigma_{33}=\sigma_{12}=\sigma_{23}=\sigma_{13}=0.\nonumber 
-\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-2D Elastic Material Models
-\end_layout
-
-\begin_layout Standard
-In 2D we can write Hooke's law as
-\begin_inset Formula 
-\begin{gather}
-\left[\begin{array}{c}
-\sigma_{11}\\
-\sigma_{22}\\
-\sigma_{12}
-\end{array}\right]=\left[\begin{array}{ccc}
-C_{1111} & C_{1122} & C_{1112}\\
-C_{1122} & C_{2222} & C_{2212}\\
-C_{1112} & C_{2212} & C_{1212}
-\end{array}\right]\left[\begin{array}{c}
-\epsilon_{11}-\epsilon_{11}^{I}\\
-\epsilon_{22}-\epsilon_{22}^{I}\\
-\epsilon_{12}-\epsilon_{12}^{I}
-\end{array}\right]+\left[\begin{array}{c}
-\sigma_{11}^{I}\\
-\sigma_{22}^{I}\\
-\sigma_{12}^{I}
-\end{array}\right]\:.\label{eq:9}
-\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-Elastic Plane Strain
-\end_layout
-
-\begin_layout Standard
-If the gradient in deformation with respect to the 
-\begin_inset Formula $x_{3}$
-\end_inset
-
- axis is zero, then 
-\begin_inset Formula $\epsilon_{33}=\epsilon_{13}=\epsilon_{23}=0$
-\end_inset
-
- and plane strain conditions apply, so we have 
-\begin_inset Formula 
-\begin{gather}
-\left[\begin{array}{c}
-\sigma_{11}\\
-\sigma_{22}\\
-\sigma_{12}
-\end{array}\right]=\left[\begin{array}{ccc}
-\lambda+2\mu & \lambda & 0\\
-\lambda & \lambda+2\mu & 0\\
-0 & 0 & 2\mu
-\end{array}\right]\left[\begin{array}{c}
-\epsilon_{11}-\epsilon_{11}^{I}\\
-\epsilon_{22}-\epsilon_{22}^{I}\\
-\epsilon_{12}-\epsilon_{12}^{I}
-\end{array}\right]+\left[\begin{array}{c}
-\sigma_{11}^{I}\\
-\sigma_{22}^{I}\\
-\sigma_{12}^{I}
-\end{array}\right]\:.\label{eq:10}
-\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-Elastic Plane Stress
-\end_layout
-
-\begin_layout Standard
-If the 
-\begin_inset Formula $x_{1}x_{2}$
-\end_inset
-
- plane is traction free, then 
-\begin_inset Formula $\sigma_{33}=\sigma_{13}=\sigma_{23}=0$
-\end_inset
-
- and plane stress conditions apply, so we have
-\begin_inset Formula 
-\begin{gather}
-\left[\begin{array}{c}
-\sigma_{11}\\
-\sigma_{22}\\
-\sigma_{12}
-\end{array}\right]=\left[\begin{array}{ccc}
-\frac{4\mu(\lambda+\mu)}{\lambda+2\mu} & \frac{2\mu\lambda}{\lambda+2\mu} & 0\\
-\frac{2\mu\lambda}{\lambda+2} & \frac{4\mu(\lambda+\mu)}{\lambda+2\mu} & 0\\
-0 & 0 & 2\mu
-\end{array}\right]\left[\begin{array}{c}
-\epsilon_{11}-\epsilon_{11}^{I}\\
-\epsilon_{22}-\epsilon_{22}^{I}\\
-\epsilon_{12}-\epsilon_{12}^{I}
-\end{array}\right]+\left[\begin{array}{c}
-\sigma_{11}^{I}\\
-\sigma_{22}^{I}\\
-\sigma_{12}^{I}
-\end{array}\right]\:,\label{eq:11}
-\end{gather}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{equation}
-\begin{gathered}\epsilon_{33}=-\frac{\lambda}{\lambda+2\mu}(\epsilon_{11}+\epsilon_{22})+\epsilon_{33}^{I}\\
-\epsilon_{13}=\epsilon_{23}=0\,.
-\end{gathered}
-\label{eq:12}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-3D Elastic Material Models
-\end_layout
-
-\begin_layout Subsubsection
-Isotropic
-\end_layout
-
-\begin_layout Standard
-For this case the stress-strain matrix, 
-\begin_inset Formula $\underline{C}$
-\end_inset
-
-, becomes
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula 
-\begin{gather}
-\underline{C}=\left[\begin{array}{cccccc}
-\lambda+2\mu & \lambda & \lambda & 0 & 0 & 0\\
-\lambda & \lambda+2\mu & \lambda & 0 & 0 & 0\\
-\lambda & \lambda & \lambda+2\mu & 0 & 0 & 0\\
-0 & 0 & 0 & 2\mu & 0 & 0\\
-0 & 0 & 0 & 0 & 2\mu & 0\\
-0 & 0 & 0 & 0 & 0 & 2\mu
-\end{array}\right]\:.\label{eq:13}
-\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-\begin_inset CommandInset label
-LatexCommand label
-name "sec:Viscoelastic-Materials"
-
-\end_inset
-
-Viscoelastic Materials
-\end_layout
-
-\begin_layout Standard
-At present, there are six viscoelastic material models available in PyLith
- (Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:Viscoelastic-models-available"
-
-\end_inset
-
- and Figure 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "fig:Material-models"
-
-\end_inset
-
-).
- Future code versions may include alternative formulations for the various
- material models (Appendix 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "cha:Alternative-Formulations"
-
-\end_inset
-
-), so that users may use the most efficient formulation for a particular
- problem.
- Note that both 2D and 3D viscoelastic models are described, but we present
- below only the 3D formulations.
- The 2D formulations are easily obtained from the plane strain definition.
- The one aspect of the 2D formulations that is different is the specification
- of initial stresses.
- Since 2D models only have three tensor components, it is not possible to
- specify the normal stress in the out-of-plane direction (
-\begin_inset Formula $\sigma_{33}$
-\end_inset
-
-), which is generally nonzero, using the same method as the other tensor
- components.
- To allow for the specification of this initial stress component, an additional
- state variable corresponding to 
-\begin_inset Formula $\sigma_{33}^{I}$
-\end_inset
-
- is provided (
-\family typewriter
-stress_zz_initial
-\family default
-).
- Note that this is not an issue for the 2D elastic models, since this initial
- stress component is not needed.
- For the PowerLawPlaneStrain model, all four of the stress components are
- needed, so a 4-component stress state variable (
-\family typewriter
-stress4
-\family default
-) is provided in addition to the normal 3-component 
-\family typewriter
-stress
-\family default
- state variable (see Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:material-model-output"
-
-\end_inset
-
-).
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:Viscoelastic-models-available"
-
-\end_inset
-
-Available viscoelastic materials for PyLith.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="7" columns="2">
-<features tabularvalignment="middle">
-<column alignment="left" valignment="top" width="2.85in">
-<column alignment="center" valignment="top" width="2.47in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Model Name
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-MaxwellPlaneStrain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Plane strain Maxwell material with linear viscous rheology
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-GenMaxwellPlaneStrain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Plane strain generalized Maxwell material (3 Maxwell models in parallel)
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-PowerLawPlaneStrain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Plane strain Maxwell material with power-law viscous rheology
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-MaxwellIsotropic3D
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Isotropic Maxwell material with linear viscous rheology
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-GenMaxwellIsotropic3D
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Generalized model consisting of 3 Maxwell models in parallel
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-PowerLaw3D
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Isotropic Maxwell material with power-law viscous rheology
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float figure
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Graphics
-	filename figs/pylith-materials.eps
-	scale 75
-
-\end_inset
-
-
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:Material-models"
-
-\end_inset
-
-Spring-dashpot 1D representations of the available 3D elastic and 2D/3D
- viscoelastic material models for PyLith.
- The top model is a linear elastic model, the middle model is a Maxwell
- model, and the bottom model is a generalized Maxwell model.
- For the generalized Maxwell model, 
-\begin_inset Formula $\lambda$
-\end_inset
-
- and 
-\begin_inset Formula $\mu_{tot}$
-\end_inset
-
- are specified for the entire model, and then the ratio 
-\begin_inset Formula $\mu_{i}/\mu_{tot}$
-\end_inset
-
- is specified for each Maxwell model.
- For the power-law model, the linear dashpot in the Maxwell model is replaced
- by a nonlinear dashpot obeying a power-law.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Definitions
-\end_layout
-
-\begin_layout Standard
-In the following sections, we use a combination of vector and index notation
- (our notation conventions are shown in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:Mathematical-notation"
-
-\end_inset
-
-).
- When using index notation, we use the common convention where repeated
- indices indicate summation over the range of the index.
- We also make frequent use of the scalar inner product.
- The scalar inner product of two second-order tensors may be written
-\begin_inset Formula 
-\begin{gather}
-\underline{a}\cdot\underline{b}=a_{ij}b_{ij}\,.\label{eq:14}
-\end{gather}
-
-\end_inset
-
-Although the general constitutive relations are formulated in terms of the
- stress and strain, we frequently make use of the deviatoric stress and
- strain in our formulation.
- We first define the mean stress, 
-\begin_inset Formula $P$
-\end_inset
-
-, and mean strain, 
-\begin_inset Formula $\theta$
-\end_inset
-
-:
-\begin_inset Formula 
-\begin{gather}
-P=\frac{\sigma_{ii}}{3}\,,\,\,\,\,\theta=\frac{\epsilon_{ii}}{3}\,,\label{eq:15}
-\end{gather}
-
-\end_inset
-
-where the 
-\begin_inset Formula $\sigma_{ii}$
-\end_inset
-
- and 
-\begin_inset Formula $\epsilon_{ii}$
-\end_inset
-
- represent the trace of the stress and strain tensors, respectively.
- We then define the deviatoric components of stress and strain as
-\begin_inset Formula 
-\begin{gather}
-S_{ij}=\sigma_{ij}-P\delta_{ij}\,,\,\,\,\, e_{ij}=\epsilon_{ij}-\theta\delta_{ij}\,,\label{eq:16}
-\end{gather}
-
-\end_inset
-
-where 
-\begin_inset Formula $\delta_{ij}$
-\end_inset
-
- is the Kronecker delta.
- Using the deviatoric components, we define the effective stress, 
-\begin_inset Formula $\overline{\sigma}$
-\end_inset
-
-, the second deviatoric stress invariant, 
-\begin_inset Formula $J_{2}^{\prime}$
-\end_inset
-
-, the effective deviatoric strain, 
-\begin_inset Formula $\overline{e}$
-\end_inset
-
-, and the second deviatoric strain invariant, 
-\begin_inset Formula $L_{2}^{\prime}$
-\end_inset
-
-, as
-\begin_inset Formula 
-\begin{gather}
-\overline{\sigma}=\sqrt{\frac{3}{2}\underline{S}\cdot\underline{S}}\,\,\nonumber \\
-J_{2}^{\prime}=\frac{1}{2}\underline{S}\cdot\underline{S}\,.\label{eq:17}\\
-\overline{e}=\sqrt{\frac{2}{3}\underline{e}\cdot\underline{e}}\,\,\nonumber \\
-L_{2}^{\prime}=\frac{1}{2}\underline{e}\cdot\underline{e}\,\,\nonumber 
-\end{gather}
-
-\end_inset
-
-Due to the symmetry of the stress and strain tensors, it is sometimes convenient
- to represent them as vectors:
-\begin_inset Formula 
-\begin{gather}
-\overrightarrow{\sigma^{T}}=\left[\begin{array}{cccccc}
-\sigma_{11} & \sigma_{22} & \sigma_{33} & \sigma_{12} & \sigma_{23} & \sigma_{31}\end{array}\right]\label{eq:18}\\
-\overrightarrow{\epsilon^{T}}=\left[\begin{array}{cccccc}
-\epsilon_{11} & \epsilon_{22} & \epsilon_{33} & \epsilon_{12} & \epsilon_{23} & \epsilon_{31}\end{array}\right]\:.\nonumber 
-\end{gather}
-
-\end_inset
-
-Note that when taking the scalar inner product of two tensors represented
- as vectors, it is necessary to double the products representing off-diagonal
- terms.
-\end_layout
-
-\begin_layout Standard
-For quantities evaluated over a specific time period, we represent the initial
- time as a prefixed subscript and the end time as a prefixed superscript.
- In cases where the initial time does not appear, it is understood to be
- 
-\begin_inset Formula $-\infty$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:Mathematical-notation"
-
-\end_inset
-
-Mathematical notation used in this section.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="3" columns="3">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Index notation
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Vector notation
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $a_{i}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\overrightarrow{a}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Vector field a
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $a_{ij}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\underline{a}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Second order tensor field a
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Linear Viscoelastic Models
-\end_layout
-
-\begin_layout Standard
-Linear viscoelastic models are obtained by various combinations of a linear
- elastic spring and a linear viscous dashpot in series or parallel.
- The simplest example is probably the linear Maxwell model, which consists
- of a spring in series with a dashpot, as shown in Figure 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "fig:Material-models"
-
-\end_inset
-
-.
- For a one-dimensional model, the response is given by
-\begin_inset Formula 
-\begin{equation}
-\frac{d\epsilon_{Total}}{dt}=\frac{d\epsilon_{D}}{dt}+\frac{d\epsilon_{S}}{dt}=\frac{\sigma}{\eta}+\frac{1}{E}\frac{d\sigma}{dt}\:,
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\epsilon_{Total}$
-\end_inset
-
- is the total strain, 
-\begin_inset Formula $\epsilon_{D}$
-\end_inset
-
- is the strain in the dashpot, 
-\begin_inset Formula $\epsilon_{S}$
-\end_inset
-
- is the strain in the spring, 
-\begin_inset Formula $\sigma$
-\end_inset
-
- is the stress, 
-\begin_inset Formula $\eta$
-\end_inset
-
- is the viscosity of the dashpot, and 
-\begin_inset Formula $E$
-\end_inset
-
- is the spring constant.
- When a Maxwell material is subjected to constant strain, the stresses relax
- exponentially with time.
- When a Maxwell material is subjected to a constant stress, there is an
- immediate elastic strain, corresponding to the response of the spring,
- and a viscous strain that increases linearly with time.
- Since the strain response is unbounded, the Maxwell model actually represents
- a fluid.
-\end_layout
-
-\begin_layout Standard
-Another simple model is the Kelvin-Voigt model, which consists of a spring
- in parallel with a dashpot.
- In this case, the one-dimensional response is given by
-\begin_inset Formula 
-\begin{equation}
-\sigma\left(t\right)=E\epsilon\left(t\right)+\eta\frac{d\epsilon\left(t\right)}{dt}\:.
-\end{equation}
-
-\end_inset
-
-As opposed to the Maxwell model, which represents a fluid, the Kelvin-Voigt
- model represents a solid undergoing reversible, viscoelastic strain.
- If the material is subjected to a constant stress, it deforms at a decreasing
- rate, gradually approaching the strain that would occur for a purely elastic
- material.
- When the stress is released, the material gradually relaxes back to its
- undeformed state.
-\end_layout
-
-\begin_layout Standard
-The most general form of linear viscoelastic model is the generalized Maxwell
- model, which consists of a spring in parallel with a number of Maxwell
- models (see Figure 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "fig:Material-models"
-
-\end_inset
-
-).
- Using this model, it is possible to represent a number of simpler viscoelastic
- models.
- For example, a simple Maxwell model is obtained by setting the elastic
- constants of all springs to zero, with the exception of the spring contained
- in the first Maxwell model (
-\begin_inset Formula $\mu_{1}$
-\end_inset
-
-).
- Similarly, the Kelvin-Voigt model may be obtained by setting the elastic
- constants 
-\begin_inset Formula $\mu_{2}=\mu_{3}=0$
-\end_inset
-
-, and setting 
-\begin_inset Formula $\mu_{1}=\infty$
-\end_inset
-
- (or a very large number).
-\end_layout
-
-\begin_layout Subsection
-Formulation for Generalized Maxwell Models
-\begin_inset CommandInset label
-LatexCommand label
-name "sub:Formulation-for-Gen-Max"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-As described above, the generalized Maxwell viscoelastic model consists
- of a number of Maxwell linear viscoelastic models in parallel with a spring,
- as shown in Figure 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "fig:Material-models"
-
-\end_inset
-
-.
- PyLith includes the specific case of a spring in parallel with three Maxwell
- models.
- As described in the previous paragraph, a number of common material models
- may be obtained from this model by setting the shear moduli of various
- springs to zero or infinity (or a large number), such as the Maxwell model,
- the Kelvin model, and the standard linear solid.
- We follow formulations similar to those used by Zienkiewicz and Taylor
- 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Zienkiewicz:Taylor:2000"
-
-\end_inset
-
- and Taylor 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Taylor:2003"
-
-\end_inset
-
-.
- In this formulation, we specify the total shear modulus of the model (
-\begin_inset Formula $\mu_{tot}$
-\end_inset
-
-) and Lame's constant (
-\begin_inset Formula $\lambda$
-\end_inset
-
-).
- We then provide the fractional shear modulus for each Maxwell element spring
- in the model.
- It is not necessary to specify the fractional modulus for 
-\begin_inset Formula $\mu_{0}$
-\end_inset
-
-, since this is obtained by subtracting the sum of the other ratios from
- 1.
- Note that the sum of all these fractions must equal 1.
- We use a similar formulation for our linear Maxwell viscoelastic model,
- but in that case 
-\begin_inset Formula $\mu_{0}$
-\end_inset
-
- is always zero and we only use a single Maxwell model.
- The parameters defining the standard Maxwell model are shown in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:linearMaxwell"
-
-\end_inset
-
-, and those defining the generalized Maxwell model are shown in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:genMaxwell"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-As for all our viscoelastic models, the volumetric strain is completely
- elastic, and the viscoelastic deformation may be expressed purely in terms
- of the deviatoric components:
-\begin_inset Formula 
-\begin{equation}
-\underline{S}=2\mu_{tot}\left[\mu_{0}\underline{e}+\sum_{i=1}^{N}\mu_{i}\underline{q}^{i}-\underline{e}^{I}\right]+\underline{S}^{I}\,;\; P=3K\left(\theta-\theta^{I}\right)+P^{I}\,,\label{eq:19}
-\end{equation}
-
-\end_inset
-
-where 
-\shape slanted
-K
-\shape default
- is the bulk modulus, 
-\begin_inset Formula $N$
-\end_inset
-
- is the number of Maxwell models, and the variable 
-\begin_inset Formula $\underline{q}^{i}$
-\end_inset
-
- follows the evolution equations
-\begin_inset Formula 
-\begin{equation}
-\underline{\dot{q}}^{i}+\frac{1}{\lambda_{i}}\underline{q}^{i}=\underline{\dot{e}}.\label{eq:20}
-\end{equation}
-
-\end_inset
-
-The 
-\begin_inset Formula $\lambda_{i}$
-\end_inset
-
- are the relaxation times for each Maxwell model.
-\end_layout
-
-\begin_layout Standard
-An alternative to the differential equation form above is an integral equation
- form expressed in terms of the relaxation modulus function.
- This function is defined in terms of an idealized experiment in which,
- at time labeled zero (
-\begin_inset Formula $t=0$
-\end_inset
-
-), a specimen is subjected to a constant strain, 
-\begin_inset Formula $\underline{e}_{0}$
-\end_inset
-
-, and the stress response, 
-\begin_inset Formula $\underline{S}\left(t\right)$
-\end_inset
-
-, is measured.
- For a linear material we obtain:
-\begin_inset Formula 
-\begin{equation}
-\underline{S}\left(t\right)=2\mu\left(t\right)\left(\underline{e}_{0}-\underline{e}^{I}\right)+\underline{S}^{I}\,,\label{eq:21}
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\mu\left(t\right)$
-\end_inset
-
- is the shear relaxation modulus function.
- Using linearity and superposition for an arbitrary state of strain yields
- an integral equation:
-\begin_inset Formula 
-\begin{equation}
-\underline{S}\left(t\right)=\intop_{-\infty}^{t}\mu\left(t-\tau\right)\underline{\dot{e}}\, d\tau\,.\label{eq:22}
-\end{equation}
-
-\end_inset
-
-If we assume the modulus function in Prony series form we obtain
-\begin_inset Formula 
-\begin{equation}
-\mu\left(t\right)=\mu_{tot}\left(\mu_{0}+\sum_{i=1}^{N}\mu_{i}\exp\frac{-t}{\lambda_{i}}\right)\,,\label{eq:23}
-\end{equation}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{equation}
-\mu_{0}+\sum_{i=1}^{N}\mu_{i}=1\,.\label{eq:24}
-\end{equation}
-
-\end_inset
-
-With the form in Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:23"
-
-\end_inset
-
-, the integral equation form is identical to the differential equation form.
-\end_layout
-
-\begin_layout Standard
-If we assume the material is undisturbed until a strain is suddenly applied
- at time zero, we can divide the integral into
-\begin_inset Formula 
-\begin{equation}
-\intop_{-\infty}^{t}\left(\cdot\right)\, d\tau=\intop_{-\infty}^{0^{-}}\left(\cdot\right)\, d\tau+\intop_{0^{-}}^{0^{+}}\left(\cdot\right)\, d\tau+\intop_{0^{+}}^{t}\left(\cdot\right)\, d\tau\,.\label{eq:27}
-\end{equation}
-
-\end_inset
-
-The first term is zero, the second term includes a jump term associated
- with 
-\begin_inset Formula $\underline{e}_{0}$
-\end_inset
-
- at time zero, and the last term covers the subsequent history of strain.
- Applying this separation to Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:22"
-
-\end_inset
-
-,
-\begin_inset Formula 
-\begin{equation}
-\underline{S}\left(t\right)=2\mu\left(t\right)\left(\underline{e}_{0}-\underline{e}^{I}\right)+\underline{S}^{I}+2\int_{0}^{t}\mu\left(t-\tau\right)\underline{\dot{e}}\left(\tau\right)\, d\tau\,,\label{eq:28}
-\end{equation}
-
-\end_inset
-
-where we have left the sign off of the lower limit on the integral.
-\end_layout
-
-\begin_layout Standard
-Substituting Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:23"
-
-\end_inset
-
- into 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:28"
-
-\end_inset
-
-, we obtain
-\begin_inset Formula 
-\begin{equation}
-\underline{S}\left(t\right)=2\mu_{tot}\left\{ \mu_{0}\underline{e}\left(t\right)+\sum_{i=1}^{N}\left[\mu_{i}\exp\frac{-t}{\lambda_{i}}\left(\underline{e}_{0}+\intop_{0}^{t}\exp\frac{t}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\right)\right]-\underline{e}^{I}\right\} +\underline{S}^{I}\,.\label{eq:29}
-\end{equation}
-
-\end_inset
-
-We then split each integral into two ranges: from 0 to 
-\begin_inset Formula $t_{n}$
-\end_inset
-
-, and from 
-\begin_inset Formula $t_{n}$
-\end_inset
-
- to 
-\begin_inset Formula $t$
-\end_inset
-
-, and define each integral as
-\begin_inset Formula 
-\begin{equation}
-\underline{i}_{i}^{1}\left(t\right)=\intop_{0}^{t}\exp\frac{\tau}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\,.\label{eq:30}
-\end{equation}
-
-\end_inset
-
-The integral then becomes
-\begin_inset Formula 
-\begin{equation}
-\underline{i}_{i}^{1}\left(t\right)=\underline{i}_{i}^{1}\left(t_{n}\right)+\intop_{t_{n}}^{t}\exp\frac{\tau}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\,.\label{eq:31}
-\end{equation}
-
-\end_inset
-
-Including the negative exponential multiplier:
-\begin_inset Formula 
-\begin{equation}
-\underline{h}_{i}^{1}\left(t\right)=\exp\frac{-t}{\lambda_{i}}\underline{i}_{i}^{1}\,.\label{eq:32}
-\end{equation}
-
-\end_inset
-
-Then
-\begin_inset Formula 
-\begin{equation}
-\underline{h}_{i}^{1}\left(t\right)=\exp\frac{-\Delta t}{\lambda_{i}}\underline{h}_{i}^{1}\left(t_{n}\right)+\Delta\underline{h}_{i}\,,\label{eq:33}
-\end{equation}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{equation}
-\Delta\underline{h}_{i}=\exp\frac{-t}{\lambda_{i}}\intop_{t_{n}}^{t}\exp\frac{\tau}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\,.\label{eq:34}
-\end{equation}
-
-\end_inset
-
-Approximating the strain rate as constant over each time step, the solution
- may be found as
-\begin_inset Formula 
-\begin{equation}
-\Delta\underline{h}_{i}=\frac{\lambda_{i}}{\Delta t}\left(1-\exp\frac{-\Delta t}{\lambda_{i}}\right)\left(\underline{e}-\underline{e}_{n}\right)=\Delta h_{i}\left(\underline{e}-\underline{e}_{n}\right)\,.\label{eq:35}
-\end{equation}
-
-\end_inset
-
-The approximation is singular for zero time steps, but a series expansion
- may be used for small time-step sizes:
-\begin_inset Formula 
-\begin{equation}
-\Delta h_{i}\approx1-\frac{1}{2}\left(\frac{\Delta t}{\lambda_{i}}\right)+\frac{1}{3!}\left(\frac{\Delta t}{\lambda_{i}}\right)^{2}-\frac{1}{4!}\left(\frac{\Delta t}{\lambda_{i}}\right)^{3}+\cdots\,.\label{eq:36}
-\end{equation}
-
-\end_inset
-
-This converges with only a few terms.
- With this formulation, the constitutive relation now has the simple form:
-\begin_inset Formula 
-\begin{equation}
-\underline{S}\left(t\right)=2\mu_{tot}\left(\mu_{0}\underline{e}\left(t\right)+\sum_{i=1}^{N}\mu_{i}\underline{h}_{i}^{1}\left(t\right)-\underline{e}^{I}\right)+\underline{S}^{I}\,.\label{eq:37}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-We need to compute the tangent constitutive matrix when forming the stiffness
- matrix.
- In addition to the volumetric contribution to the tangent constitutive
- matrix, we require the deviatoric part:
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\underline{S}}{\partial\underline{\epsilon}}=\frac{\partial\underline{S}}{\partial\underline{e}}\frac{\partial\underline{e}}{\partial\underline{\epsilon}}\,,\label{eq:38}
-\end{equation}
-
-\end_inset
-
-where the second derivative on the right may be easily deduced from Equation
- 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:16"
-
-\end_inset
-
-.
- The other derivative is given by
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\underline{S}}{\partial\underline{e}}=2\mu_{tot}\left[\mu_{0}\underline{I}+\sum_{i=1}^{N}\mu_{i}\frac{\partial\underline{h}_{i}^{1}}{\partial\underline{e}}\right]\,,\label{eq:39}
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\underline{I}$
-\end_inset
-
- is the identity matrix.
- From Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:33"
-
-\end_inset
-
- through 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:35"
-
-\end_inset
-
-, the derivative inside the brackets is
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\underline{h}_{i}^{1}}{\partial\underline{e}}=\Delta h_{i}\left(\Delta t\right)\underline{I}\,.\label{eq:40}
-\end{equation}
-
-\end_inset
-
-The complete deviatoric tangent relation is then
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\underline{S}}{\partial\underline{\epsilon}}=2\mu_{tot}\left[\mu_{0}+\sum_{i=1}^{N}\mu_{i}\Delta h_{i}\left(\Delta t\right)\right]\frac{\partial\underline{e}}{\partial\underline{\epsilon}}\,.\label{eq:41}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-We use this formulation for both our Maxwell and generalized Maxwell viscoelasti
-c models.
- For the Maxwell model, 
-\begin_inset Formula $\mu_{0}=0$
-\end_inset
-
- and 
-\begin_inset Formula $N=1$
-\end_inset
-
-.
- For the generalized Maxwell model, 
-\begin_inset Formula $N=3.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:linearMaxwell"
-
-\end_inset
-
-Values in spatial database used as parameters in the linear Maxwell viscoelastic
- material constitutive model.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="5" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="middle" width="0.85in">
-<column alignment="center" valignment="middle" width="2.47in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Parameter
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\align center
-
-\series bold
-Name in Spatial Database
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{p}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vp
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{s}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vs
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\rho$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-density
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\eta$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-viscosity
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:genMaxwell"
-
-\end_inset
-
-Values in spatial database used as parameters in the generalized linear
- Maxwell viscoelastic material constitutive model.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="10" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="middle" width="0.85in">
-<column alignment="center" valignment="middle" width="2.47in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Parameter
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\align center
-
-\series bold
-Name in Spatial Database
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{p}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vp
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{s}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vs
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\rho$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-density
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\mu_{1}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-shear-ratio-1
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\mu_{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-shear-ratio-2
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\mu_{3}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-shear-ratio-3
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\eta_{1}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-viscosity-1
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\eta_{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-viscosity-2
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\eta_{3}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-viscosity-3
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-\begin_inset CommandInset label
-LatexCommand label
-name "sub:Effective-Stress-Formulations-Viscoelastic"
-
-\end_inset
-
-Effective Stress Formulations for Viscoelastic Materials
-\end_layout
-
-\begin_layout Standard
-As an alternative to the approach outlined above, an effective stress function
- formulation 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Kojic:Bathe:1987"
-
-\end_inset
-
- may be employed for both a linear Maxwell model and a power-law Maxwell
- model.
- Note that this formulation is not presently employed for linear viscoelastic
- models (see Appendix 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "cha:Alternative-Formulations"
-
-\end_inset
-
-), but it is used for power-law viscoelastic materials.
- For the viscoelastic materials considered here, the viscous volumetric
- strains are zero (incompressible flow), and it is convenient to separate
- the general stress-strain relationship at time 
-\begin_inset Formula $t+\Delta t$
-\end_inset
-
- into deviatoric and volumetric parts:
-\begin_inset Formula 
-\begin{gather}
-\phantom{}{}^{t+\Delta t}\underline{S}=\frac{E}{1+\nu}\left(^{t+\Delta t}\underline{e}-\phantom{}^{t+\Delta t}\underline{e}^{C}-\underline{e}^{I}\right)+\underline{S}^{I}=\frac{1}{a_{E}}\left(^{t+\Delta t}\underline{e}-\phantom{}^{t+\Delta t}\underline{e}^{C}-\underline{e}^{I}\right)\label{eq:42}\\
-^{t+\Delta t}P=\frac{E}{1-2\nu}\left(^{t+\Delta t}\theta-\theta^{I}\right)+P^{I}=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta-\theta^{I}\right)\:,\nonumber 
-\end{gather}
-
-\end_inset
-
-where 
-\begin_inset Formula $^{t+\Delta t}\underline{e}$
-\end_inset
-
- is the total deviatoric strain, 
-\begin_inset Formula $^{t+\Delta t}\underline{e}^{C}$
-\end_inset
-
- is the total viscous strain, 
-\begin_inset Formula $\underline{e}^{I}$
-\end_inset
-
- is the initial deviatoric strain, 
-\begin_inset Formula $^{t+\Delta t}P$
-\end_inset
-
- is the pressure, 
-\begin_inset Formula $^{t+\Delta t}\theta$
-\end_inset
-
- is the mean strain evaluated at time 
-\begin_inset Formula $t+\Delta t$
-\end_inset
-
- , and 
-\begin_inset Formula $\theta^{I}$
-\end_inset
-
- is the initial mean strain.
- The initial deviatoric stress and initial pressure are given by 
-\begin_inset Formula $\underline{S}^{I}$
-\end_inset
-
- and 
-\begin_inset Formula $P^{I}$
-\end_inset
-
-, respectively.
- The topmost equation in Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:42"
-
-\end_inset
-
- may also be written as
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}\underline{S}=\frac{1}{a_{E}}(^{t+\Delta t}\underline{e}^{\prime}-\underline{\Delta e}^{C})+\underline{S}^{I}\,,\label{eq:43}
-\end{gather}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}\underline{e}^{\prime}=\phantom{}^{t+\Delta t}\underline{e}-\phantom{}^{t}\underline{e}^{C}-\underline{e}^{I}\,\,,\,\,\,\underline{\Delta e}^{C}=\phantom{}^{t+\Delta t}\underline{e}^{C}-\phantom{}^{t}\underline{e}^{C}\,.\label{eq:44}
-\end{gather}
-
-\end_inset
-
-The creep strain increment is approximated using
-\begin_inset Formula 
-\begin{gather}
-\underline{\Delta e}^{C}=\Delta t\phantom{}^{\tau}\gamma\phantom{}^{\tau}\underline{S}\,,\label{eq:45}
-\end{gather}
-
-\end_inset
-
-where, using the 
-\begin_inset Formula $\alpha$
-\end_inset
-
--method of time integration,
-\begin_inset Formula 
-\begin{gather}
-^{\tau}\underline{S}=(1-\alpha)_{I}^{t}\underline{S}+\alpha\phantom{}_{I}^{t+\Delta t}\underline{S}+\underline{S}^{I}=(1-\alpha)^{t}\underline{S}+\alpha\phantom{}^{t+\Delta t}\underline{S}\,\,,\label{eq:46}
-\end{gather}
-
-\end_inset
-
-and
-\begin_inset Formula 
-\begin{gather}
-^{\tau}\gamma=\frac{3\Delta\overline{e}^{C}}{2\Delta t\phantom{}^{\tau}\overline{\sigma}}\,\,,\label{eq:47}
-\end{gather}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{gather}
-\Delta\overline{e}^{C}=\sqrt{\frac{2}{3}\underline{\Delta e}^{C}\cdot\underline{\Delta e}^{C}}\label{eq:48}
-\end{gather}
-
-\end_inset
-
-and
-\begin_inset Formula 
-\begin{gather}
-^{\tau}\overline{\sigma}=(1-\alpha)_{I}^{t}\overline{\sigma}+\alpha\phantom{}_{I}^{t+\Delta t}\overline{\sigma}+\overline{\sigma}^{I}=\sqrt{3\phantom{}^{\tau}J_{2}^{\prime}}\,\,.\label{eq:49}
-\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-To form the global stiffness matrix, it is necessary to provide a relationship
- for the viscoelastic tangent material matrix relating stress and strain.
- If we use vectors composed of the stresses and tensor strains, this relationshi
-p is
-\begin_inset Formula 
-\begin{gather}
-\underline{C}^{VE}=\frac{\partial\phantom{}^{t+\Delta t}\overrightarrow{\sigma}}{\partial\phantom{}^{t+\Delta t}\overrightarrow{\epsilon}}\,\,.\label{eq:55}
-\end{gather}
-
-\end_inset
-
-In terms of the vectors, we have
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}\sigma_{i}=\phantom{}^{t+\Delta t}S_{i}+\phantom{}^{t+\Delta t}P\,\,;\,\,\, i=1,2,3\label{eq:56}\\
-^{t+\Delta t}\sigma_{i}=\phantom{}^{t+\Delta t}S_{i}\,;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, i=4,5,6\nonumber 
-\end{gather}
-
-\end_inset
-
-Therefore,
-\begin_inset Formula 
-\begin{gather}
-C_{ij}^{VE}=C_{ij}^{\prime}+\frac{1}{3a_{m}}\,;\,\,1\leq i,j\leq3\,\,.\label{eq:57}\\
-C_{ij}^{VE}=C_{ij}^{\prime}\,;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\textrm{otherwise}\nonumber 
-\end{gather}
-
-\end_inset
-
-Using the chain rule,
-\begin_inset Formula 
-\begin{gather}
-C_{ij}^{\prime}=\frac{\partial\phantom{}^{t+\Delta t}S_{i}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{\partial\phantom{}^{t+\Delta t}S_{i}}{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}\frac{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}{\partial\phantom{}^{t+\Delta t}e_{l}}\frac{\partial\phantom{}^{t+\Delta t}e_{l}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\,\,.\label{eq:58}
-\end{gather}
-
-\end_inset
-
-From Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:44"
-
-\end_inset
-
-, we obtain
-\begin_inset Formula 
-\begin{gather}
-\frac{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}{\partial\phantom{}^{t+\Delta t}e_{l}}=\delta_{kl}\,\,,\label{eq:59}
-\end{gather}
-
-\end_inset
-
-and from Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:16"
-
-\end_inset
-
-:
-\begin_inset Formula 
-\begin{gather}
-\frac{\partial\phantom{}^{t+\Delta t}e_{l}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{3}\left[\begin{array}{ccc}
-2 & -1 & -1\\
--1 & 2 & -1\\
--1 & -1 & 2
-\end{array}\right];\,\,1\leq l,j\leq3\label{eq:60}\\
-\frac{\partial\phantom{}^{t+\Delta t}e_{l}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\delta_{lj}\,\,;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\textrm{otherwise.}\nonumber 
-\end{gather}
-
-\end_inset
-
-The first term of Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:58"
-
-\end_inset
-
- depends on the particular constitutive relationship, and the complete tangent
- matrix may then be obtained from Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:57"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Subsubsection
-Power-Law Maxwell Viscoelastic Material
-\begin_inset CommandInset label
-LatexCommand label
-name "sub:Power-Law-Maxwell-Viscoelastic"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Laboratory results on rock rheology are typically performed using a triaxial
- experiment, and the creep data are fit to a power-law equation of the form
- (e.g., 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Kirby:Kronenberg:1987"
-
-\end_inset
-
-):
-\begin_inset Formula 
-\begin{equation}
-\dot{\epsilon}_{11}^{C}=A_{E}\exp\left(\frac{-Q}{RT}\right)\left(\sigma_{1}-\sigma_{3}\right)^{n}=A_{E}\exp\left(\frac{-Q}{RT}\right)\sigma_{d}^{n}\:,\label{eq:64}
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\dot{\epsilon}_{11}^{C}$
-\end_inset
-
- is the strain rate in the direction of the maximum principal stress 
-\begin_inset Formula $\left(\sigma_{1}\right)$
-\end_inset
-
-, 
-\begin_inset Formula $A_{E}$
-\end_inset
-
- is the experimentally-derived pre-exponential constant, 
-\begin_inset Formula $Q$
-\end_inset
-
- is the activation enthalpy, 
-\begin_inset Formula $R$
-\end_inset
-
- is the universal gas constant, 
-\begin_inset Formula $T$
-\end_inset
-
- is the absolute temperature, 
-\begin_inset Formula $n$
-\end_inset
-
- is the power-law exponent, 
-\begin_inset Formula $\sigma_{3}\:\left(=\sigma_{2}\right)$
-\end_inset
-
- is equal to the confining pressure, and 
-\begin_inset Formula $\sigma_{d}$
-\end_inset
-
- is the differential stress.
- To properly formulate the flow law, it must be generalized so that the
- results are not influenced by the experiment type or the choice of coordinate
- systems (e.g., 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Paterson:1994"
-
-\end_inset
-
-).
- The flow law may then be generalized in terms of the deviatoric stress
- and strain rate invariants:
-\begin_inset Formula 
-\begin{equation}
-\sqrt{\dot{L}_{2}^{\prime C}}=A_{M}\exp\left(\frac{-Q}{RT}\right)\sqrt{J_{2}^{\prime}}^{n}\:,\label{eq:65}
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $A_{M}$
-\end_inset
-
- is now a pre-exponential constant used in the formulation for modeling.
- In practice, it is necessary to compute each strain rate component using
- the flow law.
- This is accomplished using:
-\begin_inset Formula 
-\begin{equation}
-\dot{e}_{ij}^{C}=A_{M}\exp\left(\frac{-Q}{RT}\right)\sqrt{J_{2}^{\prime}}^{n-1}S_{ij}\:.\label{eq:66}
-\end{equation}
-
-\end_inset
-
-Note that Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:65"
-
-\end_inset
-
- and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:66"
-
-\end_inset
-
- are consistent, since Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:65"
-
-\end_inset
-
- may be obtained from Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:66"
-
-\end_inset
-
- by taking the scalar inner product of both sides, multiplying by 1/2, and
- taking the square root.
-\end_layout
-
-\begin_layout Standard
-In a triaxial experiment with confining pressure 
-\begin_inset Formula $P_{c}$
-\end_inset
-
-, we have
-\begin_inset Formula 
-\begin{gather}
-\sigma_{2}=\sigma_{3}=P_{c}\nonumber \\
-\sigma_{1}=\sigma_{1}^{app}\label{eq:67}\\
-P=\frac{\sigma_{1}+2P_{c}}{3}\:,\nonumber 
-\end{gather}
-
-\end_inset
-
-where 
-\begin_inset Formula $\sigma_{1}^{app}$
-\end_inset
-
- is the applied load.
- The deviatoric stresses are then:
-\begin_inset Formula 
-\begin{gather}
-S_{1}=\frac{2}{3}\left(\sigma_{1}-P_{c}\right)\nonumber \\
-S_{2}=S_{3}=-\frac{1}{3}\left(\sigma_{1}-P_{c}\right)\:.\label{eq:68}
-\end{gather}
-
-\end_inset
-
-This gives
-\begin_inset Formula 
-\begin{gather}
-S_{1}=\frac{2}{3}\left(\sigma_{1}-\sigma_{3}\right)=\frac{2}{3}\sigma_{d}\nonumber \\
-S_{2}=S_{3}=-\frac{1}{3}\left(\sigma_{1}-\sigma_{3}\right)=-\frac{1}{3}\sigma_{d}\:.\label{eq:69}
-\end{gather}
-
-\end_inset
-
-In terms of the second deviatoric stress invariant, we then have
-\begin_inset Formula 
-\begin{equation}
-\sqrt{J_{2}^{\prime}}=\frac{\sigma_{d}}{\sqrt{3}}\:.\label{eq:70}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Under the assumption that the creep measured in the laboratory experiments
- is incompressible, we have
-\begin_inset Formula 
-\begin{gather}
-\dot{e}_{11}^{C}=\dot{\epsilon}_{11}\nonumber \\
-\dot{e}_{22}^{C}=\dot{e}_{33}^{C}=-\frac{1}{2}\dot{\epsilon}_{11}\:.\label{eq:71}
-\end{gather}
-
-\end_inset
-
-In terms of the second deviatoric strain rate invariant we then have
-\begin_inset Formula 
-\begin{equation}
-\sqrt{\dot{L}_{2}^{\prime C}}=\frac{\sqrt{3}}{2}\dot{\epsilon}_{11}\:.\label{eq:72}
-\end{equation}
-
-\end_inset
-
-Substituting Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:70"
-
-\end_inset
-
- and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:72"
-
-\end_inset
-
- into Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:64"
-
-\end_inset
-
-, we obtain
-\begin_inset Formula 
-\begin{equation}
-\sqrt{\dot{L}_{2}^{\prime C}}=A_{E}\frac{\sqrt{3}^{n+1}}{2}\exp\left(\frac{-Q}{RT}\right)\sqrt{J_{2}^{\prime}}^{n}\:,\label{eq:73}
-\end{equation}
-
-\end_inset
-
-and therefore,
-\begin_inset Formula 
-\begin{equation}
-A_{M}=\frac{\sqrt{3}^{n+1}}{2}A_{E}\:.\label{eq:74}
-\end{equation}
-
-\end_inset
-
-When the exponential factor is included, we define a new parameter:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula 
-\begin{equation}
-A_{T}=A_{M}\exp\left(\frac{-Q}{RT}\right)=\frac{\sqrt{3}^{n+1}}{2}A_{E}\exp\left(\frac{-Q}{RT}\right)\:.\label{eq:75}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-There is a problem with the usage of parameters 
-\begin_inset Formula $A_{E}$
-\end_inset
-
-, 
-\begin_inset Formula $A_{M}$
-\end_inset
-
-, and 
-\begin_inset Formula $A_{T}$
-\end_inset
-
-.
- Since the dimensions of these parameters are dependent on the value of
- the power-law exponent, they are not really constants.
- In addition to being logically inconsistent, this presents problems when
- specifying parameters for PyLith, since the power-law exponent must be
- known before the units can be determined.
- An alternative way of writing the flow rule is (e.g., 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Prentice:1968"
-
-\end_inset
-
-): 
-\begin_inset Formula 
-\begin{equation}
-\frac{\sqrt{\dot{L}_{2}^{\prime C}}}{\dot{e}_{0}}=\left(\frac{\sqrt{J_{2}^{\prime}}}{S_{0}}\right)^{n},\label{eq:76}
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $\dot{e}_{0}$
-\end_inset
-
- and 
-\begin_inset Formula $S_{0}$
-\end_inset
-
- are reference values for the strain rate and deviatoric stress.
- This means that
-\begin_inset Formula 
-\begin{equation}
-\frac{\dot{e}_{0}}{S_{0}^{n}}=A_{T}\:.\label{eq:77}
-\end{equation}
-
-\end_inset
-
-Users must therefore specify three parameters for a power-law material.
- The properties 
-\family typewriter
-reference-strain-rate
-\family default
-, 
-\family typewriter
-reference-stress
-\family default
-, and 
-\family typewriter
-power-law-exponent
-\family default
- in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:powerLaw"
-
-\end_inset
-
- refer to 
-\begin_inset Formula $\dot{e}_{0}$
-\end_inset
-
-, 
-\begin_inset Formula $S_{0}$
-\end_inset
-
-, and 
-\begin_inset Formula $n$
-\end_inset
-
-, respectively.
- To specify the power-law properties for PyLith using laboratory results,
- the user must first compute 
-\begin_inset Formula $A_{T}$
-\end_inset
-
- using Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:75"
-
-\end_inset
-
-.
- Then, values for 
-\begin_inset Formula $\dot{e}_{0}$
-\end_inset
-
- and 
-\begin_inset Formula $S_{0}$
-\end_inset
-
- must be provided.
- The simplest method is probably to assume a reasonable value for the reference
- strain rate, and then compute 
-\begin_inset Formula $S_{0}$
-\end_inset
-
- as
-\begin_inset Formula 
-\begin{equation}
-S_{0}=\left(\frac{\dot{e}_{0}}{A_{T}}\right)^{\frac{1}{n}}\:.\label{eq:78}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-A utility code (
-\family typewriter
-powerlaw_gendb.py
-\family default
-) is provided to convert laboratory results to the properties used by PyLith.
- To use the code, users must specify the spatial variation of 
-\begin_inset Formula $A_{E}$
-\end_inset
-
-, 
-\begin_inset Formula $Q$
-\end_inset
-
-, 
-\begin_inset Formula $n$
-\end_inset
-
-, and 
-\begin_inset Formula $T$
-\end_inset
-
-.
- An additional parameter is given to define the units of 
-\begin_inset Formula $A_{E}$
-\end_inset
-
-.
- The user then specifies either a reference stress or a reference strain
- rate, and a database suitable for PyLith is generated.
- This utility is described more fully in Section 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sub:Tutorial-Step08-Power-law"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-The flow law in component form is 
-\begin_inset Formula 
-\begin{equation}
-\dot{e}_{ij}^{C}=\frac{\dot{e}_{0}\sqrt{J_{2}^{\prime}}^{n-1}S_{ij}}{S_{0}^{n}}\:,\label{eq:79}
-\end{equation}
-
-\end_inset
-
-and the creep strain increment is approximated as
-\begin_inset Formula 
-\begin{gather}
-\underline{\Delta e}^{C}\approx\frac{\Delta t\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}\,^{\tau}\underline{S}}{S_{0}^{n}}=\frac{\Delta t\dot{e}_{0}\phantom{}^{\tau}\overline{\sigma}^{n-1}\,^{\tau}\underline{S}}{\sqrt{3}S_{0}^{n}}\,.\label{eq:80}
-\end{gather}
-
-\end_inset
-
- Therefore,
-\begin_inset Formula 
-\begin{gather}
-\Delta\bar{e}^{C}\approx\frac{2\Delta t\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n}}{\sqrt{3}S_{0}^{n}}=\frac{2\Delta t\dot{e}_{0}\phantom{}^{\tau}\overline{\sigma}^{n}}{\sqrt{3}^{n+1}S_{0}^{n}}\,,\,\textrm{and}\,^{\tau}\gamma=\frac{\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}}{S_{0}^{n}}\,.\label{eq:81}
-\end{gather}
-
-\end_inset
-
-substituting Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:46"
-
-\end_inset
-
-, 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:80"
-
-\end_inset
-
-, and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:81"
-
-\end_inset
-
- into 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:43"
-
-\end_inset
-
-, we obtain:
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}\underline{S}=\frac{1}{a_{E}}\left\{ ^{t+\Delta t}\underline{e}^{\prime}-\Delta t\phantom{}^{\tau}\gamma\left[\left(1-\alpha\right)^{t}\underline{S}+\alpha{}^{t+\Delta t}\underline{S}\right]\right\} +\underline{S}^{I}\,,\label{eq:82}
-\end{gather}
-
-\end_inset
-
-which may be rewritten:
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}\underline{S}\left(a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma\right)={}^{t+\Delta t}\underline{e}^{\prime}-\Delta t\phantom{}^{\tau}\gamma\left(1-\alpha\right)^{t}\underline{S}+a_{E}\underline{S}^{I}\,.\label{eq:83}
-\end{gather}
-
-\end_inset
-
-Taking the scalar inner product of both sides we obtain:
-\begin_inset Formula 
-\begin{gather}
-a^{2}\,\,{}^{t+\Delta t}J_{2}^{\prime}-b+c\phantom{}^{\tau}\gamma-d^{2}\,^{\tau}\gamma^{2}=F=0\,,\label{eq:84}
-\end{gather}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{gather}
-a=a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma\,\,\nonumber \\
-b=\frac{1}{2}{}^{t+\Delta t}\underline{e}^{\prime}\cdot{}^{t+\Delta t}\underline{e}^{\prime}+a_{E}{}^{t+\Delta t}\underline{e}^{\prime}\cdot\underline{S}^{I}+a_{E}^{2}\,^{I}J_{2}^{\prime}\,.\label{eq:85}\\
-c=\Delta t\left(1-\alpha\right){}^{t+\Delta t}\underline{e}^{\prime}\cdot^{t}\underline{S}+\Delta t\left(1-\alpha\right)a_{E}\,^{t}\underline{S}\cdot\underline{S}^{I}\,\,\nonumber \\
-d=\Delta t\left(1-\alpha\right)\sqrt{^{t}J_{2}^{\prime}}\,\,\nonumber 
-\end{gather}
-
-\end_inset
-
-Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:84"
-
-\end_inset
-
- is a function of a single unknown -- the square root of the second deviatoric
- stress invariant at time 
-\begin_inset Formula $t+\Delta t$
-\end_inset
-
- -- and may be solved by bisection or by Newton's method.
- Once this parameter has been found, the deviatoric stresses for the current
- time step may be found from Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:49"
-
-\end_inset
-
-, 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:81"
-
-\end_inset
-
-, and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:82"
-
-\end_inset
-
-, and the total stresses may be found by combining the deviatoric and volumetric
- components from Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:42"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-To compute the tangent stress-strain relation, we need to compute the first
- term in Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:58"
-
-\end_inset
-
-.
- We begin by rewriting Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:83"
-
-\end_inset
-
- as
-\begin_inset Formula 
-\begin{gather}
-F=^{t+\Delta t}S_{i}\left(a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma\right)-\phantom{}^{t+\Delta t}e_{i}^{\prime}+\Delta t\phantom{}^{\tau}\gamma\left(1-\alpha\right)^{t}S_{i}-a_{E}S_{i}^{I}=0\:.\label{eq:86}
-\end{gather}
-
-\end_inset
-
-The derivative of this function with respect to 
-\begin_inset Formula $^{t+\Delta t}e_{k}^{\prime\prime}$
-\end_inset
-
- is
-\begin_inset Formula 
-\begin{gather}
-\frac{\partial F}{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}=-\delta_{ik}\:,\label{eq:87}
-\end{gather}
-
-\end_inset
-
-and the derivative with respect to 
-\begin_inset Formula $^{t+\Delta t}S_{i}$
-\end_inset
-
- is
-\begin_inset Formula 
-\begin{gather}
-\frac{\partial F}{\partial\phantom{}^{t+\Delta t}S_{i}}=a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma+\frac{\partial\phantom{}^{\tau}\gamma}{\partial\phantom{}^{t+\Delta t}S_{i}}\Delta t\left[\alpha\phantom{}^{t+\Delta t}S_{i}+\left(1-\alpha\right)^{t}S_{i}\right]\:.\label{eq:88}
-\end{gather}
-
-\end_inset
-
-From Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:81"
-
-\end_inset
-
- and Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:49"
-
-\end_inset
-
-,
-\begin_inset Formula 
-\begin{gather}
-^{\tau}\gamma=\frac{\dot{e}_{0}}{S_{0}^{n}}\left[\alpha\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\left(1-\alpha\right)\sqrt{^{t}J_{2}^{\prime}}\right]^{n-1}\:.\label{eq:89}
-\end{gather}
-
-\end_inset
-
-Then
-\begin_inset Formula 
-\begin{gather}
-\frac{\partial\phantom{}^{\tau}\gamma}{\partial{}^{t+\Delta t}S_{i}}=\frac{\partial\phantom{}^{\tau}\gamma}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\frac{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}{\partial\phantom{}^{t+\Delta t}S_{l}}\label{eq:90}\\
-=\frac{\dot{e}_{0}\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}{}^{t+\Delta t}T_{i}}{2S_{0}^{n}}\,,\nonumber 
-\end{gather}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}T_{i}=\phantom{}^{t+\Delta t}S_{i}\:;\:\:1\leq i\leq3\label{eq:91}\\
-^{t+\Delta t}T_{i}=2\phantom{}^{t+\Delta t}S_{i}\:;\:\:\textrm{otherwise.}\nonumber 
-\end{gather}
-
-\end_inset
-
-Then using Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:87"
-
-\end_inset
-
-, 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:88"
-
-\end_inset
-
-, 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:90"
-
-\end_inset
-
-, and the quotient rule for derivatives of an implicit function,
-\begin_inset Formula 
-\begin{gather}
-\frac{\partial\phantom{}^{t+\Delta t}S_{i}}{\partial{}^{t+\Delta t}e_{k}^{\prime}}=\frac{\delta_{ik}}{a_{E}+\alpha\Delta t\left[^{\tau}\gamma+\frac{\dot{e}_{0}{}^{\tau}S_{i}\left(n-1\right){}^{t+\Delta t}T_{i}\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{2\sqrt{^{t+\Delta t}J_{2}^{\prime}}S_{0}^{n}}\right]}\,.\label{eq:92}
-\end{gather}
-
-\end_inset
-
-Note that for a linear material 
-\begin_inset Formula $\left(n=1\right)$
-\end_inset
-
-, this equation is identical to the linear formulation in Section 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sub:Effective-Stress-Formulation-Maxwell"
-
-\end_inset
-
- (making the appropriate substitution for 
-\begin_inset Formula $^{\tau}\gamma$
-\end_inset
-
-).
- Then, using Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:57"
-
-\end_inset
-
- through 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:60"
-
-\end_inset
-
-,
-\begin_inset Formula 
-\begin{gather}
-C_{ij}^{VE}=\frac{1}{3a_{m}}\left[\begin{array}{cccccc}
-1 & 1 & 1 & 0 & 0 & 0\\
-1 & 1 & 1 & 0 & 0 & 0\\
-1 & 1 & 1 & 0 & 0 & 0\\
-0 & 0 & 0 & 0 & 0 & 0\\
-0 & 0 & 0 & 0 & 0 & 0\\
-0 & 0 & 0 & 0 & 0 & 0
-\end{array}\right]+\frac{1}{3}\frac{\partial{}^{t+\Delta t}S_{i}}{\partial{}^{t+\Delta t}e_{k}^{\prime}}\left[\begin{array}{cccccc}
-2 & -1 & -1 & 0 & 0 & 0\\
--1 & 2 & -1 & 0 & 0 & 0\\
--1 & -1 & 2 & 0 & 0 & 0\\
-0 & 0 & 0 & 3 & 0 & 0\\
-0 & 0 & 0 & 0 & 3 & 0\\
-0 & 0 & 0 & 0 & 0 & 3
-\end{array}\right]\,.\label{eq:93}
-\end{gather}
-
-\end_inset
-
-Note that if there are no deviatoric stresses at the beginning and end of
- a time step (or if 
-\begin_inset Formula $\nicefrac{\dot{e}_{0}}{S_{0}^{n}}$
-\end_inset
-
- approaches zero), Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:92"
-
-\end_inset
-
- and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:93"
-
-\end_inset
-
- reduce to the elastic constitutive matrix, as expected.
-\end_layout
-
-\begin_layout Standard
-To compute the zero of the effective stress function using Newton's method,
- we require the derivative of Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:84"
-
-\end_inset
-
-, which may be written:
-\begin_inset Formula 
-\begin{gather}
-\frac{\partial F}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}=2a^{2}\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\frac{\dot{e}_{0}\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{S_{0}^{n}}\left(2a\alpha\Delta t{}^{t+\Delta t}J_{2}^{\prime}+c-2d^{2}\,^{\tau}\gamma\right)\,.\label{eq:94}
-\end{gather}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:powerLaw"
-
-\end_inset
-
-Values in spatial database used as parameters in the nonlinear power-law
- viscoelastic material constitutive model.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="7" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="middle" width="0.85in">
-<column alignment="center" valignment="middle" width="2.47in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Parameter
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\align center
-
-\series bold
-Name in Spatial Database
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{p}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vp
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{s}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-Vs
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\rho$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-density
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\dot{e}_{0}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-reference-strain-rate
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $S_{0}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-reference-stress
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $n$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-power-law-exponent
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Elastoplastic Materials
-\end_layout
-
-\begin_layout Standard
-PyLith presently contains just a single elastoplastic material that implements
- the Drucker-Prager yield criterion.
- Future releases of PyLith may contain additional elastoplastic materials,
- such as Drucker-Prager with hardening/softening.
-\end_layout
-
-\begin_layout Subsection
-General Elastoplasticity Formulation
-\end_layout
-
-\begin_layout Standard
-The elastoplasticity formulation in PyLith is based on an additive decomposition
- of the total strain into elastic and plastic parts:
-\begin_inset Formula 
-\begin{equation}
-d\epsilon_{ij}=d\epsilon_{ij}^{E}+d\epsilon_{ij}^{P}\:.\label{eq:95}
-\end{equation}
-
-\end_inset
-
-The stress increment is then given by
-\begin_inset Formula 
-\begin{equation}
-d\sigma_{ij}=C_{ijrs}^{E}\left(d\epsilon_{rs}-d\epsilon_{rs}^{P}\right)\:,\label{eq:96}
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $C_{ijrs}^{E}$
-\end_inset
-
- are the components of the elastic constitutive tensor.
- To completely specify an elastoplastic problem, three components are needed.
- We first require a yield condition, which specifies the state of stress
- at which plastic flow initiates.
- This is generally given in the form:
-\begin_inset Formula 
-\begin{equation}
-f\left(\underline{\sigma},k\right)=0\:,\label{eq:97}
-\end{equation}
-
-\end_inset
-
-where 
-\shape italic
-k
-\shape default
- is an internal state parameter.
- It is then necessary to specify a flow rule, which describes the relationship
- between plastic strain and stress.
- The flow rule is given in the form:
-\begin_inset Formula 
-\begin{equation}
-g\left(\underline{\sigma},k\right)=0\:.\label{eq:98}
-\end{equation}
-
-\end_inset
-
-The plastic strain increment is then given as
-\begin_inset Formula 
-\begin{equation}
-d\epsilon_{ij}^{P}=d\lambda\frac{\partial g}{\partial\sigma_{ij}}\:,\label{eq:99}
-\end{equation}
-
-\end_inset
-
-where 
-\begin_inset Formula $d\lambda$
-\end_inset
-
- is the scalar plastic multiplier.
- When the flow rule is identical to the yield criterion (
-\begin_inset Formula $f\equiv g$
-\end_inset
-
-), the plasticity is described as associated.
- Otherwise, it is non-associated.
- The final component needed is a hardening hypothesis, which describes how
- the yield condition and flow rule are modified during plastic flow.
- When the yield condition and flow rule remain constant during plastic flow
- (e.g., no hardening), the material is referred to as perfectly plastic.
-\end_layout
-
-\begin_layout Standard
-To perform the solution, the yield condition (Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:97"
-
-\end_inset
-
-) is first evaluated under the assumption of elastic behavior.
- If 
-\begin_inset Formula $^{t+\Delta t}f<0$
-\end_inset
-
-, the material behavior is elastic and no plastic flow occurs.
- Otherwise, the behavior is plastic and a plastic strain increment must
- be computed to return the stress state to the yield envelope.
- This procedure is known as an elastic predictor-plastic corrector algorithm.
-\end_layout
-
-\begin_layout Subsection
-Drucker-Prager Elastoplastic Material
-\end_layout
-
-\begin_layout Standard
-PyLith includes an elastoplastic implementation of the Drucker-Prager yield
- criterion 
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Drucker:Prager:1952"
-
-\end_inset
-
-.
- This criterion was originally devised to model plastic deformation of soils,
- and it has also been used to model rock deformation.
- It is intended to be a smooth approximation of the Mohr-Coulomb yield criterion.
- The implementation used in PyLith includes non-associated plastic flow,
- which allows control over the unreasonable amounts of dilatation that are
- sometimes predicted by the associated model.
- The model is described by the following yield condition:
-\begin_inset Formula 
-\begin{equation}
-f\left(\underline{\sigma},k\right)=\alpha_{f}I_{1}+\sqrt{J_{2}^{\prime}}-\beta\:,\label{eq:100}
-\end{equation}
-
-\end_inset
-
-and a flow rule given by:
-\begin_inset Formula 
-\begin{equation}
-g\left(\underline{\sigma},k\right)=\sqrt{J_{2}^{\prime}}+\alpha_{g}I_{1}\:.\label{eq:101}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The yield surface represents a circular cone in principal stress space,
- and the parameters can be related to the friction angle, 
-\begin_inset Formula $\phi$
-\end_inset
-
-, and the cohesion, 
-\begin_inset Formula $\bar{c}$
-\end_inset
-
-, of the Mohr-Coulomb model.
- The yield surface in Haigh-Westergaard space (
-\begin_inset Formula $\zeta=\frac{1}{\sqrt{3}}I_{1},p=\sqrt{2J_{2}},\cos(3\theta)=\frac{3\sqrt{3}}{2}\frac{J_{3}}{J_{2}^{3/2}}$
-\end_inset
-
-) is
-\begin_inset Formula 
-\begin{equation}
-\left(\sqrt{3}\sin\left(\theta+\frac{\pi}{3}\right)-\sin\phi\cos\left(\theta+\frac{\pi}{3}\right)\right)p-\sqrt{2}\sin\phi\zeta=\sqrt{6}\overline{c}\cos\theta.\label{eq:drucker:prager:haigh:westergaard}
-\end{equation}
-
-\end_inset
-
-The yield surface can be fit to the Mohr-Coulomb model in several different
- ways.
- The yield surface can touch the outer apices (
-\begin_inset Formula $\theta=\pi/3$
-\end_inset
-
-) of the Mohr-Coulomb model (inscribed version), the inner apices (
-\begin_inset Formula $\theta=0$
-\end_inset
-
-) of the Mohr-Coulomb model (circumscribed version), or halfway between
- the two (
-\begin_inset Formula $\theta=pi/6,$
-\end_inset
-
-middle version).
- Substituting these values for 
-\begin_inset Formula $\theta$
-\end_inset
-
- into Equation (
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:drucker:prager:haigh:westergaard"
-
-\end_inset
-
-) and casting it into the same form as Equation (
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:101"
-
-\end_inset
-
-) yields the values of 
-\begin_inset Formula $\alpha_{f}$
-\end_inset
-
-, 
-\begin_inset Formula $\beta$
-\end_inset
-
-, and 
-\begin_inset Formula $\alpha_{g}$
-\end_inset
-
- given in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:fit_mohr_coulomb"
-
-\end_inset
-
-, where 
-\begin_inset Formula $\phi_{0}$
-\end_inset
-
- refers to the initial friction angle.
- Similarly, the flow rule can be related to the dilatation angle, 
-\begin_inset Formula $\psi$
-\end_inset
-
-, of a Mohr-Coulomb model.
- It is also possible for the Mohr-Coulomb parameters to be functions of
- the internal state parameter, 
-\begin_inset Formula $k$
-\end_inset
-
-.
- In PyLith, the fit to the Mohr-Coulomb yield surface and flow rule is controlle
-d by the 
-\family typewriter
-fit_mohr_coulomb
-\family default
- property.
- 
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:fit_mohr_coulomb"
-
-\end_inset
-
-Options for fitting the Drucker-Prager plastic parameters to a Mohr-Coulomb
- model using 
-\family typewriter
-fit_mohr_coulomb
-\family default
-.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="4" columns="4">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Parameter Value
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\alpha_{f}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\beta$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\alpha_{g}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-inscribed
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{2\sin\phi\left(k\right)}{\sqrt{3}\left(3-\sin\phi\left(k\right)\right)}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{6\bar{c}\left(k\right)\cos\phi_{0}}{\sqrt{3}\left(3-\sin\phi_{0}\right)}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{2\sin\psi(k)}{\sqrt{3}\left(3-\sin\psi\left(k\right)\right)}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-middle
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{\sin\phi\left(k\right)}{3}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\bar{c}\left(k\right)\cos\left(\phi_{0}\right)$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{\sin\psi\left(k\right)}{3}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-circumscribed
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{2\sin\phi\left(k\right)}{\sqrt{3}\left(3+\sin\phi\left(k\right)\right)}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{6\bar{c}\left(k\right)\cos\phi_{0}}{\sqrt{3}\left(3+\sin\phi_{0}\right)}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\frac{2\sin\psi(k)}{\sqrt{3}\left(3+\sin\psi\left(k\right)\right)}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-As for the viscoelastic models, it is convenient to separate the deformation
- into deviatoric and volumetric parts:
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}S_{ij}=\frac{1}{a_{E}}\left(^{t+\Delta t}e_{ij}-\phantom{}^{t+\Delta t}e_{ij}^{P}-e_{ij}^{I}\right)+S_{ij}^{I}=\frac{1}{a_{E}}\left(^{t+\Delta t}e_{ij}^{\prime}-\Delta e_{ij}^{P}\right)+S_{ij}^{I}\label{eq:105}\\
-^{t+\Delta t}P=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta-\phantom{}^{t+\Delta t}\theta^{P}-\theta^{I}\right)+P^{I}=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta^{\prime}-\Delta\theta^{P}\right)+P^{I}\:,\nonumber 
-\end{gather}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{gather}
-^{t+\Delta t}e_{ij}^{\prime}=\phantom{}^{t+\Delta t}e_{ij}-\phantom{}^{t}e_{ij}^{P}-e_{ij}^{I}\nonumber \\
-\Delta e_{ij}^{P}=\phantom{}^{t+\Delta t}e_{ij}^{P}-\phantom{}^{t}e_{ij}^{P}\nonumber \\
-^{t+\Delta t}\theta^{\prime}=\phantom{}^{t+\Delta t}\theta-\phantom{}^{t}\theta^{P}-\theta^{I}\nonumber \\
-\Delta\theta^{P}=\phantom{}^{t+\Delta t}\theta^{P}-\phantom{}^{t}\theta^{P}\:.\label{eq:106}
-\end{gather}
-
-\end_inset
-
-Since the plasticity is pressure-dependent, there are volumetric plastic
- strains, unlike the viscous strains in the previous section.
- From Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:99"
-
-\end_inset
-
-, the plastic strain increment is
-\begin_inset Formula 
-\begin{equation}
-\Delta\epsilon_{ij}^{P}=\lambda\frac{\partial\phantom{}^{t+\Delta t}g}{\partial\phantom{}^{t+\Delta t}\sigma_{ij}}=\lambda\alpha_{g}\delta_{ij}+\lambda\frac{^{t+\Delta t}S_{ij}}{2\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\:.\label{eq:107}
-\end{equation}
-
-\end_inset
-
-The volumetric part is
-\begin_inset Formula 
-\begin{equation}
-\Delta\theta^{P}=\frac{1}{3}\Delta\epsilon_{ii}^{P}=\lambda\alpha_{g}\:,\label{eq:108}
-\end{equation}
-
-\end_inset
-
-and the deviatoric part is
-\begin_inset Formula 
-\begin{equation}
-\Delta e_{ij}^{P}=\Delta\epsilon_{ij}^{P}-\Delta\epsilon_{m}^{P}\delta_{ij}=\lambda\frac{^{t+\Delta t}S_{ij}}{2\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\:.\label{eq:109}
-\end{equation}
-
-\end_inset
-
-The problem is reduced to solving for 
-\begin_inset Formula $\lambda$
-\end_inset
-
-.
- The procedure is different depending on whether hardening is included.
-\end_layout
-
-\begin_layout Subsubsection
-Drucker-Prager Elastoplastic With No Hardening (Perfectly Plastic)
-\end_layout
-
-\begin_layout Standard
-When there is no hardening (perfect plasticity), the Drucker-Prager elastoplasti
-c model may be parameterized with just three parameters, in addition to
- the normal elasticity parameters.
- The parameters 
-\family typewriter
-friction-angle
-\family default
-, 
-\family typewriter
-cohesion
-\family default
-, and 
-\family typewriter
-dilatation-angle
-\family default
- in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:druckerPrager"
-
-\end_inset
-
- refer respectively to 
-\begin_inset Formula $\phi$
-\end_inset
-
-, 
-\begin_inset Formula $\bar{c}$
-\end_inset
-
-, and 
-\begin_inset Formula $\psi$
-\end_inset
-
- in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:fit_mohr_coulomb"
-
-\end_inset
-
-.
- These are then converted to the properties 
-\begin_inset Formula $\alpha_{f}$
-\end_inset
-
- (
-\family typewriter
-alpha-yield
-\family default
-), 
-\begin_inset Formula $\beta$
-\end_inset
-
- (
-\family typewriter
-beta
-\family default
-), and 
-\begin_inset Formula $\alpha_{g}$
-\end_inset
-
- (
-\family typewriter
-alpha-flow
-\family default
-), as shown in Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:material-model-output"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-For perfect plasticity the yield and flow functions do not vary, and we
- can solve for 
-\begin_inset Formula $\lambda$
-\end_inset
-
- by substituting Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:109"
-
-\end_inset
-
- into Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:105"
-
-\end_inset
-
- and taking the scalar product of both sides:
-\begin_inset Formula 
-\begin{equation}
-\lambda=\sqrt{2}\,\phantom{}^{t+\Delta t}d-2a_{E}\sqrt{^{t+\Delta t}J_{2}^{\prime}}\:,\label{eq:110}
-\end{equation}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{equation}
-^{t+\Delta t}d^{2}=2a_{E}^{2}J_{2}^{\prime I}+2a_{E}S_{ij}^{I}\,\phantom{}^{t+\Delta t}e_{ij}^{\prime}+\phantom{}^{t+\Delta t}e_{ij}^{\prime}\,\phantom{}^{t+\Delta t}e_{ij}^{\prime}\:.\label{eq:111}
-\end{equation}
-
-\end_inset
-
-The second deviatoric stress invariant is therefore
-\begin_inset Formula 
-\begin{equation}
-\sqrt{^{t+\Delta t}J_{2}^{\prime}}=\frac{\sqrt{2}\,\phantom{}^{t+\Delta t}d-\lambda}{2a_{E}}\:,\label{eq:112}
-\end{equation}
-
-\end_inset
-
-and the pressure is computed from Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:105"
-
-\end_inset
-
- and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:108"
-
-\end_inset
-
- as:
-\begin_inset Formula 
-\begin{equation}
-^{t+\Delta t}P=\frac{^{t+\Delta t}I_{1}}{3}=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta^{\prime}-\lambda\alpha_{g}\right)+P^{I}\:.\label{eq:113}
-\end{equation}
-
-\end_inset
-
-We then use the yield condition (
-\begin_inset Formula $^{t+\Delta t}f=0$
-\end_inset
-
-) and substitute for the stress invariants at 
-\begin_inset Formula $t+\Delta t$
-\end_inset
-
- to obtain:
-\begin_inset Formula 
-\begin{equation}
-\lambda=\frac{2a_{E}a_{m}\left(\frac{3\alpha_{f}}{a_{m}}\phantom{}^{t+\Delta t}\theta^{\prime}+\frac{^{t+\Delta t}d}{\sqrt{2}a_{E}}-\beta\bar{c}\right)}{6\alpha_{f}\alpha_{g}a_{E}+a_{m}}\:.\label{eq:114}
-\end{equation}
-
-\end_inset
-
-Since 
-\begin_inset Formula $\lambda$
-\end_inset
-
- is now known, we can substitute 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:112"
-
-\end_inset
-
- into 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:109"
-
-\end_inset
-
- to obtain
-\begin_inset Formula 
-\begin{equation}
-^{t+\Delta t}S_{ij}=\frac{\Delta e_{ij}^{P}\left(\sqrt{2}\,\phantom{\,}^{t+\Delta t}d-\lambda\right)}{\lambda a_{E}}\:.\label{eq:115}
-\end{equation}
-
-\end_inset
-
-Substituting this into Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:105"
-
-\end_inset
-
-, we obtain the deviatoric plastic strain increment:
-\begin_inset Formula 
-\begin{equation}
-\Delta e_{ij}^{P}=\frac{\lambda}{\sqrt{2}\,\phantom{}^{t+\Delta t}d}\left(^{t+\Delta t}e_{ij}^{\prime}+a_{E}S_{ij}^{I}\right)\:.\label{eq:116}
-\end{equation}
-
-\end_inset
-
-We then use Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:108"
-
-\end_inset
-
- and the second line of Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:105"
-
-\end_inset
-
- to obtain the volumetric plastic strains and the pressure, and we use 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:116"
-
-\end_inset
-
- and the first line of Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:105"
-
-\end_inset
-
- to obtain the deviatoric plastic strains and the deviatoric stresses.
-\end_layout
-
-\begin_layout Standard
-In certain cases where the mean stress is tensile, it is possible that the
- flow rule will not allow the stresses to project back to the yield surface,
- since they would project beyond the tip of the cone.
- Although this stress state is not likely to be encountered for quasi-static
- tectonic problems, it can occur for dynamic problems.
- One simple solution is to redefine the plastic multiplier, 
-\begin_inset Formula $\lambda$
-\end_inset
-
-.
- We do this by taking the smaller of the values yielded by Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:114"
-
-\end_inset
-
- or by the following relation:
-\begin_inset Formula 
-\begin{equation}
-\lambda=\sqrt{2}\,\phantom{}^{t+\Delta t}d\:.\label{eq:127}
-\end{equation}
-
-\end_inset
-
-This is equivalent to setting the second deviatoric stress invariant to
- zero in Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:110"
-
-\end_inset
-
-.
- By default, PyLith does not allow such tensile yield, since this would
- generally represent an error in problem setup for tectonic problems; however,
- for cases where such behavior is necessary, the material flag 
-\family typewriter
-allow_tensile_yield
-\family default
- may be set to 
-\family typewriter
-True
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-To compute the elastoplastic tangent matrix we begin by writing Equation
- 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:105"
-
-\end_inset
-
- as a single expression in terms of stress and strain vectors:
-\begin_inset Formula 
-\begin{equation}
-^{t+\Delta t}\sigma_{i}=\frac{1}{a_{E}}\left(^{t+\Delta t}e_{i}^{\prime}-\Delta e_{i}^{P}\right)+S_{i}^{I}+\frac{R_{i}}{a_{m}}\left(^{t+\Delta t}\theta^{\prime}-\Delta\theta^{P}\right)+P^{I}\label{eq:117}
-\end{equation}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{gather}
-R_{i}=1\:;\; i=1,2,3\label{eq:118}\\
-R_{i}=0\:;\; i=4,5,6\:.\nonumber 
-\end{gather}
-
-\end_inset
-
-The elastoplastic tangent matrix is then given by
-\begin_inset Formula 
-\begin{equation}
-C_{ij}^{EP}=\frac{\partial\phantom{}^{t+\Delta t}\sigma_{i}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{a_{E}}\left(\frac{\partial\phantom{}^{t+\Delta t}e_{i}^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}-\frac{\partial\Delta e_{i}^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)+\frac{R_{i}}{a_{m}}\left(\frac{\partial\phantom{}^{t+\Delta t}\theta^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}-\frac{\partial\Delta\theta^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)\:.\label{eq:119}
-\end{equation}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-From Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:16"
-
-\end_inset
-
- and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:106"
-
-\end_inset
-
-, we have
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\phantom{}^{t+\Delta t}e_{i}^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{3}\left[\begin{array}{cccccc}
-2 & -1 & -1 & 0 & 0 & 0\\
--1 & 2 & -1 & 0 & 0 & 0\\
--1 & -1 & 2 & 0 & 0 & 0\\
-0 & 0 & 0 & 3 & 0 & 0\\
-0 & 0 & 0 & 0 & 3 & 0\\
-0 & 0 & 0 & 0 & 0 & 3
-\end{array}\right]\:,\label{eq:120}
-\end{equation}
-
-\end_inset
-
-and from Equations 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:15"
-
-\end_inset
-
- and 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:106"
-
-\end_inset
-
- we have
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\phantom{}^{t+\Delta t}\theta^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{R_{j}}{3}\:.\label{eq:121}
-\end{equation}
-
-\end_inset
-
-From Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:116"
-
-\end_inset
-
- we have
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\Delta e_{i}^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{\sqrt{2}\,\phantom{}^{t+\Delta t}d}\left[\left(^{t+\Delta t}e_{i}^{\prime}+a_{E}S_{i}^{I}\right)\left(\frac{\partial\lambda}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}-\frac{\lambda}{\phantom{}^{t+\Delta t}d}\frac{\partial\phantom{}^{t+\Delta t}d}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)+\lambda\frac{\partial\phantom{}^{t+\Delta t}e_{i}^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right]\:.\label{eq:122}
-\end{equation}
-
-\end_inset
-
-The derivative of 
-\begin_inset Formula $^{t+\Delta t}d$
-\end_inset
-
- is
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\phantom{}^{t+\Delta t}d}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{a_{E}T_{j}^{I}+\phantom{}^{t+\Delta t}E_{j}}{\phantom{}^{t+\Delta t}d}\:,\label{eq:123}
-\end{equation}
-
-\end_inset
-
-where
-\begin_inset Formula 
-\begin{align}
-T_{j}^{I} & =S_{j}^{I}\;\mathrm{and}\;\phantom{}^{t+\Delta t}E_{j}=\phantom{}^{t+\Delta t}e_{j}^{\prime}\:;\; j=1,2,3\nonumber \\
-T_{j}^{I} & =2S_{j}^{I}\;\mathrm{and}\;\phantom{}^{t+\Delta t}E_{j}=2\phantom{}^{t+\Delta t}e_{j}^{\prime}\:;\; j=4,5,6\:.\label{eq:124}
-\end{align}
-
-\end_inset
-
-The derivative of 
-\begin_inset Formula $^{t+\Delta t}\lambda$
-\end_inset
-
- is a function of derivatives already computed:
-\begin_inset Formula 
-\begin{align}
-\frac{\partial\lambda}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}} & =\frac{2a_{E}a_{m}}{6\alpha_{f}\alpha_{g}a_{E}+a_{m}}\left(\frac{3\alpha_{f}}{a_{m}}\frac{\partial\phantom{}^{t+\Delta t}\theta^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}+\frac{1}{\sqrt{2}a_{E}}\frac{\partial\phantom{}^{t+\Delta t}d}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)\nonumber \\
- & =\frac{2a_{E}a_{m}}{6\alpha_{f}\alpha_{g}a_{E}+a_{m}}\left(\frac{\alpha_{f}R_{j}}{a_{m}}+\frac{a_{E}T_{j}^{I}+\phantom{}^{t+\Delta t}E_{j}}{\sqrt{2}a_{E}\phantom{}^{t+\Delta t}d}\right)\:.\label{eq:125}
-\end{align}
-
-\end_inset
-
-Finally, from Equation 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "eq:108"
-
-\end_inset
-
-, the derivative of the volumetric plastic strain increment is:
-\begin_inset Formula 
-\begin{equation}
-\frac{\partial\Delta\theta^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\alpha_{g}\frac{\partial\lambda}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\:.\label{eq:126}
-\end{equation}
-
-\end_inset
-
-
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:druckerPrager"
-
-\end_inset
-
-Values in spatial database used as parameters in the Drucker-Prager elastoplasti
-c model with perfect plasticity.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="7" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Parameter
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-Name in Spatial Database
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{p}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-vp
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $v_{s}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-vs
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\rho$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-density
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\phi$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-friction-angle
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\bar{c}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-cohesion
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\begin_inset Formula $\psi$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-dilatation-angle
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-In addition to the properties available for every material, the properties
- for the Drucker-Prager model also includes:
-\end_layout
-
-\begin_layout Description
-fit_mohr_coulomb Fit to the yield surface to the Mohr-Coulomb model (default
- is inscribed).
-\end_layout
-
-\begin_layout Description
-allow_tensile_yield If true, allow yield beyond tensile strength; otherwise
- an error message will occur when the model fails beyond the tensile strength
- (default is false).
-\end_layout
-
-\begin_layout Standard
-An example of setting these parameters in a 
-\family typewriter
-.cfg
-\family default
- file is:
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent]
-\end_layout
-
-\begin_layout LyX-Code
-materials = [plastic]
-\end_layout
-
-\begin_layout LyX-Code
-materials.plastic = pylith.materials.DruckerPrager3D
-\end_layout
-
-\begin_layout LyX-Code
-
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent.materials.plastic]
-\end_layout
-
-\begin_layout LyX-Code
-fit_mohr_coulomb = inscribed ; default
-\end_layout
-
-\begin_layout LyX-Code
-allow_tensile_yield = False ; default
-\end_layout
-
-\begin_layout Section
-Initial State Variables
-\end_layout
-
-\begin_layout Standard
-In many problems of interest, the state variables describing a material
- model may already have nonzero values prior to the application of any boundary
- conditions.
- For problems in geophysics, the most common example is a problem that includes
- the effects of gravitational body forces.
- In the real earth, rocks were emplaced and formed under the influence of
- gravity.
- When performing numerical simulations, however, it is not possible to represent
- the entire time history of rock emplacement.
- Instead, gravity must be ``turned on'' at the beginning of the simulation.
- Unfortunately, this results in unrealistic amounts of deformation at the
- beginning of a simulation.
- An alternative is to provide initial state variables for the region under
- consideration.
- This allows the specification of a set of state variables that is consistent
- with the prior application of gravitational body forces.
- In a more general sense, initial values for state variables may be used
- to provide values that are consistent with any set of conditions that occurred
- prior to the beginning of a simulation.
- The current release of PyLith allows the specification of initial stresses,
- strains, and state variables for all materials; however, the initial state
- variables are not presently used.
- The reason for this is that the present version of PyLith always performs
- an elastic solution prior to performing the time-dependent solution, and
- the state variables are not used in the elastic solution.
- In future versions of PyLith, the solution of the elastic problem will
- be optional, so that initial state variables may be used.
-\end_layout
-
-\begin_layout Subsection
-Specification of Initial State Variables
-\end_layout
-
-\begin_layout Standard
-Since state variables are specific to a given material, initial values for
- state variables are specified as part of the material description.
- By default, initial state values are not used.
- To override this behavior, specify a spatial database for the initial stress,
- strain, and/or state variables as in the example from the tutorial in Section
- 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "sec:Tutorial-3d-hex8"
-
-\end_inset
-
-:
-\end_layout
-
-\begin_layout LyX-Code
-[pylithapp.timedependent.materials.elastic]
-\end_layout
-
-\begin_layout LyX-Code
-db_initial_stress = spatialdata.spatialdb.SimpleDB
-\end_layout
-
-\begin_layout LyX-Code
-db_initial_stress.iohandler.filename = initial_stress.spatialdb
-\end_layout
-
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float table
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\noindent
-\align center
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Values in spatial database for initial state variables for 3D problems.
- 2D problems use only the relevant values.
- Note that initial stress and strain are available for all material models.
- Some models have additional state variables (Table 
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:material-model-output"
-
-\end_inset
-
-) and initial values for these may also be provided.
-\end_layout
-
-\end_inset
-
-
-\begin_inset Tabular
-<lyxtabular version="3" rows="3" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="middle" width="0.85in">
-<column alignment="center" valignment="middle" width="2.47in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\series bold
-State Variable
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-\align center
-
-\series bold
-Values in Spatial Database
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-initial stress
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-stress-xx, stress-yy, stress-zz, stress-xy, stress-yz, stress-xz
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-initial strain
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\family typewriter
-strain-xx, strain-yy, strain-zz, strain-xy, strain-yz, strain-xz
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_body
-\end_document
+#LyX 2.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 413
+\begin_document
+\begin_header
+\textclass book
+\begin_preamble
+\newcommand\Prefix[3]{\vphantom{#3}#1#2#3}
+\end_preamble
+\use_default_options false
+\maintain_unincluded_children false
+\language english
+\language_package default
+\inputencoding latin1
+\fontencoding global
+\font_roman default
+\font_sans default
+\font_typewriter default
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
+
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry true
+\use_amsmath 1
+\use_esint 0
+\use_mhchem 1
+\use_mathdots 1
+\cite_engine basic
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\use_refstyle 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\leftmargin 1in
+\topmargin 1in
+\rightmargin 1in
+\bottommargin 2in
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\quotes_language english
+\papercolumns 1
+\papersides 2
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Chapter
+\begin_inset CommandInset label
+LatexCommand label
+name "cha:material:models"
+
+\end_inset
+
+Material Models
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+
+\backslash
+raggedbottom
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Specifying Material Properties
+\end_layout
+
+\begin_layout Standard
+Associating material properties with a given cell involves several steps.
+ 
+\end_layout
+
+\begin_layout Enumerate
+In the mesh generation process, assign a material identifier to each cell.
+\end_layout
+
+\begin_layout Enumerate
+Define material property groups corresponding to each material identifier.
+\end_layout
+
+\begin_layout Enumerate
+Set the parameters for each material group using 
+\family typewriter
+.cfg
+\family default
+ or 
+\family typewriter
+.pml
+\family default
+ files and/or command-line arguments.
+\end_layout
+
+\begin_layout Enumerate
+Specify the spatial variation in material property parameters using a spatial
+ database file.
+\end_layout
+
+\begin_layout Subsection
+Setting the Material Identifier
+\end_layout
+
+\begin_layout Standard
+Each cell in the finite-element mesh must have a material identifier.
+ This integer value is associated with a bulk material model.
+ The parameters of the material model need not be uniform for cells with
+ the same material identifier.
+ The bulk constitutive model and numerical integration (quadrature) scheme
+ will, however, be the same for all cells with the same material identifier
+ value.
+ The material identifier is set during the mesh generation process.
+ The procedure for assigning this integer value to a cell depends on the
+ mesh generator.
+ For example, in the PyLith mesh ASCII format, the identifiers are listed
+ in the cells group using the material-id data; in CUBIT materials are defined
+ using blocks; in LaGriT materials are defined by the attribute 
+\family typewriter
+imt1
+\family default
+ and the mregion command.
+\end_layout
+
+\begin_layout Subsection
+Material Property Groups
+\end_layout
+
+\begin_layout Standard
+The material property group associates a material model (label for the material,
+ a bulk constitutive model, and parameters for the constitutive model) with
+ a material identifier.
+ In previous versions of PyLith it was necessary to specify containers that
+ defined the number of groups and associated information for each group.
+ This was necessary because previous versions of Pyre did not support dynamic
+ arrays of components, and it was necessary to predefine these arrays.
+ More recent versions of Pythia do support this, however, and it is now
+ possible to define material property groups using a 
+\family typewriter
+.cfg
+\family default
+ file, a 
+\family typewriter
+.pml
+\family default
+ file, or on the command-line.
+ User-defined containers are no longer necessary, and the predefined containers
+ are no longer available (or necessary).
+ If a set of material groups is not specified, a single material model is
+ used for the entire problem.
+ See Sections 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Tutorial-3d-hex8"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Tutorial-3d-tet4"
+
+\end_inset
+
+ for examples that demonstrate how to specify more than one material model.
+\end_layout
+
+\begin_layout Subsection
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:material:parameters"
+
+\end_inset
+
+Material Parameters
+\end_layout
+
+\begin_layout Standard
+For each material group, there is a single component defining the material
+ model to be used.
+ The default material model is 
+\family typewriter
+elasticisotropic3d
+\family default
+.
+ For each material model, the available components are:
+\end_layout
+
+\begin_layout Description
+db_properties Spatial database specifying the spatial variation in the parameter
+s of the bulk constitutive model (default is a SimpleDB).
+\end_layout
+
+\begin_layout Description
+db_initial_state Spatial database specifying the spatial variation in the
+ initial variables (default is none).
+\end_layout
+
+\begin_layout Description
+output The output manager used for outputting material information.
+\end_layout
+
+\begin_layout Description
+quadrature Numerical integration scheme used in integrating fields over
+ each cell.
+\end_layout
+
+\begin_layout Standard
+The properties for each material group are:
+\end_layout
+
+\begin_layout Description
+id This is the material identifier that matches the integer value assigned
+ to each cell in the mesh generation process.
+\end_layout
+
+\begin_layout Description
+label Name or label for the material.
+ This is used in error and diagnostic reports.
+\end_layout
+
+\begin_layout Standard
+An example of setting these parameters in a 
+\family typewriter
+.cfg
+\family default
+ file for a problem with two material groups is:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent]
+\end_layout
+
+\begin_layout LyX-Code
+materials = [elastic,viscoelastic]
+\end_layout
+
+\begin_layout LyX-Code
+ 
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent.materials.elastic]
+\end_layout
+
+\begin_layout LyX-Code
+label = Elastic material
+\end_layout
+
+\begin_layout LyX-Code
+id = 1
+\end_layout
+
+\begin_layout LyX-Code
+db_properties.iohandler.filename = mat_elastic.spatialdb
+\end_layout
+
+\begin_layout LyX-Code
+quadrature.cell = pylith.feassemble.FIATLagrange
+\end_layout
+
+\begin_layout LyX-Code
+quadrature.cell.dimension = 3
+\end_layout
+
+\begin_layout LyX-Code
+ 
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent.materials.viscoelastic]
+\end_layout
+
+\begin_layout LyX-Code
+label = Viscoelastic material
+\end_layout
+
+\begin_layout LyX-Code
+id = 2
+\end_layout
+
+\begin_layout LyX-Code
+db_properties.iohandler.filename = mat_viscoelastic.spatialdb
+\end_layout
+
+\begin_layout LyX-Code
+quadrature.cell = pylith.feassemble.FIATLagrange
+\end_layout
+
+\begin_layout LyX-Code
+quadrature.cell.dimension = 3
+\end_layout
+
+\begin_layout Standard
+These settings correspond to the the problem in Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Tutorial-3d-hex8"
+
+\end_inset
+
+.
+ The parameters for the bulk constitutive models are specified using the
+ spatial databases 
+\family typewriter
+mat_elastic.spatialdb
+\family default
+ and 
+\family typewriter
+mat_viscoelastic.spatialdb
+\family default
+.
+ Refer to the discussion of each material model to find the parameters that
+ must be specified in the spatial database.
+ Appendix 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Spatialdata:SimpleIOAscii"
+
+\end_inset
+
+ describes the format of the SimpleDB spatial database files.
+ In a more realistic problem, a different spatial database, and possibly
+ a different material model, would be used for each material group.
+\end_layout
+
+\begin_layout Standard
+By default the output manager for a material does not output any information.
+ This behavior may be changed by specifying output files for each material
+ group:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent.materials.elastic.output]
+\end_layout
+
+\begin_layout LyX-Code
+cell_filter = pylith.meshio.CellFilterAvgMesh
+\end_layout
+
+\begin_layout LyX-Code
+writer.filename = dislocation-elastic.vtk
+\end_layout
+
+\begin_layout LyX-Code
+ 
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent.materials.viscoelastic.output]
+\end_layout
+
+\begin_layout LyX-Code
+cell_filter = pylith.meshio.CellFilterAvgMesh
+\end_layout
+
+\begin_layout LyX-Code
+writer.filename = dislocation-viscoelastic.vtk
+\end_layout
+
+\begin_layout Standard
+These settings again correspond to the problem in Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Tutorial-3d-hex8"
+
+\end_inset
+
+.
+ The specification of a state variable base filename (
+\family typewriter
+writer.filename
+\family default
+ settings) will cause two files to be created for each material group: an
+ info file, which describes the material properties used in the model, and
+ a state variables file, which contains the state variable information.
+ Note that the material properties described by the info file are the properties
+ used internally by PyLith.
+ They do not necessarily correspond to properties specified by the user.
+ If the problem has more than one time step, a state variable output file
+ will be created for each requested time step.
+ We have requested that the values be averaged over each cell.
+ Otherwise, output would be produced for each quadrature point, which can
+ cause problems with some visualization packages.
+ For this example problem, the material is three-dimensional isotropic elastic,
+ and is thus described by only three material properties (
+\begin_inset Formula $\lambda$
+\end_inset
+
+, 
+\begin_inset Formula $\mu$
+\end_inset
+
+, 
+\begin_inset Formula $\rho$
+\end_inset
+
+), as described below.
+ These properties are output by default.
+ Other material models require additional parameters, and if users want
+ these to be output, they must be specified.
+ Similarly, other material models require state variables in addition to
+ the default stress and strain variables that are used by all material models.
+ Additional output may be requested for a material model, as in this example
+ (see Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Tutorial-Two-hexahedra"
+
+\end_inset
+
+):
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent.materials.material.output]
+\end_layout
+
+\begin_layout LyX-Code
+cell_data_fields = [total_strain,viscous_strain,stress]
+\end_layout
+
+\begin_layout LyX-Code
+cell_info_fields = [mu,lambda,density,maxwell_time]
+\end_layout
+
+\begin_layout Standard
+The properties and state variables available for output in each material
+ model are listed in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:material-model-output"
+
+\end_inset
+
+.
+ The order of the state variables in the output arrays is given in Table
+ 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:material-model-statevars"
+
+\end_inset
+
+.
+ For the generalized Maxwell model, values of 
+\family typewriter
+shear_ratio
+\family default
+ and 
+\family typewriter
+maxwell_time
+\family default
+ are given for each Maxwell element in the model (there are presently three,
+ as described below).
+ Similarly, there are three sets of 
+\family typewriter
+viscous_strain
+\family default
+ values for the generalized Maxwell model.
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:material-model-output"
+
+\end_inset
+
+Properties and state variables available for output for existing material
+ models.
+ Physical properties are available for output as 
+\family typewriter
+cell_info_fields
+\family default
+ and state variables are available for output as 
+\family typewriter
+cell_data_fields
+\family default
+.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="4">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="top" width="1.5in">
+<column alignment="center" valignment="top" width="1.8in">
+<column alignment="center" valignment="top" width="1.5in">
+<column alignment="center" valignment="top" width="1in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Model
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Physical Properties
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+State Variables
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Requires nonlinear solver?
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Elastic
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+mu, lambda, density
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+total_strain, stress
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+No
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Maxwell Viscoelastic
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+mu, lambda, density, maxwell_time
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+total_strain,
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+stress, viscous_strain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+No
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Generalized Maxwell Viscoelastic
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+mu, lambda, density,
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+shear_ratio,
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+maxwell_time
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+total_strain, stress, viscous_strain_1,
+\begin_inset Newline newline
+\end_inset
+
+viscous_strain_2,
+\begin_inset Newline newline
+\end_inset
+
+viscous_strain_3
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+No
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Power-law Viscoelastic
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+mu, lambda, density,
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+reference_strain_rate, reference_stress,
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+power_law_exponent
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+total_strain, stress, viscous_strain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Yes
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Drucker-Prager Elastoplastic
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+mu, lambda, density, alpha_yield
+\family default
+,
+\family typewriter
+ beta, alpha_flow 
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+total_strain, stress, plastic_strain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Yes
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:material-model-statevars"
+
+\end_inset
+
+Order of components in tensor state-variables for material models.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="5" columns="4">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="top" width="1.25in">
+<column alignment="center" valignment="top" width="0.5in">
+<column alignment="center" valignment="top" width="1.25in">
+<column alignment="center" valignment="top" width="2.25in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+State Variable
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+1D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+2D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+3D
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+total_strain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xx}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{xy}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{zz}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{xy}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{yz}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{xz}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+stress
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\sigma_{xx}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\sigma_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{xy}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\sigma_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{zz}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{xy}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{yz}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{xz}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+viscous_strain, plastic_strain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xx}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{zz}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{xy}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{zz}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{xy}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{yz}$
+\end_inset
+
+, 
+\begin_inset Formula $\epsilon_{xz}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+stress4
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\sigma_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{zz}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{xy}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:material:output:components"
+
+\end_inset
+
+Order of components in tensor values in Xdmf files for 3D material models.
+ All nine tensor components are available even though the tensor is symmetric
+ with six independent components.
+ The order does not match the conventional ordering of a tensor because
+ we use the ordering given in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:material-model-statevars"
+
+\end_inset
+
+in the HDF5 file.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="7" columns="2">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="top" width="1.25in">
+<column alignment="center" valignment="top" width="2.25in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Index
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Component
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+0
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xx}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{xx}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+1, 3
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{yy}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{yy}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+2, 6
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{zz}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{zz}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+4
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xy}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{xy}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+5, 7
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{yz}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{yz}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+8
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\epsilon_{xz}$
+\end_inset
+
+, 
+\begin_inset Formula $\sigma_{xz}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Elastic Material Models
+\end_layout
+
+\begin_layout Standard
+The generalized form of Hooke's law relating stress and strain for linear
+ elastic materials is
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula 
+\begin{gather}
+\sigma_{ij}=C_{ijkl}\left(\epsilon_{kl}-\epsilon_{kl}^{I}\right)+\sigma_{ij}^{I}\,,\label{eq:1}
+\end{gather}
+
+\end_inset
+
+where we have included both initial strains and initial stresses, denoted
+ with the superscript 
+\shape slanted
+I
+\shape default
+.
+ Due to symmetry considerations, however, the 81 components of the elasticity
+ matrix are reduced to 21 independent components for the most general case
+ of anisotropic elasticity.
+ Representing the stress and strain in terms of vectors, the constitutive
+ relation may be written
+\begin_inset Formula 
+\begin{gather}
+\overrightarrow{\sigma}=\underline{C}\left(\vec{\epsilon}-\vec{\epsilon}^{I}\right)+\vec{\sigma}^{I},\label{eq:2}
+\end{gather}
+
+\end_inset
+
+where
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula 
+\begin{gather}
+\underline{C}=\left[\begin{array}{cccccc}
+C_{1111} & C_{1122} & C_{1133} & C_{1112} & C_{1123} & C_{1113}\\
+C_{1122} & C_{2222} & C_{2233} & C_{2212} & C_{2223} & C_{2213}\\
+C_{1133} & C_{2233} & C_{3333} & C_{3312} & C_{3323} & C_{3313}\\
+C_{1112} & C_{2212} & C_{3312} & C_{1212} & C_{1223} & C_{1213}\\
+C_{1123} & C_{2223} & C_{3323} & C_{1223} & C_{2323} & C_{2313}\\
+C_{1113} & C_{2213} & C_{3313} & C_{1213} & C_{2313} & C_{1313}
+\end{array}\right]\:.\label{eq:3}
+\end{gather}
+
+\end_inset
+
+For the case of isotropic elasticity, the number of independent components
+ reduces to two, and the model can be characterized by two parameters, Lame's
+ constants 
+\begin_inset Formula $\mu$
+\end_inset
+
+ and 
+\begin_inset Formula $\lambda$
+\end_inset
+
+.
+ Lame's constants are related to the density (
+\begin_inset Formula $\rho$
+\end_inset
+
+), shear wave speed (
+\begin_inset Formula $v_{s}$
+\end_inset
+
+), and compressional wave speed (
+\begin_inset Formula $v_{p}$
+\end_inset
+
+) via
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula 
+\begin{equation}
+\begin{aligned}\mu= & \rho v_{s}^{2}\\
+\lambda= & \rho v_{p}^{2}-2\mu
+\end{aligned}
+\label{eq:4}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Values in spatial database used as parameters in the elastic material constituti
+ve models.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="4" columns="2">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="middle" width="0.85in">
+<column alignment="center" valignment="middle" width="2.47in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Parameter
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\align center
+
+\series bold
+Name in Spatial Database
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{p}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vp
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{s}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vs
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\rho$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+density
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+1D Elastic Material Models
+\end_layout
+
+\begin_layout Standard
+In 1D we can write Hooke's law as 
+\begin_inset Formula $\sigma_{11}=C_{1111}\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{11}^{I}$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Subsubsection
+Elastic 
+\begin_inset Quotes eld
+\end_inset
+
+Linear
+\begin_inset Quotes erd
+\end_inset
+
+ Strain
+\end_layout
+
+\begin_layout Standard
+For purely 1D axial deformation 
+\begin_inset Formula $C_{1111}=\lambda+2\mu$
+\end_inset
+
+, so we have
+\begin_inset Formula 
+\begin{equation}
+\sigma_{11}=(\lambda+2\mu)\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{11}^{I},\label{eq:5}
+\end{equation}
+
+\end_inset
+
+with
+\begin_inset Formula 
+\begin{gather}
+\sigma_{22}=\sigma_{33}=\lambda\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{22}^{I},\nonumber \\
+\sigma_{12}=\sigma_{23}=\sigma_{13}=0.\label{eq:6}
+\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsubsection
+Elastic 
+\begin_inset Quotes eld
+\end_inset
+
+Linear
+\begin_inset Quotes erd
+\end_inset
+
+ Stress
+\end_layout
+
+\begin_layout Standard
+For deformation where the tractions are confined to the axial direction,
+ 
+\begin_inset Formula $C_{1111}=\frac{\mu(3\lambda+2\mu)}{\lambda+\mu}$
+\end_inset
+
+, so we have
+\begin_inset Formula 
+\begin{equation}
+\sigma_{11}=\frac{\mu(3\lambda+2\mu)}{\lambda+\mu}\left(\epsilon_{11}-\epsilon_{11}^{I}\right)+\sigma_{11}^{I},\label{eq:7}
+\end{equation}
+
+\end_inset
+
+with
+\begin_inset Formula 
+\begin{gather}
+\epsilon_{22}=\epsilon_{33}=-\frac{\lambda}{2(\lambda+\mu)}\epsilon_{11}+\epsilon_{22}^{I},\label{eq:8}\\
+\sigma_{22}=\sigma_{33}=\sigma_{12}=\sigma_{23}=\sigma_{13}=0.\nonumber 
+\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+2D Elastic Material Models
+\end_layout
+
+\begin_layout Standard
+In 2D we can write Hooke's law as
+\begin_inset Formula 
+\begin{gather}
+\left[\begin{array}{c}
+\sigma_{11}\\
+\sigma_{22}\\
+\sigma_{12}
+\end{array}\right]=\left[\begin{array}{ccc}
+C_{1111} & C_{1122} & C_{1112}\\
+C_{1122} & C_{2222} & C_{2212}\\
+C_{1112} & C_{2212} & C_{1212}
+\end{array}\right]\left[\begin{array}{c}
+\epsilon_{11}-\epsilon_{11}^{I}\\
+\epsilon_{22}-\epsilon_{22}^{I}\\
+\epsilon_{12}-\epsilon_{12}^{I}
+\end{array}\right]+\left[\begin{array}{c}
+\sigma_{11}^{I}\\
+\sigma_{22}^{I}\\
+\sigma_{12}^{I}
+\end{array}\right]\:.\label{eq:9}
+\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsubsection
+Elastic Plane Strain
+\end_layout
+
+\begin_layout Standard
+If the gradient in deformation with respect to the 
+\begin_inset Formula $x_{3}$
+\end_inset
+
+ axis is zero, then 
+\begin_inset Formula $\epsilon_{33}=\epsilon_{13}=\epsilon_{23}=0$
+\end_inset
+
+ and plane strain conditions apply, so we have 
+\begin_inset Formula 
+\begin{gather}
+\left[\begin{array}{c}
+\sigma_{11}\\
+\sigma_{22}\\
+\sigma_{12}
+\end{array}\right]=\left[\begin{array}{ccc}
+\lambda+2\mu & \lambda & 0\\
+\lambda & \lambda+2\mu & 0\\
+0 & 0 & 2\mu
+\end{array}\right]\left[\begin{array}{c}
+\epsilon_{11}-\epsilon_{11}^{I}\\
+\epsilon_{22}-\epsilon_{22}^{I}\\
+\epsilon_{12}-\epsilon_{12}^{I}
+\end{array}\right]+\left[\begin{array}{c}
+\sigma_{11}^{I}\\
+\sigma_{22}^{I}\\
+\sigma_{12}^{I}
+\end{array}\right]\:.\label{eq:10}
+\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsubsection
+Elastic Plane Stress
+\end_layout
+
+\begin_layout Standard
+If the 
+\begin_inset Formula $x_{1}x_{2}$
+\end_inset
+
+ plane is traction free, then 
+\begin_inset Formula $\sigma_{33}=\sigma_{13}=\sigma_{23}=0$
+\end_inset
+
+ and plane stress conditions apply, so we have
+\begin_inset Formula 
+\begin{gather}
+\left[\begin{array}{c}
+\sigma_{11}\\
+\sigma_{22}\\
+\sigma_{12}
+\end{array}\right]=\left[\begin{array}{ccc}
+\frac{4\mu(\lambda+\mu)}{\lambda+2\mu} & \frac{2\mu\lambda}{\lambda+2\mu} & 0\\
+\frac{2\mu\lambda}{\lambda+2} & \frac{4\mu(\lambda+\mu)}{\lambda+2\mu} & 0\\
+0 & 0 & 2\mu
+\end{array}\right]\left[\begin{array}{c}
+\epsilon_{11}-\epsilon_{11}^{I}\\
+\epsilon_{22}-\epsilon_{22}^{I}\\
+\epsilon_{12}-\epsilon_{12}^{I}
+\end{array}\right]+\left[\begin{array}{c}
+\sigma_{11}^{I}\\
+\sigma_{22}^{I}\\
+\sigma_{12}^{I}
+\end{array}\right]\:,\label{eq:11}
+\end{gather}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{equation}
+\begin{gathered}\epsilon_{33}=-\frac{\lambda}{\lambda+2\mu}(\epsilon_{11}+\epsilon_{22})+\epsilon_{33}^{I}\\
+\epsilon_{13}=\epsilon_{23}=0\,.
+\end{gathered}
+\label{eq:12}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+3D Elastic Material Models
+\end_layout
+
+\begin_layout Subsubsection
+Isotropic
+\end_layout
+
+\begin_layout Standard
+For this case the stress-strain matrix, 
+\begin_inset Formula $\underline{C}$
+\end_inset
+
+, becomes
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula 
+\begin{gather}
+\underline{C}=\left[\begin{array}{cccccc}
+\lambda+2\mu & \lambda & \lambda & 0 & 0 & 0\\
+\lambda & \lambda+2\mu & \lambda & 0 & 0 & 0\\
+\lambda & \lambda & \lambda+2\mu & 0 & 0 & 0\\
+0 & 0 & 0 & 2\mu & 0 & 0\\
+0 & 0 & 0 & 0 & 2\mu & 0\\
+0 & 0 & 0 & 0 & 0 & 2\mu
+\end{array}\right]\:.\label{eq:13}
+\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:Viscoelastic-Materials"
+
+\end_inset
+
+Viscoelastic Materials
+\end_layout
+
+\begin_layout Standard
+At present, there are six viscoelastic material models available in PyLith
+ (Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:Viscoelastic-models-available"
+
+\end_inset
+
+ and Figure 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:Material-models"
+
+\end_inset
+
+).
+ Future code versions may include alternative formulations for the various
+ material models (Appendix 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "cha:Alternative-Formulations"
+
+\end_inset
+
+), so that users may use the most efficient formulation for a particular
+ problem.
+ Note that both 2D and 3D viscoelastic models are described, but we present
+ below only the 3D formulations.
+ The 2D formulations are easily obtained from the plane strain definition.
+ The one aspect of the 2D formulations that is different is the specification
+ of initial stresses.
+ Since 2D models only have three tensor components, it is not possible to
+ specify the normal stress in the out-of-plane direction (
+\begin_inset Formula $\sigma_{33}$
+\end_inset
+
+), which is generally nonzero, using the same method as the other tensor
+ components.
+ To allow for the specification of this initial stress component, an additional
+ state variable corresponding to 
+\begin_inset Formula $\sigma_{33}^{I}$
+\end_inset
+
+ is provided (
+\family typewriter
+stress_zz_initial
+\family default
+).
+ Note that this is not an issue for the 2D elastic models, since this initial
+ stress component is not needed.
+ For the PowerLawPlaneStrain model, all four of the stress components are
+ needed, so a 4-component stress state variable (
+\family typewriter
+stress4
+\family default
+) is provided in addition to the normal 3-component 
+\family typewriter
+stress
+\family default
+ state variable (see Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:material-model-output"
+
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:Viscoelastic-models-available"
+
+\end_inset
+
+Available viscoelastic materials for PyLith.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="7" columns="2">
+<features tabularvalignment="middle">
+<column alignment="left" valignment="top" width="2.85in">
+<column alignment="center" valignment="top" width="2.47in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Model Name
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+MaxwellPlaneStrain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Plane strain Maxwell material with linear viscous rheology
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+GenMaxwellPlaneStrain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Plane strain generalized Maxwell material (3 Maxwell models in parallel)
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+PowerLawPlaneStrain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Plane strain Maxwell material with power-law viscous rheology
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+MaxwellIsotropic3D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Isotropic Maxwell material with linear viscous rheology
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+GenMaxwellIsotropic3D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Generalized model consisting of 3 Maxwell models in parallel
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+PowerLaw3D
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Isotropic Maxwell material with power-law viscous rheology
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float figure
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+	filename figs/pylith-materials.eps
+	scale 75
+
+\end_inset
+
+
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "fig:Material-models"
+
+\end_inset
+
+Spring-dashpot 1D representations of the available 3D elastic and 2D/3D
+ viscoelastic material models for PyLith.
+ The top model is a linear elastic model, the middle model is a Maxwell
+ model, and the bottom model is a generalized Maxwell model.
+ For the generalized Maxwell model, 
+\begin_inset Formula $\lambda$
+\end_inset
+
+ and 
+\begin_inset Formula $\mu_{tot}$
+\end_inset
+
+ are specified for the entire model, and then the ratio 
+\begin_inset Formula $\mu_{i}/\mu_{tot}$
+\end_inset
+
+ is specified for each Maxwell model.
+ For the power-law model, the linear dashpot in the Maxwell model is replaced
+ by a nonlinear dashpot obeying a power-law.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Definitions
+\end_layout
+
+\begin_layout Standard
+In the following sections, we use a combination of vector and index notation
+ (our notation conventions are shown in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:Mathematical-notation"
+
+\end_inset
+
+).
+ When using index notation, we use the common convention where repeated
+ indices indicate summation over the range of the index.
+ We also make frequent use of the scalar inner product.
+ The scalar inner product of two second-order tensors may be written
+\begin_inset Formula 
+\begin{gather}
+\underline{a}\cdot\underline{b}=a_{ij}b_{ij}\,.\label{eq:14}
+\end{gather}
+
+\end_inset
+
+Although the general constitutive relations are formulated in terms of the
+ stress and strain, we frequently make use of the deviatoric stress and
+ strain in our formulation.
+ We first define the mean stress, 
+\begin_inset Formula $P$
+\end_inset
+
+, and mean strain, 
+\begin_inset Formula $\theta$
+\end_inset
+
+:
+\begin_inset Formula 
+\begin{gather}
+P=\frac{\sigma_{ii}}{3}\,,\,\,\,\,\theta=\frac{\epsilon_{ii}}{3}\,,\label{eq:15}
+\end{gather}
+
+\end_inset
+
+where the 
+\begin_inset Formula $\sigma_{ii}$
+\end_inset
+
+ and 
+\begin_inset Formula $\epsilon_{ii}$
+\end_inset
+
+ represent the trace of the stress and strain tensors, respectively.
+ We then define the deviatoric components of stress and strain as
+\begin_inset Formula 
+\begin{gather}
+S_{ij}=\sigma_{ij}-P\delta_{ij}\,,\,\,\,\, e_{ij}=\epsilon_{ij}-\theta\delta_{ij}\,,\label{eq:16}
+\end{gather}
+
+\end_inset
+
+where 
+\begin_inset Formula $\delta_{ij}$
+\end_inset
+
+ is the Kronecker delta.
+ Using the deviatoric components, we define the effective stress, 
+\begin_inset Formula $\overline{\sigma}$
+\end_inset
+
+, the second deviatoric stress invariant, 
+\begin_inset Formula $J_{2}^{\prime}$
+\end_inset
+
+, the effective deviatoric strain, 
+\begin_inset Formula $\overline{e}$
+\end_inset
+
+, and the second deviatoric strain invariant, 
+\begin_inset Formula $L_{2}^{\prime}$
+\end_inset
+
+, as
+\begin_inset Formula 
+\begin{gather}
+\overline{\sigma}=\sqrt{\frac{3}{2}\underline{S}\cdot\underline{S}}\,\,\nonumber \\
+J_{2}^{\prime}=\frac{1}{2}\underline{S}\cdot\underline{S}\,.\label{eq:17}\\
+\overline{e}=\sqrt{\frac{2}{3}\underline{e}\cdot\underline{e}}\,\,\nonumber \\
+L_{2}^{\prime}=\frac{1}{2}\underline{e}\cdot\underline{e}\,\,\nonumber 
+\end{gather}
+
+\end_inset
+
+Due to the symmetry of the stress and strain tensors, it is sometimes convenient
+ to represent them as vectors:
+\begin_inset Formula 
+\begin{gather}
+\overrightarrow{\sigma^{T}}=\left[\begin{array}{cccccc}
+\sigma_{11} & \sigma_{22} & \sigma_{33} & \sigma_{12} & \sigma_{23} & \sigma_{31}\end{array}\right]\label{eq:18}\\
+\overrightarrow{\epsilon^{T}}=\left[\begin{array}{cccccc}
+\epsilon_{11} & \epsilon_{22} & \epsilon_{33} & \epsilon_{12} & \epsilon_{23} & \epsilon_{31}\end{array}\right]\:.\nonumber 
+\end{gather}
+
+\end_inset
+
+Note that when taking the scalar inner product of two tensors represented
+ as vectors, it is necessary to double the products representing off-diagonal
+ terms.
+\end_layout
+
+\begin_layout Standard
+For quantities evaluated over a specific time period, we represent the initial
+ time as a prefixed subscript and the end time as a prefixed superscript.
+ In cases where the initial time does not appear, it is understood to be
+ 
+\begin_inset Formula $-\infty$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:Mathematical-notation"
+
+\end_inset
+
+Mathematical notation used in this section.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="3">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" width="0">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Index notation
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Vector notation
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Description
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $a_{i}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\overrightarrow{a}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Vector field a
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $a_{ij}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\underline{a}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Second order tensor field a
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+Linear Viscoelastic Models
+\end_layout
+
+\begin_layout Standard
+Linear viscoelastic models are obtained by various combinations of a linear
+ elastic spring and a linear viscous dashpot in series or parallel.
+ The simplest example is probably the linear Maxwell model, which consists
+ of a spring in series with a dashpot, as shown in Figure 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:Material-models"
+
+\end_inset
+
+.
+ For a one-dimensional model, the response is given by
+\begin_inset Formula 
+\begin{equation}
+\frac{d\epsilon_{Total}}{dt}=\frac{d\epsilon_{D}}{dt}+\frac{d\epsilon_{S}}{dt}=\frac{\sigma}{\eta}+\frac{1}{E}\frac{d\sigma}{dt}\:,
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $\epsilon_{Total}$
+\end_inset
+
+ is the total strain, 
+\begin_inset Formula $\epsilon_{D}$
+\end_inset
+
+ is the strain in the dashpot, 
+\begin_inset Formula $\epsilon_{S}$
+\end_inset
+
+ is the strain in the spring, 
+\begin_inset Formula $\sigma$
+\end_inset
+
+ is the stress, 
+\begin_inset Formula $\eta$
+\end_inset
+
+ is the viscosity of the dashpot, and 
+\begin_inset Formula $E$
+\end_inset
+
+ is the spring constant.
+ When a Maxwell material is subjected to constant strain, the stresses relax
+ exponentially with time.
+ When a Maxwell material is subjected to a constant stress, there is an
+ immediate elastic strain, corresponding to the response of the spring,
+ and a viscous strain that increases linearly with time.
+ Since the strain response is unbounded, the Maxwell model actually represents
+ a fluid.
+\end_layout
+
+\begin_layout Standard
+Another simple model is the Kelvin-Voigt model, which consists of a spring
+ in parallel with a dashpot.
+ In this case, the one-dimensional response is given by
+\begin_inset Formula 
+\begin{equation}
+\sigma\left(t\right)=E\epsilon\left(t\right)+\eta\frac{d\epsilon\left(t\right)}{dt}\:.
+\end{equation}
+
+\end_inset
+
+As opposed to the Maxwell model, which represents a fluid, the Kelvin-Voigt
+ model represents a solid undergoing reversible, viscoelastic strain.
+ If the material is subjected to a constant stress, it deforms at a decreasing
+ rate, gradually approaching the strain that would occur for a purely elastic
+ material.
+ When the stress is released, the material gradually relaxes back to its
+ undeformed state.
+\end_layout
+
+\begin_layout Standard
+The most general form of linear viscoelastic model is the generalized Maxwell
+ model, which consists of a spring in parallel with a number of Maxwell
+ models (see Figure 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:Material-models"
+
+\end_inset
+
+).
+ Using this model, it is possible to represent a number of simpler viscoelastic
+ models.
+ For example, a simple Maxwell model is obtained by setting the elastic
+ constants of all springs to zero, with the exception of the spring contained
+ in the first Maxwell model (
+\begin_inset Formula $\mu_{1}$
+\end_inset
+
+).
+ Similarly, the Kelvin-Voigt model may be obtained by setting the elastic
+ constants 
+\begin_inset Formula $\mu_{2}=\mu_{3}=0$
+\end_inset
+
+, and setting 
+\begin_inset Formula $\mu_{1}=\infty$
+\end_inset
+
+ (or a very large number).
+\end_layout
+
+\begin_layout Subsection
+Formulation for Generalized Maxwell Models
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Formulation-for-Gen-Max"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+As described above, the generalized Maxwell viscoelastic model consists
+ of a number of Maxwell linear viscoelastic models in parallel with a spring,
+ as shown in Figure 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "fig:Material-models"
+
+\end_inset
+
+.
+ PyLith includes the specific case of a spring in parallel with three Maxwell
+ models.
+ As described in the previous paragraph, a number of common material models
+ may be obtained from this model by setting the shear moduli of various
+ springs to zero or infinity (or a large number), such as the Maxwell model,
+ the Kelvin model, and the standard linear solid.
+ We follow formulations similar to those used by Zienkiewicz and Taylor
+ 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Zienkiewicz:Taylor:2000"
+
+\end_inset
+
+ and Taylor 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Taylor:2003"
+
+\end_inset
+
+.
+ In this formulation, we specify the total shear modulus of the model (
+\begin_inset Formula $\mu_{tot}$
+\end_inset
+
+) and Lame's constant (
+\begin_inset Formula $\lambda$
+\end_inset
+
+).
+ We then provide the fractional shear modulus for each Maxwell element spring
+ in the model.
+ It is not necessary to specify the fractional modulus for 
+\begin_inset Formula $\mu_{0}$
+\end_inset
+
+, since this is obtained by subtracting the sum of the other ratios from
+ 1.
+ Note that the sum of all these fractions must equal 1.
+ We use a similar formulation for our linear Maxwell viscoelastic model,
+ but in that case 
+\begin_inset Formula $\mu_{0}$
+\end_inset
+
+ is always zero and we only use a single Maxwell model.
+ The parameters defining the standard Maxwell model are shown in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:linearMaxwell"
+
+\end_inset
+
+, and those defining the generalized Maxwell model are shown in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:genMaxwell"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+As for all our viscoelastic models, the volumetric strain is completely
+ elastic, and the viscoelastic deformation may be expressed purely in terms
+ of the deviatoric components:
+\begin_inset Formula 
+\begin{equation}
+\underline{S}=2\mu_{tot}\left[\mu_{0}\underline{e}+\sum_{i=1}^{N}\mu_{i}\underline{q}^{i}-\underline{e}^{I}\right]+\underline{S}^{I}\,;\; P=3K\left(\theta-\theta^{I}\right)+P^{I}\,,\label{eq:19}
+\end{equation}
+
+\end_inset
+
+where 
+\shape slanted
+K
+\shape default
+ is the bulk modulus, 
+\begin_inset Formula $N$
+\end_inset
+
+ is the number of Maxwell models, and the variable 
+\begin_inset Formula $\underline{q}^{i}$
+\end_inset
+
+ follows the evolution equations
+\begin_inset Formula 
+\begin{equation}
+\underline{\dot{q}}^{i}+\frac{1}{\lambda_{i}}\underline{q}^{i}=\underline{\dot{e}}.\label{eq:20}
+\end{equation}
+
+\end_inset
+
+The 
+\begin_inset Formula $\lambda_{i}$
+\end_inset
+
+ are the relaxation times for each Maxwell model.
+\end_layout
+
+\begin_layout Standard
+An alternative to the differential equation form above is an integral equation
+ form expressed in terms of the relaxation modulus function.
+ This function is defined in terms of an idealized experiment in which,
+ at time labeled zero (
+\begin_inset Formula $t=0$
+\end_inset
+
+), a specimen is subjected to a constant strain, 
+\begin_inset Formula $\underline{e}_{0}$
+\end_inset
+
+, and the stress response, 
+\begin_inset Formula $\underline{S}\left(t\right)$
+\end_inset
+
+, is measured.
+ For a linear material we obtain:
+\begin_inset Formula 
+\begin{equation}
+\underline{S}\left(t\right)=2\mu\left(t\right)\left(\underline{e}_{0}-\underline{e}^{I}\right)+\underline{S}^{I}\,,\label{eq:21}
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $\mu\left(t\right)$
+\end_inset
+
+ is the shear relaxation modulus function.
+ Using linearity and superposition for an arbitrary state of strain yields
+ an integral equation:
+\begin_inset Formula 
+\begin{equation}
+\underline{S}\left(t\right)=\intop_{-\infty}^{t}\mu\left(t-\tau\right)\underline{\dot{e}}\, d\tau\,.\label{eq:22}
+\end{equation}
+
+\end_inset
+
+If we assume the modulus function in Prony series form we obtain
+\begin_inset Formula 
+\begin{equation}
+\mu\left(t\right)=\mu_{tot}\left(\mu_{0}+\sum_{i=1}^{N}\mu_{i}\exp\frac{-t}{\lambda_{i}}\right)\,,\label{eq:23}
+\end{equation}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{equation}
+\mu_{0}+\sum_{i=1}^{N}\mu_{i}=1\,.\label{eq:24}
+\end{equation}
+
+\end_inset
+
+With the form in Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:23"
+
+\end_inset
+
+, the integral equation form is identical to the differential equation form.
+\end_layout
+
+\begin_layout Standard
+If we assume the material is undisturbed until a strain is suddenly applied
+ at time zero, we can divide the integral into
+\begin_inset Formula 
+\begin{equation}
+\intop_{-\infty}^{t}\left(\cdot\right)\, d\tau=\intop_{-\infty}^{0^{-}}\left(\cdot\right)\, d\tau+\intop_{0^{-}}^{0^{+}}\left(\cdot\right)\, d\tau+\intop_{0^{+}}^{t}\left(\cdot\right)\, d\tau\,.\label{eq:27}
+\end{equation}
+
+\end_inset
+
+The first term is zero, the second term includes a jump term associated
+ with 
+\begin_inset Formula $\underline{e}_{0}$
+\end_inset
+
+ at time zero, and the last term covers the subsequent history of strain.
+ Applying this separation to Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:22"
+
+\end_inset
+
+,
+\begin_inset Formula 
+\begin{equation}
+\underline{S}\left(t\right)=2\mu\left(t\right)\left(\underline{e}_{0}-\underline{e}^{I}\right)+\underline{S}^{I}+2\int_{0}^{t}\mu\left(t-\tau\right)\underline{\dot{e}}\left(\tau\right)\, d\tau\,,\label{eq:28}
+\end{equation}
+
+\end_inset
+
+where we have left the sign off of the lower limit on the integral.
+\end_layout
+
+\begin_layout Standard
+Substituting Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:23"
+
+\end_inset
+
+ into 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:28"
+
+\end_inset
+
+, we obtain
+\begin_inset Formula 
+\begin{equation}
+\underline{S}\left(t\right)=2\mu_{tot}\left\{ \mu_{0}\underline{e}\left(t\right)+\sum_{i=1}^{N}\left[\mu_{i}\exp\frac{-t}{\lambda_{i}}\left(\underline{e}_{0}+\intop_{0}^{t}\exp\frac{t}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\right)\right]-\underline{e}^{I}\right\} +\underline{S}^{I}\,.\label{eq:29}
+\end{equation}
+
+\end_inset
+
+We then split each integral into two ranges: from 0 to 
+\begin_inset Formula $t_{n}$
+\end_inset
+
+, and from 
+\begin_inset Formula $t_{n}$
+\end_inset
+
+ to 
+\begin_inset Formula $t$
+\end_inset
+
+, and define each integral as
+\begin_inset Formula 
+\begin{equation}
+\underline{i}_{i}^{1}\left(t\right)=\intop_{0}^{t}\exp\frac{\tau}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\,.\label{eq:30}
+\end{equation}
+
+\end_inset
+
+The integral then becomes
+\begin_inset Formula 
+\begin{equation}
+\underline{i}_{i}^{1}\left(t\right)=\underline{i}_{i}^{1}\left(t_{n}\right)+\intop_{t_{n}}^{t}\exp\frac{\tau}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\,.\label{eq:31}
+\end{equation}
+
+\end_inset
+
+Including the negative exponential multiplier:
+\begin_inset Formula 
+\begin{equation}
+\underline{h}_{i}^{1}\left(t\right)=\exp\frac{-t}{\lambda_{i}}\underline{i}_{i}^{1}\,.\label{eq:32}
+\end{equation}
+
+\end_inset
+
+Then
+\begin_inset Formula 
+\begin{equation}
+\underline{h}_{i}^{1}\left(t\right)=\exp\frac{-\Delta t}{\lambda_{i}}\underline{h}_{i}^{1}\left(t_{n}\right)+\Delta\underline{h}_{i}\,,\label{eq:33}
+\end{equation}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{equation}
+\Delta\underline{h}_{i}=\exp\frac{-t}{\lambda_{i}}\intop_{t_{n}}^{t}\exp\frac{\tau}{\lambda_{i}}\underline{\dot{e}}\left(\tau\right)\, d\tau\,.\label{eq:34}
+\end{equation}
+
+\end_inset
+
+Approximating the strain rate as constant over each time step, the solution
+ may be found as
+\begin_inset Formula 
+\begin{equation}
+\Delta\underline{h}_{i}=\frac{\lambda_{i}}{\Delta t}\left(1-\exp\frac{-\Delta t}{\lambda_{i}}\right)\left(\underline{e}-\underline{e}_{n}\right)=\Delta h_{i}\left(\underline{e}-\underline{e}_{n}\right)\,.\label{eq:35}
+\end{equation}
+
+\end_inset
+
+The approximation is singular for zero time steps, but a series expansion
+ may be used for small time-step sizes:
+\begin_inset Formula 
+\begin{equation}
+\Delta h_{i}\approx1-\frac{1}{2}\left(\frac{\Delta t}{\lambda_{i}}\right)+\frac{1}{3!}\left(\frac{\Delta t}{\lambda_{i}}\right)^{2}-\frac{1}{4!}\left(\frac{\Delta t}{\lambda_{i}}\right)^{3}+\cdots\,.\label{eq:36}
+\end{equation}
+
+\end_inset
+
+This converges with only a few terms.
+ With this formulation, the constitutive relation now has the simple form:
+\begin_inset Formula 
+\begin{equation}
+\underline{S}\left(t\right)=2\mu_{tot}\left(\mu_{0}\underline{e}\left(t\right)+\sum_{i=1}^{N}\mu_{i}\underline{h}_{i}^{1}\left(t\right)-\underline{e}^{I}\right)+\underline{S}^{I}\,.\label{eq:37}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+We need to compute the tangent constitutive matrix when forming the stiffness
+ matrix.
+ In addition to the volumetric contribution to the tangent constitutive
+ matrix, we require the deviatoric part:
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\underline{S}}{\partial\underline{\epsilon}}=\frac{\partial\underline{S}}{\partial\underline{e}}\frac{\partial\underline{e}}{\partial\underline{\epsilon}}\,,\label{eq:38}
+\end{equation}
+
+\end_inset
+
+where the second derivative on the right may be easily deduced from Equation
+ 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:16"
+
+\end_inset
+
+.
+ The other derivative is given by
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\underline{S}}{\partial\underline{e}}=2\mu_{tot}\left[\mu_{0}\underline{I}+\sum_{i=1}^{N}\mu_{i}\frac{\partial\underline{h}_{i}^{1}}{\partial\underline{e}}\right]\,,\label{eq:39}
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $\underline{I}$
+\end_inset
+
+ is the identity matrix.
+ From Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:33"
+
+\end_inset
+
+ through 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:35"
+
+\end_inset
+
+, the derivative inside the brackets is
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\underline{h}_{i}^{1}}{\partial\underline{e}}=\Delta h_{i}\left(\Delta t\right)\underline{I}\,.\label{eq:40}
+\end{equation}
+
+\end_inset
+
+The complete deviatoric tangent relation is then
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\underline{S}}{\partial\underline{\epsilon}}=2\mu_{tot}\left[\mu_{0}+\sum_{i=1}^{N}\mu_{i}\Delta h_{i}\left(\Delta t\right)\right]\frac{\partial\underline{e}}{\partial\underline{\epsilon}}\,.\label{eq:41}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+We use this formulation for both our Maxwell and generalized Maxwell viscoelasti
+c models.
+ For the Maxwell model, 
+\begin_inset Formula $\mu_{0}=0$
+\end_inset
+
+ and 
+\begin_inset Formula $N=1$
+\end_inset
+
+.
+ For the generalized Maxwell model, 
+\begin_inset Formula $N=3.$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:linearMaxwell"
+
+\end_inset
+
+Values in spatial database used as parameters in the linear Maxwell viscoelastic
+ material constitutive model.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="5" columns="2">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="middle" width="0.85in">
+<column alignment="center" valignment="middle" width="2.47in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Parameter
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\align center
+
+\series bold
+Name in Spatial Database
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{p}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vp
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{s}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vs
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\rho$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+density
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\eta$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+viscosity
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:genMaxwell"
+
+\end_inset
+
+Values in spatial database used as parameters in the generalized linear
+ Maxwell viscoelastic material constitutive model.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="10" columns="2">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="middle" width="0.85in">
+<column alignment="center" valignment="middle" width="2.47in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Parameter
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\align center
+
+\series bold
+Name in Spatial Database
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{p}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vp
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{s}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vs
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\rho$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+density
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\mu_{1}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+shear-ratio-1
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\mu_{2}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+shear-ratio-2
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\mu_{3}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+shear-ratio-3
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\eta_{1}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+viscosity-1
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\eta_{2}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+viscosity-2
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\eta_{3}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+viscosity-3
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Effective-Stress-Formulations-Viscoelastic"
+
+\end_inset
+
+Effective Stress Formulations for Viscoelastic Materials
+\end_layout
+
+\begin_layout Standard
+As an alternative to the approach outlined above, an effective stress function
+ formulation 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Kojic:Bathe:1987"
+
+\end_inset
+
+ may be employed for both a linear Maxwell model and a power-law Maxwell
+ model.
+ Note that this formulation is not presently employed for linear viscoelastic
+ models (see Appendix 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "cha:Alternative-Formulations"
+
+\end_inset
+
+), but it is used for power-law viscoelastic materials.
+ For the viscoelastic materials considered here, the viscous volumetric
+ strains are zero (incompressible flow), and it is convenient to separate
+ the general stress-strain relationship at time 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+ into deviatoric and volumetric parts:
+\begin_inset Formula 
+\begin{gather}
+\phantom{}{}^{t+\Delta t}\underline{S}=\frac{E}{1+\nu}\left(^{t+\Delta t}\underline{e}-\phantom{}^{t+\Delta t}\underline{e}^{C}-\underline{e}^{I}\right)+\underline{S}^{I}=\frac{1}{a_{E}}\left(^{t+\Delta t}\underline{e}-\phantom{}^{t+\Delta t}\underline{e}^{C}-\underline{e}^{I}\right)\label{eq:42}\\
+^{t+\Delta t}P=\frac{E}{1-2\nu}\left(^{t+\Delta t}\theta-\theta^{I}\right)+P^{I}=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta-\theta^{I}\right)\:,\nonumber 
+\end{gather}
+
+\end_inset
+
+where 
+\begin_inset Formula $^{t+\Delta t}\underline{e}$
+\end_inset
+
+ is the total deviatoric strain, 
+\begin_inset Formula $^{t+\Delta t}\underline{e}^{C}$
+\end_inset
+
+ is the total viscous strain, 
+\begin_inset Formula $\underline{e}^{I}$
+\end_inset
+
+ is the initial deviatoric strain, 
+\begin_inset Formula $^{t+\Delta t}P$
+\end_inset
+
+ is the pressure, 
+\begin_inset Formula $^{t+\Delta t}\theta$
+\end_inset
+
+ is the mean strain evaluated at time 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+ , and 
+\begin_inset Formula $\theta^{I}$
+\end_inset
+
+ is the initial mean strain.
+ The initial deviatoric stress and initial pressure are given by 
+\begin_inset Formula $\underline{S}^{I}$
+\end_inset
+
+ and 
+\begin_inset Formula $P^{I}$
+\end_inset
+
+, respectively.
+ The topmost equation in Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:42"
+
+\end_inset
+
+ may also be written as
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}\underline{S}=\frac{1}{a_{E}}(^{t+\Delta t}\underline{e}^{\prime}-\underline{\Delta e}^{C})+\underline{S}^{I}\,,\label{eq:43}
+\end{gather}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}\underline{e}^{\prime}=\phantom{}^{t+\Delta t}\underline{e}-\phantom{}^{t}\underline{e}^{C}-\underline{e}^{I}\,\,,\,\,\,\underline{\Delta e}^{C}=\phantom{}^{t+\Delta t}\underline{e}^{C}-\phantom{}^{t}\underline{e}^{C}\,.\label{eq:44}
+\end{gather}
+
+\end_inset
+
+The creep strain increment is approximated using
+\begin_inset Formula 
+\begin{gather}
+\underline{\Delta e}^{C}=\Delta t\phantom{}^{\tau}\gamma\phantom{}^{\tau}\underline{S}\,,\label{eq:45}
+\end{gather}
+
+\end_inset
+
+where, using the 
+\begin_inset Formula $\alpha$
+\end_inset
+
+-method of time integration,
+\begin_inset Formula 
+\begin{gather}
+^{\tau}\underline{S}=(1-\alpha)_{I}^{t}\underline{S}+\alpha\phantom{}_{I}^{t+\Delta t}\underline{S}+\underline{S}^{I}=(1-\alpha)^{t}\underline{S}+\alpha\phantom{}^{t+\Delta t}\underline{S}\,\,,\label{eq:46}
+\end{gather}
+
+\end_inset
+
+and
+\begin_inset Formula 
+\begin{gather}
+^{\tau}\gamma=\frac{3\Delta\overline{e}^{C}}{2\Delta t\phantom{}^{\tau}\overline{\sigma}}\,\,,\label{eq:47}
+\end{gather}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{gather}
+\Delta\overline{e}^{C}=\sqrt{\frac{2}{3}\underline{\Delta e}^{C}\cdot\underline{\Delta e}^{C}}\label{eq:48}
+\end{gather}
+
+\end_inset
+
+and
+\begin_inset Formula 
+\begin{gather}
+^{\tau}\overline{\sigma}=(1-\alpha)_{I}^{t}\overline{\sigma}+\alpha\phantom{}_{I}^{t+\Delta t}\overline{\sigma}+\overline{\sigma}^{I}=\sqrt{3\phantom{}^{\tau}J_{2}^{\prime}}\,\,.\label{eq:49}
+\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+To form the global stiffness matrix, it is necessary to provide a relationship
+ for the viscoelastic tangent material matrix relating stress and strain.
+ If we use vectors composed of the stresses and tensor strains, this relationshi
+p is
+\begin_inset Formula 
+\begin{gather}
+\underline{C}^{VE}=\frac{\partial\phantom{}^{t+\Delta t}\overrightarrow{\sigma}}{\partial\phantom{}^{t+\Delta t}\overrightarrow{\epsilon}}\,\,.\label{eq:55}
+\end{gather}
+
+\end_inset
+
+In terms of the vectors, we have
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}\sigma_{i}=\phantom{}^{t+\Delta t}S_{i}+\phantom{}^{t+\Delta t}P\,\,;\,\,\, i=1,2,3\label{eq:56}\\
+^{t+\Delta t}\sigma_{i}=\phantom{}^{t+\Delta t}S_{i}\,;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, i=4,5,6\nonumber 
+\end{gather}
+
+\end_inset
+
+Therefore,
+\begin_inset Formula 
+\begin{gather}
+C_{ij}^{VE}=C_{ij}^{\prime}+\frac{1}{3a_{m}}\,;\,\,1\leq i,j\leq3\,\,.\label{eq:57}\\
+C_{ij}^{VE}=C_{ij}^{\prime}\,;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\textrm{otherwise}\nonumber 
+\end{gather}
+
+\end_inset
+
+Using the chain rule,
+\begin_inset Formula 
+\begin{gather}
+C_{ij}^{\prime}=\frac{\partial\phantom{}^{t+\Delta t}S_{i}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{\partial\phantom{}^{t+\Delta t}S_{i}}{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}\frac{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}{\partial\phantom{}^{t+\Delta t}e_{l}}\frac{\partial\phantom{}^{t+\Delta t}e_{l}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\,\,.\label{eq:58}
+\end{gather}
+
+\end_inset
+
+From Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:44"
+
+\end_inset
+
+, we obtain
+\begin_inset Formula 
+\begin{gather}
+\frac{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}{\partial\phantom{}^{t+\Delta t}e_{l}}=\delta_{kl}\,\,,\label{eq:59}
+\end{gather}
+
+\end_inset
+
+and from Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:16"
+
+\end_inset
+
+:
+\begin_inset Formula 
+\begin{gather}
+\frac{\partial\phantom{}^{t+\Delta t}e_{l}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{3}\left[\begin{array}{ccc}
+2 & -1 & -1\\
+-1 & 2 & -1\\
+-1 & -1 & 2
+\end{array}\right];\,\,1\leq l,j\leq3\label{eq:60}\\
+\frac{\partial\phantom{}^{t+\Delta t}e_{l}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\delta_{lj}\,\,;\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\textrm{otherwise.}\nonumber 
+\end{gather}
+
+\end_inset
+
+The first term of Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:58"
+
+\end_inset
+
+ depends on the particular constitutive relationship, and the complete tangent
+ matrix may then be obtained from Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:57"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Subsubsection
+Power-Law Maxwell Viscoelastic Material
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Power-Law-Maxwell-Viscoelastic"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Laboratory results on rock rheology are typically performed using a triaxial
+ experiment, and the creep data are fit to a power-law equation of the form
+ (e.g., 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Kirby:Kronenberg:1987"
+
+\end_inset
+
+):
+\begin_inset Formula 
+\begin{equation}
+\dot{\epsilon}_{11}^{C}=A_{E}\exp\left(\frac{-Q}{RT}\right)\left(\sigma_{1}-\sigma_{3}\right)^{n}=A_{E}\exp\left(\frac{-Q}{RT}\right)\sigma_{d}^{n}\:,\label{eq:64}
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $\dot{\epsilon}_{11}^{C}$
+\end_inset
+
+ is the strain rate in the direction of the maximum principal stress 
+\begin_inset Formula $\left(\sigma_{1}\right)$
+\end_inset
+
+, 
+\begin_inset Formula $A_{E}$
+\end_inset
+
+ is the experimentally-derived pre-exponential constant, 
+\begin_inset Formula $Q$
+\end_inset
+
+ is the activation enthalpy, 
+\begin_inset Formula $R$
+\end_inset
+
+ is the universal gas constant, 
+\begin_inset Formula $T$
+\end_inset
+
+ is the absolute temperature, 
+\begin_inset Formula $n$
+\end_inset
+
+ is the power-law exponent, 
+\begin_inset Formula $\sigma_{3}\:\left(=\sigma_{2}\right)$
+\end_inset
+
+ is equal to the confining pressure, and 
+\begin_inset Formula $\sigma_{d}$
+\end_inset
+
+ is the differential stress.
+ To properly formulate the flow law, it must be generalized so that the
+ results are not influenced by the experiment type or the choice of coordinate
+ systems (e.g., 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Paterson:1994"
+
+\end_inset
+
+).
+ The flow law may then be generalized in terms of the deviatoric stress
+ and strain rate invariants:
+\begin_inset Formula 
+\begin{equation}
+\sqrt{\dot{L}_{2}^{\prime C}}=A_{M}\exp\left(\frac{-Q}{RT}\right)\sqrt{J_{2}^{\prime}}^{n}\:,\label{eq:65}
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $A_{M}$
+\end_inset
+
+ is now a pre-exponential constant used in the formulation for modeling.
+ In practice, it is necessary to compute each strain rate component using
+ the flow law.
+ This is accomplished using:
+\begin_inset Formula 
+\begin{equation}
+\dot{e}_{ij}^{C}=A_{M}\exp\left(\frac{-Q}{RT}\right)\sqrt{J_{2}^{\prime}}^{n-1}S_{ij}\:.\label{eq:66}
+\end{equation}
+
+\end_inset
+
+Note that Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:65"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:66"
+
+\end_inset
+
+ are consistent, since Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:65"
+
+\end_inset
+
+ may be obtained from Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:66"
+
+\end_inset
+
+ by taking the scalar inner product of both sides, multiplying by 1/2, and
+ taking the square root.
+\end_layout
+
+\begin_layout Standard
+In a triaxial experiment with confining pressure 
+\begin_inset Formula $P_{c}$
+\end_inset
+
+, we have
+\begin_inset Formula 
+\begin{gather}
+\sigma_{2}=\sigma_{3}=P_{c}\nonumber \\
+\sigma_{1}=\sigma_{1}^{app}\label{eq:67}\\
+P=\frac{\sigma_{1}+2P_{c}}{3}\:,\nonumber 
+\end{gather}
+
+\end_inset
+
+where 
+\begin_inset Formula $\sigma_{1}^{app}$
+\end_inset
+
+ is the applied load.
+ The deviatoric stresses are then:
+\begin_inset Formula 
+\begin{gather}
+S_{1}=\frac{2}{3}\left(\sigma_{1}-P_{c}\right)\nonumber \\
+S_{2}=S_{3}=-\frac{1}{3}\left(\sigma_{1}-P_{c}\right)\:.\label{eq:68}
+\end{gather}
+
+\end_inset
+
+This gives
+\begin_inset Formula 
+\begin{gather}
+S_{1}=\frac{2}{3}\left(\sigma_{1}-\sigma_{3}\right)=\frac{2}{3}\sigma_{d}\nonumber \\
+S_{2}=S_{3}=-\frac{1}{3}\left(\sigma_{1}-\sigma_{3}\right)=-\frac{1}{3}\sigma_{d}\:.\label{eq:69}
+\end{gather}
+
+\end_inset
+
+In terms of the second deviatoric stress invariant, we then have
+\begin_inset Formula 
+\begin{equation}
+\sqrt{J_{2}^{\prime}}=\frac{\sigma_{d}}{\sqrt{3}}\:.\label{eq:70}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Under the assumption that the creep measured in the laboratory experiments
+ is incompressible, we have
+\begin_inset Formula 
+\begin{gather}
+\dot{e}_{11}^{C}=\dot{\epsilon}_{11}\nonumber \\
+\dot{e}_{22}^{C}=\dot{e}_{33}^{C}=-\frac{1}{2}\dot{\epsilon}_{11}\:.\label{eq:71}
+\end{gather}
+
+\end_inset
+
+In terms of the second deviatoric strain rate invariant we then have
+\begin_inset Formula 
+\begin{equation}
+\sqrt{\dot{L}_{2}^{\prime C}}=\frac{\sqrt{3}}{2}\dot{\epsilon}_{11}\:.\label{eq:72}
+\end{equation}
+
+\end_inset
+
+Substituting Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:70"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:72"
+
+\end_inset
+
+ into Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:64"
+
+\end_inset
+
+, we obtain
+\begin_inset Formula 
+\begin{equation}
+\sqrt{\dot{L}_{2}^{\prime C}}=A_{E}\frac{\sqrt{3}^{n+1}}{2}\exp\left(\frac{-Q}{RT}\right)\sqrt{J_{2}^{\prime}}^{n}\:,\label{eq:73}
+\end{equation}
+
+\end_inset
+
+and therefore,
+\begin_inset Formula 
+\begin{equation}
+A_{M}=\frac{\sqrt{3}^{n+1}}{2}A_{E}\:.\label{eq:74}
+\end{equation}
+
+\end_inset
+
+When the exponential factor is included, we define a new parameter:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Formula 
+\begin{equation}
+A_{T}=A_{M}\exp\left(\frac{-Q}{RT}\right)=\frac{\sqrt{3}^{n+1}}{2}A_{E}\exp\left(\frac{-Q}{RT}\right)\:.\label{eq:75}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+There is a problem with the usage of parameters 
+\begin_inset Formula $A_{E}$
+\end_inset
+
+, 
+\begin_inset Formula $A_{M}$
+\end_inset
+
+, and 
+\begin_inset Formula $A_{T}$
+\end_inset
+
+.
+ Since the dimensions of these parameters are dependent on the value of
+ the power-law exponent, they are not really constants.
+ In addition to being logically inconsistent, this presents problems when
+ specifying parameters for PyLith, since the power-law exponent must be
+ known before the units can be determined.
+ An alternative way of writing the flow rule is (e.g., 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Prentice:1968"
+
+\end_inset
+
+): 
+\begin_inset Formula 
+\begin{equation}
+\frac{\sqrt{\dot{L}_{2}^{\prime C}}}{\dot{e}_{0}}=\left(\frac{\sqrt{J_{2}^{\prime}}}{S_{0}}\right)^{n},\label{eq:76}
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $\dot{e}_{0}$
+\end_inset
+
+ and 
+\begin_inset Formula $S_{0}$
+\end_inset
+
+ are reference values for the strain rate and deviatoric stress.
+ This means that
+\begin_inset Formula 
+\begin{equation}
+\frac{\dot{e}_{0}}{S_{0}^{n}}=A_{T}\:.\label{eq:77}
+\end{equation}
+
+\end_inset
+
+Users must therefore specify three parameters for a power-law material.
+ The properties 
+\family typewriter
+reference-strain-rate
+\family default
+, 
+\family typewriter
+reference-stress
+\family default
+, and 
+\family typewriter
+power-law-exponent
+\family default
+ in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:powerLaw"
+
+\end_inset
+
+ refer to 
+\begin_inset Formula $\dot{e}_{0}$
+\end_inset
+
+, 
+\begin_inset Formula $S_{0}$
+\end_inset
+
+, and 
+\begin_inset Formula $n$
+\end_inset
+
+, respectively.
+ To specify the power-law properties for PyLith using laboratory results,
+ the user must first compute 
+\begin_inset Formula $A_{T}$
+\end_inset
+
+ using Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:75"
+
+\end_inset
+
+.
+ Then, values for 
+\begin_inset Formula $\dot{e}_{0}$
+\end_inset
+
+ and 
+\begin_inset Formula $S_{0}$
+\end_inset
+
+ must be provided.
+ The simplest method is probably to assume a reasonable value for the reference
+ strain rate, and then compute 
+\begin_inset Formula $S_{0}$
+\end_inset
+
+ as
+\begin_inset Formula 
+\begin{equation}
+S_{0}=\left(\frac{\dot{e}_{0}}{A_{T}}\right)^{\frac{1}{n}}\:.\label{eq:78}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+A utility code (
+\family typewriter
+powerlaw_gendb.py
+\family default
+) is provided to convert laboratory results to the properties used by PyLith.
+ To use the code, users must specify the spatial variation of 
+\begin_inset Formula $A_{E}$
+\end_inset
+
+, 
+\begin_inset Formula $Q$
+\end_inset
+
+, 
+\begin_inset Formula $n$
+\end_inset
+
+, and 
+\begin_inset Formula $T$
+\end_inset
+
+.
+ An additional parameter is given to define the units of 
+\begin_inset Formula $A_{E}$
+\end_inset
+
+.
+ The user then specifies either a reference stress or a reference strain
+ rate, and a database suitable for PyLith is generated.
+ This utility is described more fully in Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sub:Tutorial-Step08-Power-law"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+The flow law in component form is 
+\begin_inset Formula 
+\begin{equation}
+\dot{e}_{ij}^{C}=\frac{\dot{e}_{0}\sqrt{J_{2}^{\prime}}^{n-1}S_{ij}}{S_{0}^{n}}\:,\label{eq:79}
+\end{equation}
+
+\end_inset
+
+and the creep strain increment is approximated as
+\begin_inset Formula 
+\begin{gather}
+\underline{\Delta e}^{C}\approx\frac{\Delta t\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}\,^{\tau}\underline{S}}{S_{0}^{n}}=\frac{\Delta t\dot{e}_{0}\phantom{}^{\tau}\overline{\sigma}^{n-1}\,^{\tau}\underline{S}}{\sqrt{3}S_{0}^{n}}\,.\label{eq:80}
+\end{gather}
+
+\end_inset
+
+ Therefore,
+\begin_inset Formula 
+\begin{gather}
+\Delta\bar{e}^{C}\approx\frac{2\Delta t\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n}}{\sqrt{3}S_{0}^{n}}=\frac{2\Delta t\dot{e}_{0}\phantom{}^{\tau}\overline{\sigma}^{n}}{\sqrt{3}^{n+1}S_{0}^{n}}\,,\,\textrm{and}\,^{\tau}\gamma=\frac{\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}}{S_{0}^{n}}\,.\label{eq:81}
+\end{gather}
+
+\end_inset
+
+substituting Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:46"
+
+\end_inset
+
+, 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:80"
+
+\end_inset
+
+, and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:81"
+
+\end_inset
+
+ into 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:43"
+
+\end_inset
+
+, we obtain:
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}\underline{S}=\frac{1}{a_{E}}\left\{ ^{t+\Delta t}\underline{e}^{\prime}-\Delta t\phantom{}^{\tau}\gamma\left[\left(1-\alpha\right)^{t}\underline{S}+\alpha{}^{t+\Delta t}\underline{S}\right]\right\} +\underline{S}^{I}\,,\label{eq:82}
+\end{gather}
+
+\end_inset
+
+which may be rewritten:
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}\underline{S}\left(a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma\right)={}^{t+\Delta t}\underline{e}^{\prime}-\Delta t\phantom{}^{\tau}\gamma\left(1-\alpha\right)^{t}\underline{S}+a_{E}\underline{S}^{I}\,.\label{eq:83}
+\end{gather}
+
+\end_inset
+
+Taking the scalar inner product of both sides we obtain:
+\begin_inset Formula 
+\begin{gather}
+a^{2}\,\,{}^{t+\Delta t}J_{2}^{\prime}-b+c\phantom{}^{\tau}\gamma-d^{2}\,^{\tau}\gamma^{2}=F=0\,,\label{eq:84}
+\end{gather}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{gather}
+a=a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma\,\,\nonumber \\
+b=\frac{1}{2}{}^{t+\Delta t}\underline{e}^{\prime}\cdot{}^{t+\Delta t}\underline{e}^{\prime}+a_{E}{}^{t+\Delta t}\underline{e}^{\prime}\cdot\underline{S}^{I}+a_{E}^{2}\,^{I}J_{2}^{\prime}\,.\label{eq:85}\\
+c=\Delta t\left(1-\alpha\right){}^{t+\Delta t}\underline{e}^{\prime}\cdot^{t}\underline{S}+\Delta t\left(1-\alpha\right)a_{E}\,^{t}\underline{S}\cdot\underline{S}^{I}\,\,\nonumber \\
+d=\Delta t\left(1-\alpha\right)\sqrt{^{t}J_{2}^{\prime}}\,\,\nonumber 
+\end{gather}
+
+\end_inset
+
+Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:84"
+
+\end_inset
+
+ is a function of a single unknown -- the square root of the second deviatoric
+ stress invariant at time 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+ -- and may be solved by bisection or by Newton's method.
+ Once this parameter has been found, the deviatoric stresses for the current
+ time step may be found from Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:49"
+
+\end_inset
+
+, 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:81"
+
+\end_inset
+
+, and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:82"
+
+\end_inset
+
+, and the total stresses may be found by combining the deviatoric and volumetric
+ components from Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:42"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+To compute the tangent stress-strain relation, we need to compute the first
+ term in Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:58"
+
+\end_inset
+
+.
+ We begin by rewriting Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:83"
+
+\end_inset
+
+ as
+\begin_inset Formula 
+\begin{gather}
+F=^{t+\Delta t}S_{i}\left(a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma\right)-\phantom{}^{t+\Delta t}e_{i}^{\prime}+\Delta t\phantom{}^{\tau}\gamma\left(1-\alpha\right)^{t}S_{i}-a_{E}S_{i}^{I}=0\:.\label{eq:86}
+\end{gather}
+
+\end_inset
+
+The derivative of this function with respect to 
+\begin_inset Formula $^{t+\Delta t}e_{k}^{\prime\prime}$
+\end_inset
+
+ is
+\begin_inset Formula 
+\begin{gather}
+\frac{\partial F}{\partial\phantom{}^{t+\Delta t}e_{k}^{\prime}}=-\delta_{ik}\:,\label{eq:87}
+\end{gather}
+
+\end_inset
+
+and the derivative with respect to 
+\begin_inset Formula $^{t+\Delta t}S_{i}$
+\end_inset
+
+ is
+\begin_inset Formula 
+\begin{gather}
+\frac{\partial F}{\partial\phantom{}^{t+\Delta t}S_{i}}=a_{E}+\alpha\Delta t\phantom{}^{\tau}\gamma+\frac{\partial\phantom{}^{\tau}\gamma}{\partial\phantom{}^{t+\Delta t}S_{i}}\Delta t\left[\alpha\phantom{}^{t+\Delta t}S_{i}+\left(1-\alpha\right)^{t}S_{i}\right]\:.\label{eq:88}
+\end{gather}
+
+\end_inset
+
+From Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:81"
+
+\end_inset
+
+ and Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:49"
+
+\end_inset
+
+,
+\begin_inset Formula 
+\begin{gather}
+^{\tau}\gamma=\frac{\dot{e}_{0}}{S_{0}^{n}}\left[\alpha\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\left(1-\alpha\right)\sqrt{^{t}J_{2}^{\prime}}\right]^{n-1}\:.\label{eq:89}
+\end{gather}
+
+\end_inset
+
+Then
+\begin_inset Formula 
+\begin{gather}
+\frac{\partial\phantom{}^{\tau}\gamma}{\partial{}^{t+\Delta t}S_{i}}=\frac{\partial\phantom{}^{\tau}\gamma}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\frac{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}{\partial\phantom{}^{t+\Delta t}S_{l}}\label{eq:90}\\
+=\frac{\dot{e}_{0}\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}{}^{t+\Delta t}T_{i}}{2S_{0}^{n}}\,,\nonumber 
+\end{gather}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}T_{i}=\phantom{}^{t+\Delta t}S_{i}\:;\:\:1\leq i\leq3\label{eq:91}\\
+^{t+\Delta t}T_{i}=2\phantom{}^{t+\Delta t}S_{i}\:;\:\:\textrm{otherwise.}\nonumber 
+\end{gather}
+
+\end_inset
+
+Then using Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:87"
+
+\end_inset
+
+, 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:88"
+
+\end_inset
+
+, 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:90"
+
+\end_inset
+
+, and the quotient rule for derivatives of an implicit function,
+\begin_inset Formula 
+\begin{gather}
+\frac{\partial\phantom{}^{t+\Delta t}S_{i}}{\partial{}^{t+\Delta t}e_{k}^{\prime}}=\frac{\delta_{ik}}{a_{E}+\alpha\Delta t\left[^{\tau}\gamma+\frac{\dot{e}_{0}{}^{\tau}S_{i}\left(n-1\right){}^{t+\Delta t}T_{i}\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{2\sqrt{^{t+\Delta t}J_{2}^{\prime}}S_{0}^{n}}\right]}\,.\label{eq:92}
+\end{gather}
+
+\end_inset
+
+Note that for a linear material 
+\begin_inset Formula $\left(n=1\right)$
+\end_inset
+
+, this equation is identical to the linear formulation in Section 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sub:Effective-Stress-Formulation-Maxwell"
+
+\end_inset
+
+ (making the appropriate substitution for 
+\begin_inset Formula $^{\tau}\gamma$
+\end_inset
+
+).
+ Then, using Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:57"
+
+\end_inset
+
+ through 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:60"
+
+\end_inset
+
+,
+\begin_inset Formula 
+\begin{gather}
+C_{ij}^{VE}=\frac{1}{3a_{m}}\left[\begin{array}{cccccc}
+1 & 1 & 1 & 0 & 0 & 0\\
+1 & 1 & 1 & 0 & 0 & 0\\
+1 & 1 & 1 & 0 & 0 & 0\\
+0 & 0 & 0 & 0 & 0 & 0\\
+0 & 0 & 0 & 0 & 0 & 0\\
+0 & 0 & 0 & 0 & 0 & 0
+\end{array}\right]+\frac{1}{3}\frac{\partial{}^{t+\Delta t}S_{i}}{\partial{}^{t+\Delta t}e_{k}^{\prime}}\left[\begin{array}{cccccc}
+2 & -1 & -1 & 0 & 0 & 0\\
+-1 & 2 & -1 & 0 & 0 & 0\\
+-1 & -1 & 2 & 0 & 0 & 0\\
+0 & 0 & 0 & 3 & 0 & 0\\
+0 & 0 & 0 & 0 & 3 & 0\\
+0 & 0 & 0 & 0 & 0 & 3
+\end{array}\right]\,.\label{eq:93}
+\end{gather}
+
+\end_inset
+
+Note that if there are no deviatoric stresses at the beginning and end of
+ a time step (or if 
+\begin_inset Formula $\nicefrac{\dot{e}_{0}}{S_{0}^{n}}$
+\end_inset
+
+ approaches zero), Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:92"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:93"
+
+\end_inset
+
+ reduce to the elastic constitutive matrix, as expected.
+\end_layout
+
+\begin_layout Standard
+To compute the zero of the effective stress function using Newton's method,
+ we require the derivative of Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:84"
+
+\end_inset
+
+, which may be written:
+\begin_inset Formula 
+\begin{gather}
+\frac{\partial F}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}=2a^{2}\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\frac{\dot{e}_{0}\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{S_{0}^{n}}\left(2a\alpha\Delta t{}^{t+\Delta t}J_{2}^{\prime}+c-2d^{2}\,^{\tau}\gamma\right)\,.\label{eq:94}
+\end{gather}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:powerLaw"
+
+\end_inset
+
+Values in spatial database used as parameters in the nonlinear power-law
+ viscoelastic material constitutive model.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="7" columns="2">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="middle" width="0.85in">
+<column alignment="center" valignment="middle" width="2.47in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Parameter
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\align center
+
+\series bold
+Name in Spatial Database
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{p}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vp
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{s}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+Vs
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\rho$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+density
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\dot{e}_{0}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+reference-strain-rate
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $S_{0}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+reference-stress
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $n$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+power-law-exponent
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Elastoplastic Materials
+\end_layout
+
+\begin_layout Standard
+PyLith presently contains just a single elastoplastic material that implements
+ the Drucker-Prager yield criterion.
+ Future releases of PyLith may contain additional elastoplastic materials,
+ such as Drucker-Prager with hardening/softening.
+\end_layout
+
+\begin_layout Subsection
+General Elastoplasticity Formulation
+\end_layout
+
+\begin_layout Standard
+The elastoplasticity formulation in PyLith is based on an additive decomposition
+ of the total strain into elastic and plastic parts:
+\begin_inset Formula 
+\begin{equation}
+d\epsilon_{ij}=d\epsilon_{ij}^{E}+d\epsilon_{ij}^{P}\:.\label{eq:95}
+\end{equation}
+
+\end_inset
+
+The stress increment is then given by
+\begin_inset Formula 
+\begin{equation}
+d\sigma_{ij}=C_{ijrs}^{E}\left(d\epsilon_{rs}-d\epsilon_{rs}^{P}\right)\:,\label{eq:96}
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $C_{ijrs}^{E}$
+\end_inset
+
+ are the components of the elastic constitutive tensor.
+ To completely specify an elastoplastic problem, three components are needed.
+ We first require a yield condition, which specifies the state of stress
+ at which plastic flow initiates.
+ This is generally given in the form:
+\begin_inset Formula 
+\begin{equation}
+f\left(\underline{\sigma},k\right)=0\:,\label{eq:97}
+\end{equation}
+
+\end_inset
+
+where 
+\shape italic
+k
+\shape default
+ is an internal state parameter.
+ It is then necessary to specify a flow rule, which describes the relationship
+ between plastic strain and stress.
+ The flow rule is given in the form:
+\begin_inset Formula 
+\begin{equation}
+g\left(\underline{\sigma},k\right)=0\:.\label{eq:98}
+\end{equation}
+
+\end_inset
+
+The plastic strain increment is then given as
+\begin_inset Formula 
+\begin{equation}
+d\epsilon_{ij}^{P}=d\lambda\frac{\partial g}{\partial\sigma_{ij}}\:,\label{eq:99}
+\end{equation}
+
+\end_inset
+
+where 
+\begin_inset Formula $d\lambda$
+\end_inset
+
+ is the scalar plastic multiplier.
+ When the flow rule is identical to the yield criterion (
+\begin_inset Formula $f\equiv g$
+\end_inset
+
+), the plasticity is described as associated.
+ Otherwise, it is non-associated.
+ The final component needed is a hardening hypothesis, which describes how
+ the yield condition and flow rule are modified during plastic flow.
+ When the yield condition and flow rule remain constant during plastic flow
+ (e.g., no hardening), the material is referred to as perfectly plastic.
+\end_layout
+
+\begin_layout Standard
+To perform the solution, the yield condition (Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:97"
+
+\end_inset
+
+) is first evaluated under the assumption of elastic behavior.
+ If 
+\begin_inset Formula $^{t+\Delta t}f<0$
+\end_inset
+
+, the material behavior is elastic and no plastic flow occurs.
+ Otherwise, the behavior is plastic and a plastic strain increment must
+ be computed to return the stress state to the yield envelope.
+ This procedure is known as an elastic predictor-plastic corrector algorithm.
+\end_layout
+
+\begin_layout Subsection
+Drucker-Prager Elastoplastic Material
+\end_layout
+
+\begin_layout Standard
+PyLith includes an elastoplastic implementation of the Drucker-Prager yield
+ criterion 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Drucker:Prager:1952"
+
+\end_inset
+
+.
+ This criterion was originally devised to model plastic deformation of soils,
+ and it has also been used to model rock deformation.
+ It is intended to be a smooth approximation of the Mohr-Coulomb yield criterion.
+ The implementation used in PyLith includes non-associated plastic flow,
+ which allows control over the unreasonable amounts of dilatation that are
+ sometimes predicted by the associated model.
+ The model is described by the following yield condition:
+\begin_inset Formula 
+\begin{equation}
+f\left(\underline{\sigma},k\right)=\alpha_{f}I_{1}+\sqrt{J_{2}^{\prime}}-\beta\:,\label{eq:100}
+\end{equation}
+
+\end_inset
+
+and a flow rule given by:
+\begin_inset Formula 
+\begin{equation}
+g\left(\underline{\sigma},k\right)=\sqrt{J_{2}^{\prime}}+\alpha_{g}I_{1}\:.\label{eq:101}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The yield surface represents a circular cone in principal stress space,
+ and the parameters can be related to the friction angle, 
+\begin_inset Formula $\phi$
+\end_inset
+
+, and the cohesion, 
+\begin_inset Formula $\bar{c}$
+\end_inset
+
+, of the Mohr-Coulomb model.
+ The yield surface in Haigh-Westergaard space (
+\begin_inset Formula $\zeta=\frac{1}{\sqrt{3}}I_{1},p=\sqrt{2J_{2}},\cos(3\theta)=\frac{3\sqrt{3}}{2}\frac{J_{3}}{J_{2}^{3/2}}$
+\end_inset
+
+) is
+\begin_inset Formula 
+\begin{equation}
+\left(\sqrt{3}\sin\left(\theta+\frac{\pi}{3}\right)-\sin\phi\cos\left(\theta+\frac{\pi}{3}\right)\right)p-\sqrt{2}\sin\phi\zeta=\sqrt{6}\overline{c}\cos\theta.\label{eq:drucker:prager:haigh:westergaard}
+\end{equation}
+
+\end_inset
+
+The yield surface can be fit to the Mohr-Coulomb model in several different
+ ways.
+ The yield surface can touch the outer apices (
+\begin_inset Formula $\theta=\pi/3$
+\end_inset
+
+) of the Mohr-Coulomb model (inscribed version), the inner apices (
+\begin_inset Formula $\theta=0$
+\end_inset
+
+) of the Mohr-Coulomb model (circumscribed version), or halfway between
+ the two (
+\begin_inset Formula $\theta=pi/6,$
+\end_inset
+
+middle version).
+ Substituting these values for 
+\begin_inset Formula $\theta$
+\end_inset
+
+ into Equation (
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:drucker:prager:haigh:westergaard"
+
+\end_inset
+
+) and casting it into the same form as Equation (
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:101"
+
+\end_inset
+
+) yields the values of 
+\begin_inset Formula $\alpha_{f}$
+\end_inset
+
+, 
+\begin_inset Formula $\beta$
+\end_inset
+
+, and 
+\begin_inset Formula $\alpha_{g}$
+\end_inset
+
+ given in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:fit_mohr_coulomb"
+
+\end_inset
+
+, where 
+\begin_inset Formula $\phi_{0}$
+\end_inset
+
+ refers to the initial friction angle.
+ Similarly, the flow rule can be related to the dilatation angle, 
+\begin_inset Formula $\psi$
+\end_inset
+
+, of a Mohr-Coulomb model.
+ It is also possible for the Mohr-Coulomb parameters to be functions of
+ the internal state parameter, 
+\begin_inset Formula $k$
+\end_inset
+
+.
+ In PyLith, the fit to the Mohr-Coulomb yield surface and flow rule is controlle
+d by the 
+\family typewriter
+fit_mohr_coulomb
+\family default
+ property.
+ 
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:fit_mohr_coulomb"
+
+\end_inset
+
+Options for fitting the Drucker-Prager plastic parameters to a Mohr-Coulomb
+ model using 
+\family typewriter
+fit_mohr_coulomb
+\family default
+.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="4" columns="4">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" width="0">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Parameter Value
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\alpha_{f}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\beta$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\alpha_{g}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+inscribed
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{2\sin\phi\left(k\right)}{\sqrt{3}\left(3-\sin\phi\left(k\right)\right)}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{6\bar{c}\left(k\right)\cos\phi_{0}}{\sqrt{3}\left(3-\sin\phi_{0}\right)}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{2\sin\psi(k)}{\sqrt{3}\left(3-\sin\psi\left(k\right)\right)}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+middle
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{\sin\phi\left(k\right)}{3}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\bar{c}\left(k\right)\cos\left(\phi_{0}\right)$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{\sin\psi\left(k\right)}{3}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+circumscribed
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{2\sin\phi\left(k\right)}{\sqrt{3}\left(3+\sin\phi\left(k\right)\right)}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{6\bar{c}\left(k\right)\cos\phi_{0}}{\sqrt{3}\left(3+\sin\phi_{0}\right)}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\frac{2\sin\psi(k)}{\sqrt{3}\left(3+\sin\psi\left(k\right)\right)}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+As for the viscoelastic models, it is convenient to separate the deformation
+ into deviatoric and volumetric parts:
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}S_{ij}=\frac{1}{a_{E}}\left(^{t+\Delta t}e_{ij}-\phantom{}^{t+\Delta t}e_{ij}^{P}-e_{ij}^{I}\right)+S_{ij}^{I}=\frac{1}{a_{E}}\left(^{t+\Delta t}e_{ij}^{\prime}-\Delta e_{ij}^{P}\right)+S_{ij}^{I}\label{eq:105}\\
+^{t+\Delta t}P=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta-\phantom{}^{t+\Delta t}\theta^{P}-\theta^{I}\right)+P^{I}=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta^{\prime}-\Delta\theta^{P}\right)+P^{I}\:,\nonumber 
+\end{gather}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{gather}
+^{t+\Delta t}e_{ij}^{\prime}=\phantom{}^{t+\Delta t}e_{ij}-\phantom{}^{t}e_{ij}^{P}-e_{ij}^{I}\nonumber \\
+\Delta e_{ij}^{P}=\phantom{}^{t+\Delta t}e_{ij}^{P}-\phantom{}^{t}e_{ij}^{P}\nonumber \\
+^{t+\Delta t}\theta^{\prime}=\phantom{}^{t+\Delta t}\theta-\phantom{}^{t}\theta^{P}-\theta^{I}\nonumber \\
+\Delta\theta^{P}=\phantom{}^{t+\Delta t}\theta^{P}-\phantom{}^{t}\theta^{P}\:.\label{eq:106}
+\end{gather}
+
+\end_inset
+
+Since the plasticity is pressure-dependent, there are volumetric plastic
+ strains, unlike the viscous strains in the previous section.
+ From Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:99"
+
+\end_inset
+
+, the plastic strain increment is
+\begin_inset Formula 
+\begin{equation}
+\Delta\epsilon_{ij}^{P}=\lambda\frac{\partial\phantom{}^{t+\Delta t}g}{\partial\phantom{}^{t+\Delta t}\sigma_{ij}}=\lambda\alpha_{g}\delta_{ij}+\lambda\frac{^{t+\Delta t}S_{ij}}{2\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\:.\label{eq:107}
+\end{equation}
+
+\end_inset
+
+The volumetric part is
+\begin_inset Formula 
+\begin{equation}
+\Delta\theta^{P}=\frac{1}{3}\Delta\epsilon_{ii}^{P}=\lambda\alpha_{g}\:,\label{eq:108}
+\end{equation}
+
+\end_inset
+
+and the deviatoric part is
+\begin_inset Formula 
+\begin{equation}
+\Delta e_{ij}^{P}=\Delta\epsilon_{ij}^{P}-\Delta\epsilon_{m}^{P}\delta_{ij}=\lambda\frac{^{t+\Delta t}S_{ij}}{2\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\:.\label{eq:109}
+\end{equation}
+
+\end_inset
+
+The problem is reduced to solving for 
+\begin_inset Formula $\lambda$
+\end_inset
+
+.
+ The procedure is different depending on whether hardening is included.
+\end_layout
+
+\begin_layout Subsubsection
+Drucker-Prager Elastoplastic With No Hardening (Perfectly Plastic)
+\end_layout
+
+\begin_layout Standard
+When there is no hardening (perfect plasticity), the Drucker-Prager elastoplasti
+c model may be parameterized with just three parameters, in addition to
+ the normal elasticity parameters.
+ The parameters 
+\family typewriter
+friction-angle
+\family default
+, 
+\family typewriter
+cohesion
+\family default
+, and 
+\family typewriter
+dilatation-angle
+\family default
+ in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:druckerPrager"
+
+\end_inset
+
+ refer respectively to 
+\begin_inset Formula $\phi$
+\end_inset
+
+, 
+\begin_inset Formula $\bar{c}$
+\end_inset
+
+, and 
+\begin_inset Formula $\psi$
+\end_inset
+
+ in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:fit_mohr_coulomb"
+
+\end_inset
+
+.
+ These are then converted to the properties 
+\begin_inset Formula $\alpha_{f}$
+\end_inset
+
+ (
+\family typewriter
+alpha-yield
+\family default
+), 
+\begin_inset Formula $\beta$
+\end_inset
+
+ (
+\family typewriter
+beta
+\family default
+), and 
+\begin_inset Formula $\alpha_{g}$
+\end_inset
+
+ (
+\family typewriter
+alpha-flow
+\family default
+), as shown in Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:material-model-output"
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+For perfect plasticity the yield and flow functions do not vary, and we
+ can solve for 
+\begin_inset Formula $\lambda$
+\end_inset
+
+ by substituting Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:109"
+
+\end_inset
+
+ into Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:105"
+
+\end_inset
+
+ and taking the scalar product of both sides:
+\begin_inset Formula 
+\begin{equation}
+\lambda=\sqrt{2}\,\phantom{}^{t+\Delta t}d-2a_{E}\sqrt{^{t+\Delta t}J_{2}^{\prime}}\:,\label{eq:110}
+\end{equation}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{equation}
+^{t+\Delta t}d^{2}=2a_{E}^{2}J_{2}^{\prime I}+2a_{E}S_{ij}^{I}\,\phantom{}^{t+\Delta t}e_{ij}^{\prime}+\phantom{}^{t+\Delta t}e_{ij}^{\prime}\,\phantom{}^{t+\Delta t}e_{ij}^{\prime}\:.\label{eq:111}
+\end{equation}
+
+\end_inset
+
+The second deviatoric stress invariant is therefore
+\begin_inset Formula 
+\begin{equation}
+\sqrt{^{t+\Delta t}J_{2}^{\prime}}=\frac{\sqrt{2}\,\phantom{}^{t+\Delta t}d-\lambda}{2a_{E}}\:,\label{eq:112}
+\end{equation}
+
+\end_inset
+
+and the pressure is computed from Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:105"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:108"
+
+\end_inset
+
+ as:
+\begin_inset Formula 
+\begin{equation}
+^{t+\Delta t}P=\frac{^{t+\Delta t}I_{1}}{3}=\frac{1}{a_{m}}\left(^{t+\Delta t}\theta^{\prime}-\lambda\alpha_{g}\right)+P^{I}\:.\label{eq:113}
+\end{equation}
+
+\end_inset
+
+We then use the yield condition (
+\begin_inset Formula $^{t+\Delta t}f=0$
+\end_inset
+
+) and substitute for the stress invariants at 
+\begin_inset Formula $t+\Delta t$
+\end_inset
+
+ to obtain:
+\begin_inset Formula 
+\begin{equation}
+\lambda=\frac{2a_{E}a_{m}\left(\frac{3\alpha_{f}}{a_{m}}\phantom{}^{t+\Delta t}\theta^{\prime}+\frac{^{t+\Delta t}d}{\sqrt{2}a_{E}}-\beta\bar{c}\right)}{6\alpha_{f}\alpha_{g}a_{E}+a_{m}}\:.\label{eq:114}
+\end{equation}
+
+\end_inset
+
+Since 
+\begin_inset Formula $\lambda$
+\end_inset
+
+ is now known, we can substitute 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:112"
+
+\end_inset
+
+ into 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:109"
+
+\end_inset
+
+ to obtain
+\begin_inset Formula 
+\begin{equation}
+^{t+\Delta t}S_{ij}=\frac{\Delta e_{ij}^{P}\left(\sqrt{2}\,\phantom{\,}^{t+\Delta t}d-\lambda\right)}{\lambda a_{E}}\:.\label{eq:115}
+\end{equation}
+
+\end_inset
+
+Substituting this into Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:105"
+
+\end_inset
+
+, we obtain the deviatoric plastic strain increment:
+\begin_inset Formula 
+\begin{equation}
+\Delta e_{ij}^{P}=\frac{\lambda}{\sqrt{2}\,\phantom{}^{t+\Delta t}d}\left(^{t+\Delta t}e_{ij}^{\prime}+a_{E}S_{ij}^{I}\right)\:.\label{eq:116}
+\end{equation}
+
+\end_inset
+
+We then use Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:108"
+
+\end_inset
+
+ and the second line of Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:105"
+
+\end_inset
+
+ to obtain the volumetric plastic strains and the pressure, and we use 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:116"
+
+\end_inset
+
+ and the first line of Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:105"
+
+\end_inset
+
+ to obtain the deviatoric plastic strains and the deviatoric stresses.
+\end_layout
+
+\begin_layout Standard
+In certain cases where the mean stress is tensile, it is possible that the
+ flow rule will not allow the stresses to project back to the yield surface,
+ since they would project beyond the tip of the cone.
+ Although this stress state is not likely to be encountered for quasi-static
+ tectonic problems, it can occur for dynamic problems.
+ One simple solution is to redefine the plastic multiplier, 
+\begin_inset Formula $\lambda$
+\end_inset
+
+.
+ We do this by taking the smaller of the values yielded by Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:114"
+
+\end_inset
+
+ or by the following relation:
+\begin_inset Formula 
+\begin{equation}
+\lambda=\sqrt{2}\,\phantom{}^{t+\Delta t}d\:.\label{eq:127}
+\end{equation}
+
+\end_inset
+
+This is equivalent to setting the second deviatoric stress invariant to
+ zero in Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:110"
+
+\end_inset
+
+.
+ By default, PyLith does not allow such tensile yield, since this would
+ generally represent an error in problem setup for tectonic problems; however,
+ for cases where such behavior is necessary, the material flag 
+\family typewriter
+allow_tensile_yield
+\family default
+ may be set to 
+\family typewriter
+True
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+To compute the elastoplastic tangent matrix we begin by writing Equation
+ 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:105"
+
+\end_inset
+
+ as a single expression in terms of stress and strain vectors:
+\begin_inset Formula 
+\begin{equation}
+^{t+\Delta t}\sigma_{i}=\frac{1}{a_{E}}\left(^{t+\Delta t}e_{i}^{\prime}-\Delta e_{i}^{P}\right)+S_{i}^{I}+\frac{R_{i}}{a_{m}}\left(^{t+\Delta t}\theta^{\prime}-\Delta\theta^{P}\right)+P^{I}\label{eq:117}
+\end{equation}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{gather}
+R_{i}=1\:;\; i=1,2,3\label{eq:118}\\
+R_{i}=0\:;\; i=4,5,6\:.\nonumber 
+\end{gather}
+
+\end_inset
+
+The elastoplastic tangent matrix is then given by
+\begin_inset Formula 
+\begin{equation}
+C_{ij}^{EP}=\frac{\partial\phantom{}^{t+\Delta t}\sigma_{i}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{a_{E}}\left(\frac{\partial\phantom{}^{t+\Delta t}e_{i}^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}-\frac{\partial\Delta e_{i}^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)+\frac{R_{i}}{a_{m}}\left(\frac{\partial\phantom{}^{t+\Delta t}\theta^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}-\frac{\partial\Delta\theta^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)\:.\label{eq:119}
+\end{equation}
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+From Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:16"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:106"
+
+\end_inset
+
+, we have
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\phantom{}^{t+\Delta t}e_{i}^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{3}\left[\begin{array}{cccccc}
+2 & -1 & -1 & 0 & 0 & 0\\
+-1 & 2 & -1 & 0 & 0 & 0\\
+-1 & -1 & 2 & 0 & 0 & 0\\
+0 & 0 & 0 & 3 & 0 & 0\\
+0 & 0 & 0 & 0 & 3 & 0\\
+0 & 0 & 0 & 0 & 0 & 3
+\end{array}\right]\:,\label{eq:120}
+\end{equation}
+
+\end_inset
+
+and from Equations 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:15"
+
+\end_inset
+
+ and 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:106"
+
+\end_inset
+
+ we have
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\phantom{}^{t+\Delta t}\theta^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{R_{j}}{3}\:.\label{eq:121}
+\end{equation}
+
+\end_inset
+
+From Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:116"
+
+\end_inset
+
+ we have
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\Delta e_{i}^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{1}{\sqrt{2}\,\phantom{}^{t+\Delta t}d}\left[\left(^{t+\Delta t}e_{i}^{\prime}+a_{E}S_{i}^{I}\right)\left(\frac{\partial\lambda}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}-\frac{\lambda}{\phantom{}^{t+\Delta t}d}\frac{\partial\phantom{}^{t+\Delta t}d}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)+\lambda\frac{\partial\phantom{}^{t+\Delta t}e_{i}^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right]\:.\label{eq:122}
+\end{equation}
+
+\end_inset
+
+The derivative of 
+\begin_inset Formula $^{t+\Delta t}d$
+\end_inset
+
+ is
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\phantom{}^{t+\Delta t}d}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\frac{a_{E}T_{j}^{I}+\phantom{}^{t+\Delta t}E_{j}}{\phantom{}^{t+\Delta t}d}\:,\label{eq:123}
+\end{equation}
+
+\end_inset
+
+where
+\begin_inset Formula 
+\begin{align}
+T_{j}^{I} & =S_{j}^{I}\;\mathrm{and}\;\phantom{}^{t+\Delta t}E_{j}=\phantom{}^{t+\Delta t}e_{j}^{\prime}\:;\; j=1,2,3\nonumber \\
+T_{j}^{I} & =2S_{j}^{I}\;\mathrm{and}\;\phantom{}^{t+\Delta t}E_{j}=2\phantom{}^{t+\Delta t}e_{j}^{\prime}\:;\; j=4,5,6\:.\label{eq:124}
+\end{align}
+
+\end_inset
+
+The derivative of 
+\begin_inset Formula $^{t+\Delta t}\lambda$
+\end_inset
+
+ is a function of derivatives already computed:
+\begin_inset Formula 
+\begin{align}
+\frac{\partial\lambda}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}} & =\frac{2a_{E}a_{m}}{6\alpha_{f}\alpha_{g}a_{E}+a_{m}}\left(\frac{3\alpha_{f}}{a_{m}}\frac{\partial\phantom{}^{t+\Delta t}\theta^{\prime}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}+\frac{1}{\sqrt{2}a_{E}}\frac{\partial\phantom{}^{t+\Delta t}d}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\right)\nonumber \\
+ & =\frac{2a_{E}a_{m}}{6\alpha_{f}\alpha_{g}a_{E}+a_{m}}\left(\frac{\alpha_{f}R_{j}}{a_{m}}+\frac{a_{E}T_{j}^{I}+\phantom{}^{t+\Delta t}E_{j}}{\sqrt{2}a_{E}\phantom{}^{t+\Delta t}d}\right)\:.\label{eq:125}
+\end{align}
+
+\end_inset
+
+Finally, from Equation 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:108"
+
+\end_inset
+
+, the derivative of the volumetric plastic strain increment is:
+\begin_inset Formula 
+\begin{equation}
+\frac{\partial\Delta\theta^{P}}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}=\alpha_{g}\frac{\partial\lambda}{\partial\phantom{}^{t+\Delta t}\epsilon_{j}}\:.\label{eq:126}
+\end{equation}
+
+\end_inset
+
+
+\begin_inset Float table
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+\begin_inset CommandInset label
+LatexCommand label
+name "tab:druckerPrager"
+
+\end_inset
+
+Values in spatial database used as parameters in the Drucker-Prager elastoplasti
+c model with perfect plasticity.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="7" columns="2">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="top" width="0">
+<column alignment="center" valignment="top" width="0">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Parameter
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+Name in Spatial Database
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{p}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+vp
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $v_{s}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+vs
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\rho$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+density
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\phi$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+friction-angle
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\bar{c}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+cohesion
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $\psi$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+dilatation-angle
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+In addition to the properties available for every material, the properties
+ for the Drucker-Prager model also includes:
+\end_layout
+
+\begin_layout Description
+fit_mohr_coulomb Fit to the yield surface to the Mohr-Coulomb model (default
+ is inscribed).
+\end_layout
+
+\begin_layout Description
+allow_tensile_yield If true, allow yield beyond tensile strength; otherwise
+ an error message will occur when the model fails beyond the tensile strength
+ (default is false).
+\end_layout
+
+\begin_layout Standard
+An example of setting these parameters in a 
+\family typewriter
+.cfg
+\family default
+ file is:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent]
+\end_layout
+
+\begin_layout LyX-Code
+materials = [plastic]
+\end_layout
+
+\begin_layout LyX-Code
+materials.plastic = pylith.materials.DruckerPrager3D
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent.materials.plastic]
+\end_layout
+
+\begin_layout LyX-Code
+fit_mohr_coulomb = inscribed ; default
+\end_layout
+
+\begin_layout LyX-Code
+allow_tensile_yield = False ; default
+\end_layout
+
+\begin_layout Section
+Initial State Variables
+\end_layout
+
+\begin_layout Standard
+In many problems of interest, the state variables describing a material
+ model may already have nonzero values prior to the application of any boundary
+ conditions.
+ For problems in geophysics, the most common example is a problem that includes
+ the effects of gravitational body forces.
+ In the real earth, rocks were emplaced and formed under the influence of
+ gravity.
+ When performing numerical simulations, however, it is not possible to represent
+ the entire time history of rock emplacement.
+ Instead, gravity must be ``turned on'' at the beginning of the simulation.
+ Unfortunately, this results in unrealistic amounts of deformation at the
+ beginning of a simulation.
+ An alternative is to provide initial state variables for the region under
+ consideration.
+ This allows the specification of a set of state variables that is consistent
+ with the prior application of gravitational body forces.
+ In a more general sense, initial values for state variables may be used
+ to provide values that are consistent with any set of conditions that occurred
+ prior to the beginning of a simulation.
+ The current release of PyLith allows the specification of initial stresses,
+ strains, and state variables for all materials; however, the initial state
+ variables are not presently used.
+ The reason for this is that the present version of PyLith always performs
+ an elastic solution prior to performing the time-dependent solution, and
+ the state variables are not used in the elastic solution.
+ In future versions of PyLith, the solution of the elastic problem will
+ be optional, so that initial state variables may be used.
+\end_layout
+
+\begin_layout Subsection
+Specification of Initial State Variables
+\end_layout
+
+\begin_layout Standard
+Since state variables are specific to a given material, initial values for
+ state variables are specified as part of the material description.
+ By default, initial state values are not used.
+ To override this behavior, specify a spatial database for the initial stress,
+ strain, and/or state variables as in the example from the tutorial in Section
+ 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Tutorial-3d-hex8"
+
+\end_inset
+
+:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent.materials.elastic]
+\end_layout
+
+\begin_layout LyX-Code
+db_initial_stress = spatialdata.spatialdb.SimpleDB
+\end_layout
+
+\begin_layout LyX-Code
+db_initial_stress.iohandler.filename = initial_stress.spatialdb
+\end_layout
+
+\begin_layout Standard
+\noindent
+\align center
+\begin_inset Float table
+placement H
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Values in spatial database for initial state variables for 3D problems.
+ 2D problems use only the relevant values.
+ Note that initial stress and strain are available for all material models.
+ Some models have additional state variables (Table 
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:material-model-output"
+
+\end_inset
+
+) and initial values for these may also be provided.
+\end_layout
+
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="3" columns="2">
+<features tabularvalignment="middle">
+<column alignment="center" valignment="middle" width="0.85in">
+<column alignment="center" valignment="middle" width="2.47in">
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\series bold
+State Variable
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\align center
+
+\series bold
+Values in Spatial Database
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+initial stress
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+stress-xx, stress-yy, stress-zz, stress-xy, stress-yz, stress-xz
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+initial strain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+strain-xx, strain-yy, strain-zz, strain-xy, strain-yz, strain-xz
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -36,10 +36,10 @@
 } // testConstructor
 
 // ----------------------------------------------------------------------
-// Test write() with 2D mesh and vertex data.
+// Test write() with tri3 mesh and vertex data.
 void
-pylith::meshio::TestXdmf::testWrite2DVertex(void)
-{ // testWrite2DVertex
+pylith::meshio::TestXdmf::testWriteTri3Vertex(void)
+{ // testWriteTri3Vertex
 
   const char* filenameHDF5 = "data/tri3_vertex.h5";
   const char* filenameXdmf = "tri3_vertex.xmf";
@@ -48,13 +48,13 @@
   metafile.write(filenameXdmf, filenameHDF5);
 
   _checkFile(filenameXdmf);
-} // testWrite2DVertex
+} // testWriteTri3Vertex
 
 // ----------------------------------------------------------------------
-// Test write() with 2D mesh and cell data.
+// Test write() with Tri3 mesh and cell data.
 void
-pylith::meshio::TestXdmf::testWrite2DCell(void)
-{ // testWrite2DCell
+pylith::meshio::TestXdmf::testWriteTri3Cell(void)
+{ // testWriteTri3Cell
   const char* filenameHDF5 = "data/tri3_cell.h5";
   const char* filenameXdmf = "tri3_cell.xmf";
 
@@ -62,13 +62,42 @@
   metafile.write(filenameXdmf, filenameHDF5);
 
   _checkFile(filenameXdmf);
-} // testWrite2DCell
+} // testWriteTri3Cell
 
 // ----------------------------------------------------------------------
-// Test write() with 3D mesh and vertex data.
+// Test write() with quad4 mesh and vertex data.
 void
-pylith::meshio::TestXdmf::testWrite3DVertex(void)
-{ // testWrite3DVertex
+pylith::meshio::TestXdmf::testWriteQuad4Vertex(void)
+{ // testWriteQuad4Vertex
+
+  const char* filenameHDF5 = "data/quad4_vertex.h5";
+  const char* filenameXdmf = "quad4_vertex.xmf";
+
+  Xdmf metafile;
+  metafile.write(filenameXdmf, filenameHDF5);
+
+  _checkFile(filenameXdmf);
+} // testWriteQuad4Vertex
+
+// ----------------------------------------------------------------------
+// Test write() with Quad4 mesh and cell data.
+void
+pylith::meshio::TestXdmf::testWriteQuad4Cell(void)
+{ // testWriteQuad4Cell
+  const char* filenameHDF5 = "data/quad4_cell.h5";
+  const char* filenameXdmf = "quad4_cell.xmf";
+
+  Xdmf metafile;
+  metafile.write(filenameXdmf, filenameHDF5);
+
+  _checkFile(filenameXdmf);
+} // testWriteQuad4Cell
+
+// ----------------------------------------------------------------------
+// Test write() with tet4 mesh and vertex data.
+void
+pylith::meshio::TestXdmf::testWriteTet4Vertex(void)
+{ // testWriteTet4Vertex
   const char* filenameHDF5 = "data/tet4_vertex.h5";
   const char* filenameXdmf = "tet4_vertex.xmf";
 
@@ -76,13 +105,13 @@
   metafile.write(filenameXdmf, filenameHDF5);
 
   _checkFile(filenameXdmf);
-} // testWrite3DVertex
+} // testWriteTet4Vertex
 
 // ----------------------------------------------------------------------
-// Test write() with 3D mesh and cell data.
+// Test write() with tet4 mesh and cell data.
 void
-pylith::meshio::TestXdmf::testWrite3DCell(void)
-{ // testWrite3DCell
+pylith::meshio::TestXdmf::testWriteTet4Cell(void)
+{ // testWriteTet4Cell
   const char* filenameHDF5 = "data/tet4_cell.h5";
   const char* filenameXdmf = "tet4_cell.xmf";
 
@@ -90,11 +119,39 @@
   metafile.write(filenameXdmf, filenameHDF5);
 
   _checkFile(filenameXdmf);
-} // testWrite3DCell
+} // testWriteTet4Cell
 
 // ----------------------------------------------------------------------
-// Check VTK file against archived file.
+// Test write() with hex8 mesh and vertex data.
 void
+pylith::meshio::TestXdmf::testWriteHex8Vertex(void)
+{ // testWriteHex8Vertex
+  const char* filenameHDF5 = "data/hex8_vertex.h5";
+  const char* filenameXdmf = "hex8_vertex.xmf";
+
+  Xdmf metafile;
+  metafile.write(filenameXdmf, filenameHDF5);
+
+  _checkFile(filenameXdmf);
+} // testWriteHex8Vertex
+
+// ----------------------------------------------------------------------
+// Test write() with hex8 mesh and cell data.
+void
+pylith::meshio::TestXdmf::testWriteHex8Cell(void)
+{ // testWriteHex8Cell
+  const char* filenameHDF5 = "data/hex8_cell.h5";
+  const char* filenameXdmf = "hex8_cell.xmf";
+
+  Xdmf metafile;
+  metafile.write(filenameXdmf, filenameHDF5);
+
+  _checkFile(filenameXdmf);
+} // testWriteHex8Cell
+
+// ----------------------------------------------------------------------
+// Check Xdmf file against archived file.
+void
 pylith::meshio::TestXdmf::_checkFile(const char* filename)
 { // _checkFile
   const std::string filenameE = std::string("data/") + std::string(filename);

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/TestXdmf.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,10 +44,14 @@
   CPPUNIT_TEST_SUITE( TestXdmf );
 
   CPPUNIT_TEST( testConstructor );
-  CPPUNIT_TEST( testWrite2DVertex );
-  CPPUNIT_TEST( testWrite2DCell );
-  CPPUNIT_TEST( testWrite3DVertex );
-  CPPUNIT_TEST( testWrite3DCell );
+  CPPUNIT_TEST( testWriteTri3Vertex );
+  CPPUNIT_TEST( testWriteTri3Cell );
+  CPPUNIT_TEST( testWriteQuad4Vertex );
+  CPPUNIT_TEST( testWriteQuad4Cell );
+  CPPUNIT_TEST( testWriteTet4Vertex );
+  CPPUNIT_TEST( testWriteTet4Cell );
+  CPPUNIT_TEST( testWriteHex8Vertex );
+  CPPUNIT_TEST( testWriteHex8Cell );
 
   CPPUNIT_TEST_SUITE_END();
 
@@ -57,18 +61,30 @@
   /// Test constructor.
   void testConstructor(void);
 
-  /// Test write() with 2D mesh and vertex data.
-  void testWrite2DVertex(void);
+  /// Test write() with tri3 mesh and vertex data.
+  void testWriteTri3Vertex(void);
 
-  /// Test write() with 2D mesh and cell data.
-  void testWrite2DCell(void);
+  /// Test write() with tri3 mesh and cell data.
+  void testWriteTri3Cell(void);
 
-  /// Test write() with 3D mesh and vertex data.
-  void testWrite3DVertex(void);
+  /// Test write() with quad4 mesh and vertex data.
+  void testWriteQuad4Vertex(void);
 
-  /// Test write() with 3D mesh and cell data.
-  void testWrite3DCell(void);
+  /// Test write() with quad4 mesh and cell data.
+  void testWriteQuad4Cell(void);
 
+  /// Test write() with tet4 mesh and vertex data.
+  void testWriteTet4Vertex(void);
+
+  /// Test write() with tet4 mesh and cell data.
+  void testWriteTet4Cell(void);
+
+  /// Test write() with hex8 mesh and vertex data.
+  void testWriteHex8Vertex(void);
+
+  /// Test write() with hex8 mesh and cell data.
+  void testWriteHex8Cell(void);
+
   // PRIVATE METHODS ////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,6 +18,9 @@
 
 #include "DataWriterData.hh"
 
+const int pylith::meshio::DataWriterData::DataWriterData::numVertexFields = 4;
+const int pylith::meshio::DataWriterData::DataWriterData::numCellFields = 4;
+
 // ----------------------------------------------------------------------
 // Constructor
 pylith::meshio::DataWriterData::DataWriterData(void) :
@@ -32,13 +35,18 @@
   timeFormat(0),
   cellsLabel(0),
   labelId(0),
-  numVertexFields(0),
   numVertices(0),
   vertexFieldsInfo(0),
-  numCellFields(0),
   numCells(0),
   cellFieldsInfo(0)
 { // constructor
+  for (int i=0; i < numVertexFields; ++i) {
+    vertexFields[i] = 0;
+  } // for
+
+  for (int i=0; i < numCellFields; ++i) {
+    cellFields[i] = 0;
+  } // for
 } // constructor
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterData.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -69,18 +69,18 @@
 
   /// @name Vertex field information.
   //@{
-  int numVertexFields; ///< Number of vertex fields.
+  static const int numVertexFields; ///< Number of vertex fields.
   int numVertices; ///< Number of vertices.
   FieldStruct* vertexFieldsInfo; ///< Array of vertex field information.
-  PylithScalar* vertexFields[3]; ///< Array of vertex field values.
+  PylithScalar* vertexFields[4]; ///< Array of vertex field values.
   //@}
 
   /// @name Cell field information.
   //@{
-  int numCellFields; ///< Number of cell fields.
+  static const int numCellFields; ///< Number of cell fields.
   int numCells; ///< Number of vertices.
   FieldStruct* cellFieldsInfo; ///< Array of cell fields information.
-  PylithScalar* cellFields[3]; /// Array of cell field values.
+  PylithScalar* cellFields[4]; /// Array of cell field values.
   //@}
 
 }; // DataWriterData

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,16 +44,19 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshHex8::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
 pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexFieldScalar[8*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexFieldVector[8*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +66,17 @@
   7.8, 8.9, 9.0,
   10.2, 11.3, 12.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexFieldTensor[8*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -77,26 +87,30 @@
   7.9, 8.0,
 };
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshHex8::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
-  4.4, 5.5, 6.6
+  4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField1[] = {
-  2.1, 3.2,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
-  7.8, 8.9, 9.0, 10.1, 11.2, 12.3
+  7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellFieldOther[2*2] = {
+  1.1, 2.2,
+  5.5, 6.6,
+};
 
 pylith::meshio::DataWriterHDF5DataBCMeshHex8::DataWriterHDF5DataBCMeshHex8(void)
 { // constructor
@@ -112,21 +126,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshHex8::~DataWriterHDF5DataBCMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataBCMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -40,46 +40,55 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_numVertices = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexFieldScalar[3*1] = {
+  2.1, 3.2, 4.3,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexFieldVector[3*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3,
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexFieldTensor[3*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexFieldOther[3*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
 };
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellFieldTensor[2*3] = {
+  1.2, 1.3, 1.4,
+  2.2, 2.3, 2.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellFieldOther[2*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -96,21 +105,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshQuad4::~DataWriterHDF5DataBCMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -56,9 +56,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +68,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataBCMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,16 +44,19 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshTet4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexFieldVector[6*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -61,10 +64,15 @@
   13.3, 14.4, 15.5,
   16.6, 17.7, 18.8,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexFieldTensor[6*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexFieldOther[6*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -73,26 +81,30 @@
   11.2, 12.3,
 };
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshTet4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellFieldScalar[2*1] = {
+  2.1, 3.2
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField1[] = {
-  2.1, 3.2
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellFieldOther[2*4] = {
+  1.2, 2.3, 3.4, 4.5,
+  7.8, 8.9, 9.0, 10.1,
+};
 
 pylith::meshio::DataWriterHDF5DataBCMeshTet4::DataWriterHDF5DataBCMeshTet4(void)
 { // constructor
@@ -108,21 +120,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshTet4::~DataWriterHDF5DataBCMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataBCMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,45 +44,52 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshTri3::_numVertices = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexFieldTensor[2*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexFieldOther[2*2] = {
   1.2, 2.3,
   3.4, 4.5,
 };
 
-const int pylith::meshio::DataWriterHDF5DataBCMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataBCMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellFieldOther[1*2] = {
+  2.1, 2.2,
+};
 
 pylith::meshio::DataWriterHDF5DataBCMeshTri3::DataWriterHDF5DataBCMeshTri3(void)
 { // constructor
@@ -98,21 +105,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshTri3::~DataWriterHDF5DataBCMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataBCMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,49 +41,58 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_numVertices = 4;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexFieldScalar[4*1] = {
+  2.1, 3.2, 4.3, 5.4,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexFieldVector[4*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
   10.1, 11.2, 12.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4,
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexFieldTensor[4*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexFieldOther[4*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
   7.8, 8.9,
 };
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
 pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellFields[] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellFieldVector[1*3] = {
   1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellFieldTensor[1*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellFieldOther[1*3] = {
+  1.2, 2.3, 3.4,
+};
 
 pylith::meshio::DataWriterHDF5DataFaultMeshHex8::DataWriterHDF5DataFaultMeshHex8(void)
 { // constructor
@@ -98,21 +107,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshHex8::~DataWriterHDF5DataFaultMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,45 +41,52 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_numVertices = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexFieldTensor[2*3] = {
+  1.2, 1.3, 1.4,
+  2.2, 2.3, 2.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexFieldOther[2*2] = {
   1.2, 2.3,
   3.4, 4.5,
 };
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellFieldOther[1*2] = {
+  1.2, 3.2,
+};
 
 pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::DataWriterHDF5DataFaultMeshQuad4(void)
 { // constructor
@@ -94,21 +101,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::~DataWriterHDF5DataFaultMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,47 +41,55 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_numVertices = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexFieldScalar[3*1] = {
+  2.1, 3.2, 4.3,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexFieldVector[3*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3,
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexFieldTensor[3*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexFieldOther[3*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
 };
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellFieldVector[1*3] = {
   1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellFieldTensor[1*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellFieldOther[1*3] = {
+  1.2, 2.3, 3.4,
+};
 
 pylith::meshio::DataWriterHDF5DataFaultMeshTet4::DataWriterHDF5DataFaultMeshTet4(void)
 { // constructor
@@ -96,21 +104,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshTet4::~DataWriterHDF5DataFaultMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,45 +41,52 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_numVertices = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexFieldTensor[2*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexFieldOther[2*2] = {
   1.2, 2.3,
   3.4, 4.5,
 };
 
-const int pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellFieldOther[1*4] = {
+  1.2, 2.3, 3.4, 4.5,
+};
 
 pylith::meshio::DataWriterHDF5DataFaultMeshTri3::DataWriterHDF5DataFaultMeshTri3(void)
 { // constructor
@@ -94,21 +101,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshTri3::~DataWriterHDF5DataFaultMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,16 +45,21 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshHex8::_numVertices = 20;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexFieldScalar[20*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
+  18.1, 19.1, 20.1, 21.1
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexFieldVector[20*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -76,12 +81,29 @@
   31.1, 32.2, 33.3,
   34.4, 35.5, 36.6
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
-  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
-  18.1, 19.1, 20.1, 21.1
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexFieldTensor[20*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
+  12.1, 12.2, 12.3, 12.4, 12.5, 12.6,
+  13.1, 13.2, 13.3, 13.4, 13.5, 13.6,
+  14.1, 14.2, 14.3, 14.4, 14.5, 14.6,
+  15.1, 15.2, 15.3, 15.4, 15.5, 15.6,
+  16.1, 16.2, 16.3, 16.4, 16.5, 16.6,
+  17.1, 17.2, 17.3, 17.4, 17.5, 17.6,
+  18.1, 18.2, 18.3, 18.4, 18.5, 18.6,
+  19.1, 19.2, 19.3, 19.4, 19.5, 19.6,
+  20.1, 20.2, 20.3, 20.4, 20.5, 20.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexFieldOther[20*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -104,24 +126,27 @@
   4.1, 4.2,
 };
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshHex8::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellFieldVector[1*3] = {
   1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellFieldTensor[1*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterHDF5DataMatMeshHex8::DataWriterHDF5DataMatMeshHex8(void)
 { // constructor
@@ -138,21 +163,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshHex8::~DataWriterHDF5DataMatMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMatMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,22 +45,25 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshLine2::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshLine2::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshLine2::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 1 },
+pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexFieldScalar[5*1] = {
   1.1, 2.2, 3.3, 4.4, 5.5
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexFieldVector[5*1] = {
   2.1, 3.2, 4.3, 5.4, 6.5
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexFieldTensor[5*1] = {
+  3.1, 4.2, 5.3, 6.4, 7.5
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexFieldOther[5*2] = {
   1.2, 2.3, 
   3.4, 4.5,
   5.6, 6.7,
@@ -68,24 +71,27 @@
   9.1, 10.2
 };
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshLine2::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshLine2::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 1 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellFieldScalar[1*1] = {
   1.1,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellFieldVector[1*1] = {
   2.1,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellFieldTensor[1*1] = {
   1.2,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterHDF5DataMatMeshLine2::DataWriterHDF5DataMatMeshLine2(void)
 { // constructor
@@ -102,21 +108,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshLine2::~DataWriterHDF5DataMatMeshLine2(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMatMeshLine2

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,16 +41,19 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexFieldVector[6*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -58,10 +61,15 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexFieldTensor[6*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexFieldOther[6*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -70,24 +78,27 @@
   6.5, 5.4
 };
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterHDF5DataMatMeshQuad4::DataWriterHDF5DataMatMeshQuad4(void)
 { // constructor
@@ -102,21 +113,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshQuad4::~DataWriterHDF5DataMatMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMatMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,16 +45,19 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshTet4::_numVertices = 11;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexFieldScalar[11*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexFieldVector[11*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -67,10 +70,20 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexFieldTensor[11*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexFieldOther[11*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -84,26 +97,30 @@
   21.2, 22.3
 };
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshTet4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellFieldScalar[2*1] = {
+  2.1, 3.2
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField1[] = {
-  2.1, 3.2
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellFieldOther[2*2] = {
+  1.2, 2.3,
+  7.8, 8.9,
+};
 
 pylith::meshio::DataWriterHDF5DataMatMeshTet4::DataWriterHDF5DataMatMeshTet4(void)
 { // constructor
@@ -120,21 +137,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshTet4::~DataWriterHDF5DataMatMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMatMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,16 +45,16 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshTri3::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexFieldVector[8*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -64,10 +64,20 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexFieldScalar[8*1] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexFieldTensor[8*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 3.3,
+  3.1, 3.2, 4.3,
+  4.1, 4.2, 5.3,
+  5.1, 5.2, 6.3,
+  6.1, 6.2, 7.3,
+  7.1, 7.2, 8.3,
+  8.1, 8.2, 9.3,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -78,24 +88,27 @@
   15.6, 16.7
 };
 
-const int pylith::meshio::DataWriterHDF5DataMatMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMatMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterHDF5DataMatMeshTri3::DataWriterHDF5DataMatMeshTri3(void)
 { // constructor
@@ -112,21 +125,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshTri3::~DataWriterHDF5DataMatMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMatMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,16 +41,21 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshHex8::_numVertices = 20;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexFieldScalar[20*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
+  18.1, 19.1, 20.1, 21.2
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexFieldVector[20*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -72,12 +77,29 @@
   31.8, 32.9, 33.1,
   34.8, 35.9, 36.1,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
-  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
-  18.1, 19.1, 20.1, 21.2
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexFieldTensor[20*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
+  12.1, 12.2, 12.3, 12.4, 12.5, 12.6,
+  13.1, 13.2, 13.3, 13.4, 13.5, 13.6,
+  14.1, 14.2, 14.3, 14.4, 14.5, 14.6,
+  15.1, 15.2, 15.3, 15.4, 15.5, 15.6,
+  16.1, 16.2, 16.3, 16.4, 16.5, 16.6,
+  17.1, 17.2, 17.3, 17.4, 17.5, 17.6,
+  18.1, 18.2, 18.3, 18.4, 18.5, 18.6,
+  19.1, 19.2, 19.3, 19.4, 19.5, 19.6,
+  20.1, 20.2, 20.3, 20.4, 20.5, 20.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexFieldOther[20*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -100,28 +122,33 @@
   9.1, 10.1
 };
 
-const int pylith::meshio::DataWriterHDF5DataMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshHex8::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellFieldScalar[3*1] = {
+  2.1, 3.2, 4.3
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellFieldVector[3*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField1[] = {
-  2.1, 3.2, 4.3
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellFieldTensor[3*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   1.1, 2.2, 3.3, 4.4, 5.5, 6.6,
   1.3, 2.4, 3.5, 4.6, 5.7, 6.8
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellFieldOther[3*2] = {
+  1.2, 2.3,
+  1.1, 2.2,
+  1.3, 2.4,
+};
 
 pylith::meshio::DataWriterHDF5DataMeshHex8::DataWriterHDF5DataMeshHex8(void)
 { // constructor
@@ -136,21 +163,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshHex8::~DataWriterHDF5DataMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,22 +41,25 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshLine2::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMeshLine2::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshLine2::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 1 },
+pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField0[5] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexFieldScalar[5*1] = {
   1.1, 2.2, 3.3, 4.4, 5.5,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField1[5] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexFieldVector[5*1] = {
   2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField2[10] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexFieldTensor[5*1] = {
+  1.2, 1.3, 1.4, 1.5, 1.6,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexFieldOther[5*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -64,24 +67,29 @@
   9.0, 10.1,
 };
 
-const int pylith::meshio::DataWriterHDF5DataMeshLine2::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshLine2::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshLine2::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMeshLine2::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 1 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField0[3] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellFieldScalar[3*1] = {
   1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField1[3] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellFieldVector[3*1] = {
   2.1, 2.2, 2.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField2[3] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellFieldTensor[3*1] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellFieldOther[3*2] = {
+  1.2, 2.3,
+  3.4, 2.2,
+  3.3, 4.4,
+};
 
 pylith::meshio::DataWriterHDF5DataMeshLine2::DataWriterHDF5DataMeshLine2(void)
 { // constructor
@@ -96,21 +104,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshLine2::~DataWriterHDF5DataMeshLine2(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMeshLine2

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -37,16 +37,19 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshQuad4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexFieldVector[6*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -54,10 +57,15 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexFieldTensor[6*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 3.3,
+  3.1, 3.2, 4.3,
+  4.1, 4.2, 5.3,
+  5.1, 5.2, 6.3,
+  6.1, 6.2, 7.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexFieldOther[6*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -66,26 +74,30 @@
   6.5, 5.4
 };
 
-const int pylith::meshio::DataWriterHDF5DataMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshQuad4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellFieldScalar[2*1] = {
+  2.1, 2.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField1[] = {
-  2.1, 2.2,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellFieldTensor[2*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellFieldOther[2*2] = {
+  1.2, 2.3,
+  4.5, 5.6,
+};
 
 pylith::meshio::DataWriterHDF5DataMeshQuad4::DataWriterHDF5DataMeshQuad4(void)
 { // constructor
@@ -98,21 +110,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshQuad4::~DataWriterHDF5DataMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -55,9 +55,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -66,9 +67,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,16 +41,19 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshTet4::_numVertices = 11;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexFieldScalar[11*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexFieldVector[11*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +66,20 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1,
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexFieldTensor[11*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexFieldOther[11*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -80,28 +93,33 @@
   21.2, 22.3,
 };
 
-const int pylith::meshio::DataWriterHDF5DataMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshTet4::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellFieldScalar[3*1] = {
+  2.1, 3.2, 4.3
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellFieldVector[3*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField1[] = {
-  2.1, 3.2, 4.3
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellFieldTensor[3*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
   13.4, 14.5, 15.6, 16.7, 17.8, 18.9
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellFieldOther[3*4] = {
+  1.2, 2.3, 3.4, 4.5,
+  7.8, 8.9, 9.0, 10.1,
+  13.4, 14.5, 15.6, 16.7,
+};
 
 pylith::meshio::DataWriterHDF5DataMeshTet4::DataWriterHDF5DataMeshTet4(void)
 { // constructor
@@ -116,21 +134,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshTet4::~DataWriterHDF5DataMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,59 +41,76 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshTri3::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexFieldScalar[8*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexFieldVector[8*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
   7.7, 8.8,
   9.9, 10.0,
   11.1, 12.2,
-  13.3, 14.4
+  13.3, 14.4,
+  23.3, 24.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexFieldTensor[8*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
+  7.1, 7.2, 7.3,
+  8.1, 8.2, 8.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
   7.8, 8.9,
   9.0, 10.1,
   11.2, 12.3,
-  13.4, 14.5
+  13.4, 14.5,
+  15.4, 16.5,
 };
 
-const int pylith::meshio::DataWriterHDF5DataMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataMeshTri3::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellFieldScalar[3*1] = {
+  2.1, 2.2, 2.3
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellFieldVector[3*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField1[] = {
-  2.1, 2.2, 2.3
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellFieldTensor[3*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
   7.8, 8.9, 9.0
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellFieldOther[3*2] = {
+  1.2, 2.3,
+  4.5, 5.6,
+  7.8, 8.9,
+};
 
 pylith::meshio::DataWriterHDF5DataMeshTri3::DataWriterHDF5DataMeshTri3(void)
 { // constructor
@@ -108,21 +125,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshTri3::~DataWriterHDF5DataMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -43,16 +43,19 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshHex8::_numVertices = 12;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexFieldScalar[12*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.8, 12.7, 13.6
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexFieldVector[12*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -66,10 +69,21 @@
   7.9, 8.1, 9.2,
   10.3, 11.4, 12.5,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.8, 12.7, 13.6
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexFieldTensor[12*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
+  12.1, 12.2, 12.3, 12.4, 12.5, 12.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexFieldOther[12*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -84,26 +98,30 @@
   11.5, 11.6,
 };
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshHex8::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
-  4.4, 5.5, 6.6
+  4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField1[] = {
-  2.1, 3.2,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
-  7.8, 8.9, 9.0, 10.1, 11.2, 12.3
+  7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellFieldOther[2*3] = {
+  1.2, 2.3, 3.4,
+  7.8, 8.9, 9.0,
+};
 
 pylith::meshio::DataWriterHDF5DataSubMeshHex8::DataWriterHDF5DataSubMeshHex8(void)
 { // constructor
@@ -119,21 +137,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshHex8::~DataWriterHDF5DataSubMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataSubMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,26 +44,25 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshLine2::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshLine2::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshLine2::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField0[] = {
-  1.1, 2.2,
-  3.3, 4.4,
-  5.5, 6.6,
-  7.7, 8.8,
-  9.9, 10.0,
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexFieldScalar[5*1] = {
+  1.1,  3.3,  5.5,  7.7,  9.9,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexFieldVector[5*1] = {
   2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexFieldTensor[5*1] = {
+  3.1, 4.2, 5.3, 6.4, 7.5,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexFieldOther[5*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -71,22 +70,25 @@
   9.0, 10.1,
 };
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshLine2::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshLine2::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellFields[] = {
-  { "traction", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "traction", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField0[] = {
-  1.1, 2.2,
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellFieldScalar[1*1] = {
+  1.1,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellFieldVector[1*1] = {
   2.1,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellFieldTensor[1*1] = {
+  3.1,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellFieldOther[1*3] = {
   1.2, 2.3, 3.4,
 };
 
@@ -104,21 +106,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshLine2::~DataWriterHDF5DataSubMeshLine2(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataSubMeshLine2

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -40,16 +40,19 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexFieldVector[6*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -57,10 +60,15 @@
   9.9, 10.0,
   11.1, 12.2,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexFieldTensor[6*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexFieldOther[6*3] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -69,26 +77,30 @@
   11.3, 12.4,
 };
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField1[] = {
-  2.1, 3.2,
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellFieldTensor[2*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellFieldOther[2*2] = {
+  1.2, 2.3,
+  4.5, 5.6,
+};
 
 pylith::meshio::DataWriterHDF5DataSubMeshQuad4::DataWriterHDF5DataSubMeshQuad4(void)
 { // constructor
@@ -102,21 +114,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshQuad4::~DataWriterHDF5DataSubMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -56,9 +56,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +68,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataSubMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -43,26 +43,33 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshTet4::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexFieldScalar[5*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexFieldVector[5*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
   10.0, 11.1, 12.2,
   13.3, 14.4, 15.5,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5,
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexFieldTensor[5*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexFieldOther[5*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -70,26 +77,30 @@
   9.0, 10.1,
 };
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshTet4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellFieldScalar[2*1] = {
+  2.1, 3.2
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField1[] = {
-  2.1, 3.2
-};
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellFieldOther[2*4] = {
+  1.2, 2.3, 3.4, 4.5,
+  7.8, 8.9, 9.0, 10.1,
+};
 
 pylith::meshio::DataWriterHDF5DataSubMeshTet4::DataWriterHDF5DataSubMeshTet4(void)
 { // constructor
@@ -105,21 +116,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshTet4::~DataWriterHDF5DataSubMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataSubMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,16 +44,19 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshTri3::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
 pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexFieldScalar[8*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+};
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexFieldVector[8*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -63,10 +66,17 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexFieldTensor[8*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
+  7.1, 7.2, 7.3,
+  8.1, 8.2, 8.3,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -77,24 +87,27 @@
   15.6, 16.7,
 };
 
-const int pylith::meshio::DataWriterHDF5DataSubMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterHDF5DataSubMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellFieldScalar[1*1] = {
   2.1,
 };
-const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterHDF5DataSubMeshTri3::DataWriterHDF5DataSubMeshTri3(void)
 { // constructor
@@ -110,21 +123,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshTri3::~DataWriterHDF5DataSubMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterHDF5DataSubMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,16 +44,19 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataBCMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshHex8::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexFieldScalar[8*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexFieldVector[8*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +66,17 @@
   7.8, 8.9, 9.0,
   10.2, 11.3, 12.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexFieldTensor[8*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -77,26 +87,30 @@
   7.9, 8.0,
 };
 
-const int pylith::meshio::DataWriterVTKDataBCMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshHex8::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
-  4.4, 5.5, 6.6
+  4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField1[] = {
-  2.1, 3.2,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
-  7.8, 8.9, 9.0, 10.1, 11.2, 12.3
+  7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellFieldOther[2*2] = {
+  1.1, 2.2,
+  5.5, 6.6,
+};
 
 pylith::meshio::DataWriterVTKDataBCMeshHex8::DataWriterVTKDataBCMeshHex8(void)
 { // constructor
@@ -112,21 +126,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshHex8::~DataWriterVTKDataBCMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataBCMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -40,46 +40,55 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataBCMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshQuad4::_numVertices = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexFieldScalar[3*1] = {
+  2.1, 3.2, 4.3,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexFieldVector[3*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3,
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexFieldTensor[3*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexFieldOther[3*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
 };
 
-const int pylith::meshio::DataWriterVTKDataBCMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshQuad4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellFieldTensor[2*3] = {
+  1.2, 1.3, 1.4,
+  2.2, 2.3, 2.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellFieldOther[2*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -96,21 +105,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshQuad4::~DataWriterVTKDataBCMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -56,9 +56,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +68,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataBCMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,16 +44,19 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataBCMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshTet4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexFieldVector[6*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -61,10 +64,15 @@
   13.3, 14.4, 15.5,
   16.6, 17.7, 18.8,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexFieldTensor[6*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexFieldOther[6*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -73,26 +81,30 @@
   11.2, 12.3,
 };
 
-const int pylith::meshio::DataWriterVTKDataBCMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshTet4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellFieldScalar[2*1] = {
+  2.1, 3.2
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField1[] = {
-  2.1, 3.2
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellFieldOther[2*4] = {
+  1.2, 2.3, 3.4, 4.5,
+  7.8, 8.9, 9.0, 10.1,
+};
 
 pylith::meshio::DataWriterVTKDataBCMeshTet4::DataWriterVTKDataBCMeshTet4(void)
 { // constructor
@@ -108,21 +120,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshTet4::~DataWriterVTKDataBCMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataBCMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,45 +44,51 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataBCMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshTri3::_numVertices = 2;
-
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexFieldTensor[2*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexFieldOther[2*2] = {
   1.2, 2.3,
   3.4, 4.5,
 };
 
-const int pylith::meshio::DataWriterVTKDataBCMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataBCMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellFieldOther[1*2] = {
+  2.1, 2.2,
+};
 
 pylith::meshio::DataWriterVTKDataBCMeshTri3::DataWriterVTKDataBCMeshTri3(void)
 { // constructor
@@ -98,21 +104,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshTri3::~DataWriterVTKDataBCMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataBCMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,49 +41,58 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshHex8::_numVertices = 4;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexFieldScalar[4*1] = {
+  2.1, 3.2, 4.3, 5.4,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexFieldVector[4*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
   10.1, 11.2, 12.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4,
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexFieldTensor[4*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexFieldOther[4*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
   7.8, 8.9,
 };
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshHex8::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
 pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellFields[] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellFieldVector[1*3] = {
   1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellFieldTensor[1*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellFieldOther[1*3] = {
+  1.2, 2.3, 3.4,
+};
 
 pylith::meshio::DataWriterVTKDataFaultMeshHex8::DataWriterVTKDataFaultMeshHex8(void)
 { // constructor
@@ -98,21 +107,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshHex8::~DataWriterVTKDataFaultMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataFaultMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,45 +41,52 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_numVertices = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexFieldTensor[2*3] = {
+  1.2, 1.3, 1.4,
+  2.2, 2.3, 2.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexFieldOther[2*2] = {
   1.2, 2.3,
   3.4, 4.5,
 };
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellFieldOther[1*2] = {
+  1.2, 3.2,
+};
 
 pylith::meshio::DataWriterVTKDataFaultMeshQuad4::DataWriterVTKDataFaultMeshQuad4(void)
 { // constructor
@@ -94,21 +101,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshQuad4::~DataWriterVTKDataFaultMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataFaultMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,47 +41,55 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshTet4::_numVertices = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexFieldScalar[3*1] = {
+  2.1, 3.2, 4.3,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexFieldVector[3*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3,
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexFieldTensor[3*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexFieldOther[3*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
 };
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshTet4::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellFieldVector[1*3] = {
   1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellFieldTensor[1*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellFieldOther[1*3] = {
+  1.2, 2.3, 3.4,
+};
 
 pylith::meshio::DataWriterVTKDataFaultMeshTet4::DataWriterVTKDataFaultMeshTet4(void)
 { // constructor
@@ -96,21 +104,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshTet4::~DataWriterVTKDataFaultMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataFaultMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,45 +41,52 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshTri3::_numVertices = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField1[] = {
-  2.1, 3.2,
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexFieldTensor[2*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexFieldOther[2*2] = {
   1.2, 2.3,
   3.4, 4.5,
 };
 
-const int pylith::meshio::DataWriterVTKDataFaultMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataFaultMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellFieldOther[1*4] = {
+  1.2, 2.3, 3.4, 4.5,
+};
 
 pylith::meshio::DataWriterVTKDataFaultMeshTri3::DataWriterVTKDataFaultMeshTri3(void)
 { // constructor
@@ -94,21 +101,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshTri3::~DataWriterVTKDataFaultMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataFaultMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,16 +45,21 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMatMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshHex8::_numVertices = 20;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexFieldScalar[20*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
+  18.1, 19.1, 20.1, 21.1
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexFieldVector[20*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -76,12 +81,29 @@
   31.1, 32.2, 33.3,
   34.4, 35.5, 36.6
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
-  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
-  18.1, 19.1, 20.1, 21.1
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexFieldTensor[20*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
+  12.1, 12.2, 12.3, 12.4, 12.5, 12.6,
+  13.1, 13.2, 13.3, 13.4, 13.5, 13.6,
+  14.1, 14.2, 14.3, 14.4, 14.5, 14.6,
+  15.1, 15.2, 15.3, 15.4, 15.5, 15.6,
+  16.1, 16.2, 16.3, 16.4, 16.5, 16.6,
+  17.1, 17.2, 17.3, 17.4, 17.5, 17.6,
+  18.1, 18.2, 18.3, 18.4, 18.5, 18.6,
+  19.1, 19.2, 19.3, 19.4, 19.5, 19.6,
+  20.1, 20.2, 20.3, 20.4, 20.5, 20.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexFieldOther[20*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -104,24 +126,27 @@
   4.1, 4.2,
 };
 
-const int pylith::meshio::DataWriterVTKDataMatMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshHex8::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellFieldVector[1*3] = {
   1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellFieldTensor[1*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterVTKDataMatMeshHex8::DataWriterVTKDataMatMeshHex8(void)
 { // constructor
@@ -138,21 +163,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshHex8::~DataWriterVTKDataMatMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMatMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,22 +45,25 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshLine2::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMatMeshLine2::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshLine2::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 1 },
+pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexFieldScalar[5*1] = {
   1.1, 2.2, 3.3, 4.4, 5.5
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexFieldVector[5*1] = {
   2.1, 3.2, 4.3, 5.4, 6.5
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexFieldTensor[5*1] = {
+  3.1, 4.2, 5.3, 6.4, 7.5
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexFieldOther[5*2] = {
   1.2, 2.3, 
   3.4, 4.5,
   5.6, 6.7,
@@ -68,24 +71,27 @@
   9.1, 10.2
 };
 
-const int pylith::meshio::DataWriterVTKDataMatMeshLine2::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshLine2::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 1 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellFieldScalar[1*1] = {
   1.1,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellFieldVector[1*1] = {
   2.1,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellFieldTensor[1*1] = {
   1.2,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterVTKDataMatMeshLine2::DataWriterVTKDataMatMeshLine2(void)
 { // constructor
@@ -102,21 +108,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshLine2::~DataWriterVTKDataMatMeshLine2(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMatMeshLine2

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,16 +41,19 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMatMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshQuad4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexFieldVector[6*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -58,10 +61,15 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexFieldTensor[6*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexFieldOther[6*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -70,24 +78,27 @@
   6.5, 5.4
 };
 
-const int pylith::meshio::DataWriterVTKDataMatMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshQuad4::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterVTKDataMatMeshQuad4::DataWriterVTKDataMatMeshQuad4(void)
 { // constructor
@@ -102,21 +113,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshQuad4::~DataWriterVTKDataMatMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMatMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,16 +45,19 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMatMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshTet4::_numVertices = 11;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexFieldScalar[11*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexFieldVector[11*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -67,10 +70,20 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexFieldTensor[11*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexFieldOther[11*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -84,26 +97,30 @@
   21.2, 22.3
 };
 
-const int pylith::meshio::DataWriterVTKDataMatMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshTet4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellFieldScalar[2*1] = {
+  2.1, 3.2
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField1[] = {
-  2.1, 3.2
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellFieldOther[2*2] = {
+  1.2, 2.3,
+  7.8, 8.9,
+};
 
 pylith::meshio::DataWriterVTKDataMatMeshTet4::DataWriterVTKDataMatMeshTet4(void)
 { // constructor
@@ -120,21 +137,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshTet4::~DataWriterVTKDataMatMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMatMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -45,16 +45,19 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMatMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshTri3::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexFieldScalar[8*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexFieldVector[8*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -64,10 +67,17 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexFieldTensor[8*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 3.3,
+  3.1, 3.2, 4.3,
+  4.1, 4.2, 5.3,
+  5.1, 5.2, 6.3,
+  6.1, 6.2, 7.3,
+  7.1, 7.2, 8.3,
+  8.1, 8.2, 9.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -78,24 +88,27 @@
   15.6, 16.7
 };
 
-const int pylith::meshio::DataWriterVTKDataMatMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMatMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterVTKDataMatMeshTri3::DataWriterVTKDataMatMeshTri3(void)
 { // constructor
@@ -112,21 +125,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshTri3::~DataWriterVTKDataMatMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -59,9 +59,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +71,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMatMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,16 +41,21 @@
 const char* pylith::meshio::DataWriterVTKDataMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshHex8::_numVertices = 20;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexFieldScalar[20*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
+  18.1, 19.1, 20.1, 21.2
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexFieldVector[20*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -72,12 +77,29 @@
   31.8, 32.9, 33.1,
   34.8, 35.9, 36.1,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
-  10.0, 12.1, 11.1, 13.1, 14.1, 15.1, 16.1, 17.1,
-  18.1, 19.1, 20.1, 21.2
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexFieldTensor[20*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
+  12.1, 12.2, 12.3, 12.4, 12.5, 12.6,
+  13.1, 13.2, 13.3, 13.4, 13.5, 13.6,
+  14.1, 14.2, 14.3, 14.4, 14.5, 14.6,
+  15.1, 15.2, 15.3, 15.4, 15.5, 15.6,
+  16.1, 16.2, 16.3, 16.4, 16.5, 16.6,
+  17.1, 17.2, 17.3, 17.4, 17.5, 17.6,
+  18.1, 18.2, 18.3, 18.4, 18.5, 18.6,
+  19.1, 19.2, 19.3, 19.4, 19.5, 19.6,
+  20.1, 20.2, 20.3, 20.4, 20.5, 20.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexFieldOther[20*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -100,28 +122,33 @@
   9.1, 10.1
 };
 
-const int pylith::meshio::DataWriterVTKDataMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshHex8::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellFieldScalar[3*1] = {
+  2.1, 3.2, 4.3
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellFieldVector[3*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellField1[] = {
-  2.1, 3.2, 4.3
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellFieldTensor[3*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   1.1, 2.2, 3.3, 4.4, 5.5, 6.6,
   1.3, 2.4, 3.5, 4.6, 5.7, 6.8
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellFieldOther[3*2] = {
+  1.2, 2.3,
+  1.1, 2.2,
+  1.3, 2.4,
+};
 
 pylith::meshio::DataWriterVTKDataMeshHex8::DataWriterVTKDataMeshHex8(void)
 { // constructor
@@ -136,21 +163,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshHex8::~DataWriterVTKDataMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,47 +41,55 @@
 const char* pylith::meshio::DataWriterVTKDataMeshLine2::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMeshLine2::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshLine2::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshLine2::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 1 },
+pylith::meshio::DataWriterVTKDataMeshLine2::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField0[] = {
-  1.1, 2.2, 3.3, 4.4, 5.5
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexFieldScalar[5*1] = {
+  1.1, 2.2, 3.3, 4.4, 5.5,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexFieldVector[5*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexFieldTensor[5*1] = {
+  1.2, 1.3, 1.4, 1.5, 1.6,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexFieldOther[5*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
   7.8, 8.9,
-  9.0, 10.1
+  9.0, 10.1,
 };
 
-const int pylith::meshio::DataWriterVTKDataMeshLine2::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshLine2::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshLine2::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMeshLine2::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 1 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellField0[] = {
-  1.1, 2.2, 3.3
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellFieldScalar[3*1] = {
+  1.1, 2.2, 3.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellField1[] = {
-  2.1, 2.2, 2.3
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellFieldVector[3*1] = {
+  2.1, 2.2, 2.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellField2[] = {
-  1.2, 2.3, 3.4
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellFieldTensor[3*1] = {
+  1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellFieldOther[3*2] = {
+  1.2, 2.3,
+  3.4, 2.2,
+  3.3, 4.4,
+};
 
 pylith::meshio::DataWriterVTKDataMeshLine2::DataWriterVTKDataMeshLine2(void)
 { // constructor
@@ -96,21 +104,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshLine2::~DataWriterVTKDataMeshLine2(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMeshLine2

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -37,16 +37,19 @@
 const char* pylith::meshio::DataWriterVTKDataMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshQuad4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexFieldVector[6*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -54,10 +57,15 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexFieldTensor[6*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 3.3,
+  3.1, 3.2, 4.3,
+  4.1, 4.2, 5.3,
+  5.1, 5.2, 6.3,
+  6.1, 6.2, 7.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexFieldOther[6*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -66,26 +74,30 @@
   6.5, 5.4
 };
 
-const int pylith::meshio::DataWriterVTKDataMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshQuad4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellFieldScalar[2*1] = {
+  2.1, 2.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField1[] = {
-  2.1, 2.2,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellFieldTensor[2*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellFieldOther[2*2] = {
+  1.2, 2.3,
+  4.5, 5.6,
+};
 
 pylith::meshio::DataWriterVTKDataMeshQuad4::DataWriterVTKDataMeshQuad4(void)
 { // constructor
@@ -98,21 +110,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshQuad4::~DataWriterVTKDataMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -55,9 +55,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -66,9 +67,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,16 +41,19 @@
 const char* pylith::meshio::DataWriterVTKDataMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshTet4::_numVertices = 11;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexFieldScalar[11*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexFieldVector[11*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +66,20 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.0, 12.1,
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexFieldTensor[11*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexFieldOther[11*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -80,28 +93,33 @@
   21.2, 22.3,
 };
 
-const int pylith::meshio::DataWriterVTKDataMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshTet4::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellFieldScalar[3*1] = {
+  2.1, 3.2, 4.3
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellFieldVector[3*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellField1[] = {
-  2.1, 3.2, 4.3
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellFieldTensor[3*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
   13.4, 14.5, 15.6, 16.7, 17.8, 18.9
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellFieldOther[3*4] = {
+  1.2, 2.3, 3.4, 4.5,
+  7.8, 8.9, 9.0, 10.1,
+  13.4, 14.5, 15.6, 16.7,
+};
 
 pylith::meshio::DataWriterVTKDataMeshTet4::DataWriterVTKDataMeshTet4(void)
 { // constructor
@@ -116,21 +134,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshTet4::~DataWriterVTKDataMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -41,61 +41,74 @@
 const char* pylith::meshio::DataWriterVTKDataMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshTri3::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataMeshTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexFieldScalar[8*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexFieldVector[8*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
   7.7, 8.8,
   9.9, 10.0,
   11.1, 12.2,
-  13.3, 14.4,
-  15.5, 16.6,
+  13.3, 14.4
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexFieldTensor[8*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
+  7.1, 7.2, 7.3,
+  8.1, 8.2, 8.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
   7.8, 8.9,
   9.0, 10.1,
   11.2, 12.3,
-  13.4, 14.5,
-  15.6, 16.7,
+  13.4, 14.5
 };
 
-const int pylith::meshio::DataWriterVTKDataMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataMeshTri3::_numCells = 3;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellFieldScalar[3*1] = {
+  2.1, 2.2, 2.3
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellFieldVector[3*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellField1[] = {
-  2.1, 2.2, 2.3
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellFieldTensor[3*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
   7.8, 8.9, 9.0
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellFieldOther[3*2] = {
+  1.2, 2.3,
+  4.5, 5.6,
+  7.8, 8.9,
+};
 
 pylith::meshio::DataWriterVTKDataMeshTri3::DataWriterVTKDataMeshTri3(void)
 { // constructor
@@ -110,21 +123,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshTri3::~DataWriterVTKDataMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -57,9 +57,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +69,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -38,16 +38,38 @@
 const char* pylith::meshio::DataWriterVTKDataPointsHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataPointsHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataPointsHex8::_numVertices = 20;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataPointsHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataPointsHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_vertexFieldScalar[20*1] = {
+  2.1, // 0
+  3.2, // 1
+  4.3, // 2 
+  5.4, // 3
+  6.5, // 4
+  7.6, // 5
+  8.7, // 6
+  9.8, // 7
+  10.0, // 8
+  12.1, // 9
+  11.1, // 10
+  13.1, // 11
+  14.1, // 12
+  15.1, // 13
+  16.1, // 14
+  17.1, // 15
+  18.1, // 16
+  19.1, // 17
+  20.1, // 18
+  21.2, // 19
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_vertexFieldVector[20*3] = {
   1.1, 2.2, 3.3, // 0
   4.4, 5.5, 6.6, // 1
   7.7, 8.8, 9.9, // 2
@@ -69,29 +91,29 @@
   31.8, 32.9, 33.1, // 18
   34.8, 35.9, 36.1, // 19
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_vertexField1[] = {
-  2.1, // 0
-  3.2, // 1
-  4.3, // 2 
-  5.4, // 3
-  6.5, // 4
-  7.6, // 5
-  8.7, // 6
-  9.8, // 7
-  10.0, // 8
-  12.1, // 9
-  11.1, // 10
-  13.1, // 11
-  14.1, // 12
-  15.1, // 13
-  16.1, // 14
-  17.1, // 15
-  18.1, // 16
-  19.1, // 17
-  20.1, // 18
-  21.2, // 19
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_vertexFieldTensor[20*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
+  12.1, 12.2, 12.3, 12.4, 12.5, 12.6,
+  13.1, 13.2, 13.3, 13.4, 13.5, 13.6,
+  14.1, 14.2, 14.3, 14.4, 14.5, 14.6,
+  15.1, 15.2, 15.3, 15.4, 15.5, 15.6,
+  16.1, 16.2, 16.3, 16.4, 16.5, 16.6,
+  17.1, 17.2, 17.3, 17.4, 17.5, 17.6,
+  18.1, 18.2, 18.3, 18.4, 18.5, 18.6,
+  19.1, 19.2, 19.3, 19.4, 19.5, 19.6,
+  20.1, 20.2, 20.3, 20.4, 20.5, 20.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_vertexFieldOther[20*2] = {
   1.2, 2.3, // 0
   3.4, 4.5, // 1
   5.6, 6.7, // 2
@@ -116,7 +138,7 @@
 
 const int pylith::meshio::DataWriterVTKDataPointsHex8::_numPoints = 4;
 const int pylith::meshio::DataWriterVTKDataPointsHex8::_spaceDim = 3;
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_points[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsHex8::_points[4*3] = {
   -0.5, 0.0, 0.5,
   -0.00000001, 0.0, 0.0,
   -0.00000001, 0.0, 0.99999999,
@@ -136,13 +158,13 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
   numPoints = _numPoints;
   spaceDim = _spaceDim;

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -56,9 +56,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Point information.
@@ -66,7 +67,7 @@
   static const int _numPoints; ///< Number of points.
   static const int _spaceDim; ///< Spatial dimension.
   static const PylithScalar _points[]; ///< Coordinates of points.
-  //@}  
+  //@}
 
 }; // DataWriterVTKDataPointsHex8
 

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -34,16 +34,24 @@
 const char* pylith::meshio::DataWriterVTKDataPointsQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataPointsQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataPointsQuad4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexFieldScalar[6*1] = {
+  2.1, // 0
+  3.2, // 1
+  4.3, // 2
+  5.4, // 3
+  6.5, // 4
+  7.6, // 5
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexFieldVector[6*2] = {
   1.1, 2.2, // 0
   3.3, 4.4, // 1
   5.5, 6.6, // 2
@@ -51,15 +59,15 @@
   9.9, 10.1, // 4
   11.2, 12.3, // 5
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexField1[] = {
-  2.1, // 0
-  3.2, // 1
-  4.3, // 2
-  5.4, // 3
-  6.5, // 4
-  7.6, // 5
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexFieldTensor[6*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_vertexFieldOther[6*2] = {
   1.2, 2.3, // 0
   3.4, 4.5, // 1
   5.6, 6.7, // 2
@@ -70,7 +78,7 @@
 
 const int pylith::meshio::DataWriterVTKDataPointsQuad4::_numPoints = 3;
 const int pylith::meshio::DataWriterVTKDataPointsQuad4::_spaceDim = 2;
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_points[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsQuad4::_points[3*2] = {
  -0.5, 0.0,
   0.00000001, 0.0,
   0.99999999, -0.99999999,
@@ -87,13 +95,13 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
   numPoints = _numPoints;
   spaceDim = _spaceDim;

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -54,9 +54,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Point information.
@@ -64,7 +65,7 @@
   static const int _numPoints; ///< Number of points.
   static const int _spaceDim; ///< Spatial dimension.
   static const PylithScalar _points[]; ///< Coordinates of points.
-  //@}  
+  //@}
 
 }; // DataWriterVTKDataPointsQuad4
 

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -38,16 +38,29 @@
 const char* pylith::meshio::DataWriterVTKDataPointsTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataPointsTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataPointsTet4::_numVertices = 11;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataPointsTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataPointsTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_vertexFieldScalar[11*1] = {
+  2.1, // 0
+  3.2, // 1
+  4.3, // 2
+  5.4, // 3
+  6.5, // 4
+  7.6, // 5
+  8.7, // 6
+  9.8,  // 7
+  10.9, // 8
+  11.0, // 9
+  12.1, // 10
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_vertexFieldVector[11*3] = {
   1.1, 2.2, 3.3, // 0
   4.4, 5.5, 6.6, // 1
   7.7, 8.8, 9.9, // 2
@@ -60,20 +73,20 @@
   28.8, 29.9, 30.0, // 9
   31.1, 32.2, 33.3, // 10
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_vertexField1[] = {
-  2.1, // 0
-  3.2, // 1
-  4.3, // 2
-  5.4, // 3
-  6.5, // 4
-  7.6, // 5
-  8.7, // 6
-  9.8,  // 7
-  10.9, // 8
-  11.0, // 9
-  12.1, // 10
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_vertexFieldTensor[11*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_vertexFieldOther[11*2] = {
   1.2, 2.3, // 0
   3.4, 4.5, // 1
   5.6, 6.7, // 2
@@ -89,7 +102,7 @@
 
 const int pylith::meshio::DataWriterVTKDataPointsTet4::_numPoints = 4;
 const int pylith::meshio::DataWriterVTKDataPointsTet4::_spaceDim = 3;
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_points[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTet4::_points[4*3] = {
   -0.33333333, 0.0, 0.33333333,
   +0.00000001, 0.0, 0.33333333,
   +0.00000001, 0.0, 0.00000001,
@@ -109,13 +122,13 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
   numPoints = _numPoints;
   spaceDim = _spaceDim;

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -56,9 +56,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Point information.
@@ -66,7 +67,7 @@
   static const int _numPoints; ///< Number of points.
   static const int _spaceDim; ///< Spatial dimension.
   static const PylithScalar _points[]; ///< Coordinates of points.
-  //@}  
+  //@}
 
 }; // DataWriterVTKDataPointsTet4
 

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -38,16 +38,26 @@
 const char* pylith::meshio::DataWriterVTKDataPointsTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataPointsTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataPointsTri3::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataPointsTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataPointsTri3::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_vertexFieldScalar[8*1] = {
+  2.1, // 0
+  3.2, // 1
+  4.3, // 2
+  5.4, // 3
+  6.5, // 4
+  7.6, // 5
+  8.7,
+  9.8
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_vertexFieldVector[8*2] = {
   1.1, 2.2, // 0
   3.3, 4.4, // 1
   5.5, 6.6, // 2
@@ -57,17 +67,17 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_vertexField1[] = {
-  2.1, // 0
-  3.2, // 1
-  4.3, // 2
-  5.4, // 3
-  6.5, // 4
-  7.6, // 5
-  8.7,
-  9.8
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_vertexFieldTensor[8*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
+  7.1, 7.2, 7.3,
+  8.1, 8.2, 8.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_vertexFieldOther[8*2] = {
   1.2, 2.3, // 0
   3.4, 4.5, // 1
   5.6, 6.7, // 2
@@ -80,7 +90,7 @@
 
 const int pylith::meshio::DataWriterVTKDataPointsTri3::_numPoints = 3;
 const int pylith::meshio::DataWriterVTKDataPointsTri3::_spaceDim = 2;
-const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_points[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataPointsTri3::_points[3*2] = {
  -0.3333333, 0.0,
   0.0000001, 0.0,
   0.9999999, 0.0,
@@ -99,13 +109,13 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
   numPoints = _numPoints;
   spaceDim = _spaceDim;

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataPointsTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -56,9 +56,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Point information.
@@ -66,7 +67,7 @@
   static const int _numPoints; ///< Number of points.
   static const int _spaceDim; ///< Spatial dimension.
   static const PylithScalar _points[]; ///< Coordinates of points.
-  //@}  
+  //@}
 
 }; // DataWriterVTKDataPointsTri3
 

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -43,16 +43,19 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshHex8::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataSubMeshHex8::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshHex8::_numVertices = 12;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexFieldScalar[12*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.8, 12.7, 13.6
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexFieldVector[12*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -66,10 +69,21 @@
   7.9, 8.1, 9.2,
   10.3, 11.4, 12.5,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8, 10.9, 11.8, 12.7, 13.6
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexFieldTensor[12*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
+  6.1, 6.2, 6.3, 6.4, 6.5, 6.6,
+  7.1, 7.2, 7.3, 7.4, 7.5, 7.6,
+  8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
+  9.1, 9.2, 9.3, 9.4, 9.5, 9.6,
+  10.1, 10.2, 10.3, 10.4, 10.5, 10.6,
+  11.1, 11.2, 11.3, 11.4, 11.5, 11.6,
+  12.1, 12.2, 12.3, 12.4, 12.5, 12.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexFieldOther[12*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -84,26 +98,30 @@
   11.5, 11.6,
 };
 
-const int pylith::meshio::DataWriterVTKDataSubMeshHex8::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshHex8::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::TENSOR, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
-  4.4, 5.5, 6.6
+  4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField1[] = {
-  2.1, 3.2,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
-  7.8, 8.9, 9.0, 10.1, 11.2, 12.3
+  7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellFieldOther[2*3] = {
+  1.2, 2.3, 3.4,
+  7.8, 8.9, 9.0,
+};
 
 pylith::meshio::DataWriterVTKDataSubMeshHex8::DataWriterVTKDataSubMeshHex8(void)
 { // constructor
@@ -119,21 +137,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshHex8::~DataWriterVTKDataSubMeshHex8(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataSubMeshHex8

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,26 +44,25 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshLine2::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataSubMeshLine2::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshLine2::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField0[] = {
-  1.1, 2.2,
-  3.3, 4.4,
-  5.5, 6.6,
-  7.7, 8.8,
-  9.9, 10.0,
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexFieldScalar[5*1] = {
+  1.1,  3.3,  5.5,  7.7,  9.9,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexFieldVector[5*1] = {
   2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexFieldTensor[5*1] = {
+  3.1, 4.2, 5.3, 6.4, 7.5,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexFieldOther[5*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -71,22 +70,25 @@
   9.0, 10.1,
 };
 
-const int pylith::meshio::DataWriterVTKDataSubMeshLine2::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshLine2::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellFields[] = {
-  { "traction", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "traction", topology::FieldBase::VECTOR, 1 },
+  { "stress", topology::FieldBase::TENSOR, 1 },
+  { "other", topology::FieldBase::OTHER, 3 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField0[] = {
-  1.1, 2.2,
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellFieldScalar[1*1] = {
+  1.1,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellFieldVector[1*1] = {
   2.1,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellFieldTensor[1*1] = {
+  3.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellFieldOther[1*3] = {
   1.2, 2.3, 3.4,
 };
 
@@ -104,21 +106,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshLine2::~DataWriterVTKDataSubMeshLine2(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataSubMeshLine2

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -40,16 +40,19 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshQuad4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataSubMeshQuad4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshQuad4::_numVertices = 6;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
+pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexFieldScalar[6*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexFieldVector[6*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -57,10 +60,15 @@
   9.9, 10.0,
   11.1, 12.2,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexFieldTensor[6*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexFieldOther[6*3] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -69,26 +77,30 @@
   11.3, 12.4,
 };
 
-const int pylith::meshio::DataWriterVTKDataSubMeshQuad4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshQuad4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellFieldScalar[2*1] = {
+  2.1, 3.2,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellFieldVector[2*2] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField1[] = {
-  2.1, 3.2,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellFieldTensor[2*3] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellFieldOther[2*2] = {
+  1.2, 2.3,
+  4.5, 5.6,
+};
 
 pylith::meshio::DataWriterVTKDataSubMeshQuad4::DataWriterVTKDataSubMeshQuad4(void)
 { // constructor
@@ -102,21 +114,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshQuad4::~DataWriterVTKDataSubMeshQuad4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -56,9 +56,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +68,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataSubMeshQuad4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -43,26 +43,33 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshTet4::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataSubMeshTet4::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshTet4::_numVertices = 5;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 3 },
+pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexFields[4] = {
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexFieldScalar[5*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexFieldVector[5*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
   10.0, 11.1, 12.2,
   13.3, 14.4, 15.5,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5,
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexFieldTensor[5*6] = {
+  1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
+  2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
+  3.1, 3.2, 3.3, 3.4, 3.5, 3.6,
+  4.1, 4.2, 4.3, 4.4, 4.5, 4.6,
+  5.1, 5.2, 5.3, 5.4, 5.5, 5.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexFieldOther[5*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -70,26 +77,30 @@
   9.0, 10.1,
 };
 
-const int pylith::meshio::DataWriterVTKDataSubMeshTet4::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshTet4::_numCells = 2;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 3 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 6 },
+  { "stress", topology::FieldBase::TENSOR, 6 },
+  { "other", topology::FieldBase::OTHER, 4 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellFieldScalar[2*1] = {
+  2.1, 3.2
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellFieldVector[2*3] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField1[] = {
-  2.1, 3.2
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellFieldTensor[2*6] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellFieldOther[2*4] = {
+  1.2, 2.3, 3.4, 4.5,
+  7.8, 8.9, 9.0, 10.1,
+};
 
 pylith::meshio::DataWriterVTKDataSubMeshTet4::DataWriterVTKDataSubMeshTet4(void)
 { // constructor
@@ -105,21 +116,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
-  assert(3 == numVertexFields);
   numVertices = _numVertices;
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
-  assert(3 == numCellFields);
   numCells = _numCells;
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshTet4::~DataWriterVTKDataSubMeshTet4(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataSubMeshTet4

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc	2012-09-17 21:52:11 UTC (rev 20722)
@@ -44,16 +44,19 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshTri3::_timeFormat = 
   "%3.1f";
 
-const int pylith::meshio::DataWriterVTKDataSubMeshTri3::_numVertexFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshTri3::_numVertices = 8;
 
 const pylith::meshio::DataWriterData::FieldStruct
 pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexFields[] = {
-  { "displacements", topology::FieldBase::VECTOR, 2 },
   { "pressure", topology::FieldBase::SCALAR, 1 },
+  { "displacement", topology::FieldBase::VECTOR, 2 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexFieldScalar[8*1] = {
+  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexFieldVector[8*2] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -63,10 +66,17 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField1[] = {
-  2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexFieldTensor[8*3] = {
+  1.1, 1.2, 1.3,
+  2.1, 2.2, 2.3,
+  3.1, 3.2, 3.3,
+  4.1, 4.2, 4.3,
+  5.1, 5.2, 5.3,
+  6.1, 6.2, 6.3,
+  7.1, 7.2, 7.3,
+  8.1, 8.2, 8.3,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexFieldOther[8*2] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -77,24 +87,27 @@
   15.6, 16.7,
 };
 
-const int pylith::meshio::DataWriterVTKDataSubMeshTri3::_numCellFields = 3;
 const int pylith::meshio::DataWriterVTKDataSubMeshTri3::_numCells = 1;
 
 const pylith::meshio::DataWriterData::FieldStruct
-pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellFields[] = {
+pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellFields[4] = {
+  { "pressure", topology::FieldBase::SCALAR, 1 },
   { "traction", topology::FieldBase::VECTOR, 2 },
-  { "pressure", topology::FieldBase::SCALAR, 1 },
-  { "other", topology::FieldBase::TENSOR, 3 },
+  { "stress", topology::FieldBase::TENSOR, 3 },
+  { "other", topology::FieldBase::OTHER, 2 },
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellFieldScalar[1*1] = {
+  2.1,
+};
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellFieldVector[1*2] = {
   1.1, 2.2,
 };
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField1[] = {
-  2.1,
-};
-const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellFieldTensor[1*3] = {
   1.2, 2.3, 3.4,
 };
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellFieldOther[1*2] = {
+  1.2, 2.3,
+};
 
 pylith::meshio::DataWriterVTKDataSubMeshTri3::DataWriterVTKDataSubMeshTri3(void)
 { // constructor
@@ -110,21 +123,21 @@
   time = _time;
   timeFormat = const_cast<char*>(_timeFormat);
   
-  numVertexFields = _numVertexFields;
   numVertices = _numVertices;
-  assert(3 == numVertexFields);
+  assert(DataWriterData::numVertexFields == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
-  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
-  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexFieldScalar);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexFieldVector);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexFieldTensor);
+  vertexFields[3] = const_cast<PylithScalar*>(_vertexFieldOther);
 
-  numCellFields = _numCellFields;
   numCells = _numCells;
-  assert(3 == numCellFields);
+  assert(DataWriterData::numCellFields == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
-  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
-  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellFieldScalar);
+  cellFields[1] = const_cast<PylithScalar*>(_cellFieldVector);
+  cellFields[2] = const_cast<PylithScalar*>(_cellFieldTensor);
+  cellFields[3] = const_cast<PylithScalar*>(_cellFieldOther);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshTri3::~DataWriterVTKDataSubMeshTri3(void)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh	2012-09-17 21:52:11 UTC (rev 20722)
@@ -58,9 +58,10 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const PylithScalar _vertexField0[]; ///< Values for vertex field 0.
-  static const PylithScalar _vertexField1[]; ///< Values for vertex field 1.
-  static const PylithScalar _vertexField2[]; ///< Values for vertex field 2.
+  static const PylithScalar _vertexFieldScalar[]; ///< Values for scalar vertex field.
+  static const PylithScalar _vertexFieldVector[]; ///< Values for vector vertex field .
+  static const PylithScalar _vertexFieldTensor[]; ///< Values for tensor vertex field.
+  static const PylithScalar _vertexFieldOther[]; ///< Values for other vertex field.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +70,10 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const PylithScalar _cellField0[]; ///< Values for cell field 0.
-  static const PylithScalar _cellField1[]; ///< Values for cell field 1.
-  static const PylithScalar _cellField2[]; ///< Values for cell field 2.
+  static const PylithScalar _cellFieldScalar[]; ///< Values for scalar cell field.
+  static const PylithScalar _cellFieldVector[]; ///< Values for vector cell field.
+  static const PylithScalar _cellFieldTensor[]; ///< Values for tensor cell field.
+  static const PylithScalar _cellFieldOther[]; ///< Values for other cell field.
   //@}
 
 }; // DataWriterVTKDataSubMeshTri3

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/Makefile.am
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/Makefile.am	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/Makefile.am	2012-09-17 21:52:11 UTC (rev 20722)
@@ -124,7 +124,9 @@
 	tri3_vertex.xmf \
 	quad4.h5 \
 	quad4_cell.h5 \
+	quad4_cell.xmf \
 	quad4_vertex.h5 \
+	quad4_vertex.xmf \
 	tet4.h5 \
 	tet4_cell.h5 \
 	tet4_cell.xmf \
@@ -132,7 +134,9 @@
 	tet4_vertex.xmf \
 	hex8.h5 \
 	hex8_cell.h5 \
+	hex8_cell.xmf \
 	hex8_vertex.h5 \
+	hex8_vertex.xmf \
 	line2_mat.h5 \
 	line2_mat_vertex.h5 \
 	line2_mat_cell.h5 \

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,14 +18,18 @@
 9
 9
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
 7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01
+SCALARS other double 2
+LOOKUP_TABLE default
+1.100000e+00 2.200000e+00
+5.500000e+00 6.600000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_bc_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,15 +18,6 @@
 9
 9
 POINT_DATA 8
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
-1.010000e+01 1.120000e+01 1.230000e+01
-1.200000e+00 2.300000e+00 3.400000e+00
-4.500000e+00 5.600000e+00 6.700000e+00
-7.800000e+00 8.900000e+00 9.000000e+00
-1.020000e+01 1.130000e+01 1.240000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -37,6 +28,25 @@
 7.600000e+00
 8.700000e+00
 9.800000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
+7.100000e+00 7.200000e+00 7.300000e+00 7.400000e+00 7.500000e+00 7.600000e+00
+8.100000e+00 8.200000e+00 8.300000e+00 8.400000e+00 8.500000e+00 8.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell.h5
===================================================================
(Binary files differ)

Added: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell.xmf	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -0,0 +1,124 @@
+<?xml version="1.0" ?>
+<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" [
+<!ENTITY HeavyData "hex8_cell.h5">
+]>
+
+<Xdmf>
+  <Domain Name="domain">
+    <DataItem Name="cells"
+	      ItemType="Uniform"
+	      Format="HDF"
+	      NumberType="Float" Precision="8"
+	      Dimensions="2 8">
+      &HeavyData;:/topology/cells
+    </DataItem>
+    <DataItem Name="vertices"
+	      Format="HDF"
+	      Dimensions="16 3">
+      &HeavyData;:/geometry/vertices
+    </DataItem>
+    <!-- ============================================================ -->
+    <Grid Name="domain" GridType="Uniform">
+	<Topology
+	   TopologyType="Hexahedron"
+	   NumberOfElements="2">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="cells"]
+	  </DataItem>
+	</Topology>
+	<Geometry GeometryType="XYZ">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="vertices"]
+	  </DataItem>
+	</Geometry>
+	<Attribute
+	   Name="other"
+	   Type="Matrix"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 2"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 2
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 2"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/other
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="pressure"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 1"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/pressure
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress"
+	   Type="Tensor6"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 6"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 6
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 6"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="traction"
+	   Type="Vector"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 3"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 3
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 3"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/traction
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+    </Grid>
+  </Domain>
+</Xdmf>

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -26,14 +26,18 @@
 12
 12
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
 1.100000e+00 2.200000e+00 3.300000e+00 4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00
+1.100000e+00 2.200000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -12,11 +12,13 @@
 CELL_TYPES 1
 9
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+VECTORS other double
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_fault_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -12,17 +12,23 @@
 CELL_TYPES 1
 9
 POINT_DATA 4
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
-1.010000e+01 1.120000e+01 1.230000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
 4.300000e+00
 5.400000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -24,11 +24,14 @@
 CELL_TYPES 1
 12
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_mat_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -24,23 +24,6 @@
 CELL_TYPES 1
 12
 POINT_DATA 16
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
-1.010000e+01 1.120000e+01 1.230000e+01
-1.200000e+00 2.300000e+00 3.400000e+00
-4.500000e+00 5.600000e+00 6.700000e+00
-7.800000e+00 8.900000e+00 9.000000e+00
-1.020000e+01 1.130000e+01 1.240000e+01
-1.300000e+00 2.400000e+00 3.500000e+00
-4.600000e+00 5.700000e+00 6.800000e+00
-7.900000e+00 8.000000e+00 9.100000e+00
-1.020000e+01 1.130000e+01 1.240000e+01
-1.350000e+01 1.460000e+01 1.570000e+01
-1.680000e+01 1.790000e+01 1.810000e+01
-1.920000e+01 2.030000e+01 2.140000e+01
-2.250000e+01 2.360000e+01 2.470000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -59,6 +42,41 @@
 1.510000e+01
 1.610000e+01
 1.710000e+01
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.300000e+00 2.400000e+00 3.500000e+00
+4.600000e+00 5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00 9.100000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.350000e+01 1.460000e+01 1.570000e+01
+1.680000e+01 1.790000e+01 1.810000e+01
+1.920000e+01 2.030000e+01 2.140000e+01
+2.250000e+01 2.360000e+01 2.470000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
+7.100000e+00 7.200000e+00 7.300000e+00 7.400000e+00 7.500000e+00 7.600000e+00
+8.100000e+00 8.200000e+00 8.300000e+00 8.400000e+00 8.500000e+00 8.600000e+00
+9.100000e+00 9.200000e+00 9.300000e+00 9.400000e+00 9.500000e+00 9.600000e+00
+1.010000e+01 1.020000e+01 1.030000e+01 1.040000e+01 1.050000e+01 1.060000e+01
+1.110000e+01 1.120000e+01 1.130000e+01 1.140000e+01 1.150000e+01 1.160000e+01
+1.210000e+01 1.220000e+01 1.230000e+01 1.240000e+01 1.250000e+01 1.260000e+01
+1.310000e+01 1.320000e+01 1.330000e+01 1.340000e+01 1.350000e+01 1.360000e+01
+1.410000e+01 1.420000e+01 1.430000e+01 1.440000e+01 1.450000e+01 1.460000e+01
+1.510000e+01 1.520000e+01 1.530000e+01 1.540000e+01 1.550000e+01 1.560000e+01
+1.610000e+01 1.620000e+01 1.630000e+01 1.640000e+01 1.650000e+01 1.660000e+01
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_points_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_points_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_points_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,17 +18,23 @@
 1
 1
 POINT_DATA 4
-VECTORS displacements double
-5.937500e+00 7.037500e+00 7.950000e+00
-5.925000e+00 7.025000e+00 8.125000e+00
-2.950000e+00 4.050000e+00 5.150000e+00
-4.500000e+00 5.600000e+00 6.700000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 8.550000e+00
 7.950000e+00
 1.105000e+01
 7.600000e+00
+VECTORS displacement double
+5.937500e+00 7.037500e+00 7.950000e+00
+5.925000e+00 7.025000e+00 8.125000e+00
+2.950000e+00 4.050000e+00 5.150000e+00
+4.500000e+00 5.600000e+00 6.700000e+00
+SCALARS stress double 6
+LOOKUP_TABLE default
+7.100000e+00 7.200000e+00 7.300000e+00 7.400000e+00 7.500000e+00 7.600000e+00
+6.600000e+00 6.700000e+00 6.800000e+00 6.900000e+00 7.000000e+00 7.100000e+00
+9.600000e+00 9.700000e+00 9.800000e+00 9.900000e+00 1.000000e+01 1.010000e+01
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 4.575000e+00 5.487500e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,14 +16,17 @@
 9
 9
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
 7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01
+VECTORS other double
+1.200000e+00 2.300000e+00 3.400000e+00
+7.800000e+00 8.900000e+00 9.000000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_surf_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,13 +16,6 @@
 9
 9
 POINT_DATA 6
-VECTORS displacements double
-7.800000e+00 8.900000e+00 9.000000e+00
-1.020000e+01 1.130000e+01 1.240000e+01
-1.300000e+00 2.400000e+00 3.500000e+00
-4.600000e+00 5.700000e+00 6.800000e+00
-7.900000e+00 8.100000e+00 9.200000e+00
-1.030000e+01 1.140000e+01 1.250000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 8.700000e+00
@@ -31,6 +24,21 @@
 1.180000e+01
 1.270000e+01
 1.360000e+01
+VECTORS displacement double
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.300000e+00 2.400000e+00 3.500000e+00
+4.600000e+00 5.700000e+00 6.800000e+00
+7.900000e+00 8.100000e+00 9.200000e+00
+1.030000e+01 1.140000e+01 1.250000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+7.100000e+00 7.200000e+00 7.300000e+00 7.400000e+00 7.500000e+00 7.600000e+00
+8.100000e+00 8.200000e+00 8.300000e+00 8.400000e+00 8.500000e+00 8.600000e+00
+9.100000e+00 9.200000e+00 9.300000e+00 9.400000e+00 9.500000e+00 9.600000e+00
+1.010000e+01 1.020000e+01 1.030000e+01 1.040000e+01 1.050000e+01 1.060000e+01
+1.110000e+01 1.120000e+01 1.130000e+01 1.140000e+01 1.150000e+01 1.160000e+01
+1.210000e+01 1.220000e+01 1.230000e+01 1.240000e+01 1.250000e+01 1.260000e+01
 SCALARS other double 2
 LOOKUP_TABLE default
 5.700000e+00 6.800000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex.h5
===================================================================
(Binary files differ)

Added: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex.xmf	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -0,0 +1,124 @@
+<?xml version="1.0" ?>
+<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" [
+<!ENTITY HeavyData "hex8_vertex.h5">
+]>
+
+<Xdmf>
+  <Domain Name="domain">
+    <DataItem Name="cells"
+	      ItemType="Uniform"
+	      Format="HDF"
+	      NumberType="Float" Precision="8"
+	      Dimensions="2 8">
+      &HeavyData;:/topology/cells
+    </DataItem>
+    <DataItem Name="vertices"
+	      Format="HDF"
+	      Dimensions="16 3">
+      &HeavyData;:/geometry/vertices
+    </DataItem>
+    <!-- ============================================================ -->
+    <Grid Name="domain" GridType="Uniform">
+	<Topology
+	   TopologyType="Hexahedron"
+	   NumberOfElements="2">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="cells"]
+	  </DataItem>
+	</Topology>
+	<Geometry GeometryType="XYZ">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="vertices"]
+	  </DataItem>
+	</Geometry>
+	<Attribute
+	   Name="displacement"
+	   Type="Vector"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 16 3"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 16 3
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 16 3"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/displacement
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="other"
+	   Type="Matrix"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 16 2"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 16 2
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 16 2"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/other
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="pressure"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 16 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 16 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 16 1"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/pressure
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress"
+	   Type="Tensor6"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 16 6"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 16 6
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 16 6"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+    </Grid>
+  </Domain>
+</Xdmf>

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/hex8_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -26,23 +26,6 @@
 12
 12
 POINT_DATA 16
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
-1.010000e+01 1.120000e+01 1.230000e+01
-1.200000e+00 2.300000e+00 3.400000e+00
-4.500000e+00 5.600000e+00 6.700000e+00
-7.800000e+00 8.900000e+00 9.000000e+00
-1.020000e+01 1.130000e+01 1.240000e+01
-1.300000e+00 2.400000e+00 3.500000e+00
-4.600000e+00 5.700000e+00 6.800000e+00
-7.900000e+00 8.000000e+00 9.100000e+00
-1.020000e+01 1.130000e+01 1.240000e+01
-1.350000e+01 1.460000e+01 1.570000e+01
-1.680000e+01 1.790000e+01 1.810000e+01
-1.920000e+01 2.030000e+01 2.140000e+01
-2.250000e+01 2.360000e+01 2.470000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -61,6 +44,41 @@
 1.510000e+01
 1.610000e+01
 1.710000e+01
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.010000e+01 1.120000e+01 1.230000e+01
+1.200000e+00 2.300000e+00 3.400000e+00
+4.500000e+00 5.600000e+00 6.700000e+00
+7.800000e+00 8.900000e+00 9.000000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.300000e+00 2.400000e+00 3.500000e+00
+4.600000e+00 5.700000e+00 6.800000e+00
+7.900000e+00 8.000000e+00 9.100000e+00
+1.020000e+01 1.130000e+01 1.240000e+01
+1.350000e+01 1.460000e+01 1.570000e+01
+1.680000e+01 1.790000e+01 1.810000e+01
+1.920000e+01 2.030000e+01 2.140000e+01
+2.250000e+01 2.360000e+01 2.470000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
+7.100000e+00 7.200000e+00 7.300000e+00 7.400000e+00 7.500000e+00 7.600000e+00
+8.100000e+00 8.200000e+00 8.300000e+00 8.400000e+00 8.500000e+00 8.600000e+00
+9.100000e+00 9.200000e+00 9.300000e+00 9.400000e+00 9.500000e+00 9.600000e+00
+1.010000e+01 1.020000e+01 1.030000e+01 1.040000e+01 1.050000e+01 1.060000e+01
+1.110000e+01 1.120000e+01 1.130000e+01 1.140000e+01 1.150000e+01 1.160000e+01
+1.210000e+01 1.220000e+01 1.230000e+01 1.240000e+01 1.250000e+01 1.260000e+01
+1.310000e+01 1.320000e+01 1.330000e+01 1.340000e+01 1.350000e+01 1.360000e+01
+1.410000e+01 1.420000e+01 1.430000e+01 1.440000e+01 1.450000e+01 1.460000e+01
+1.510000e+01 1.520000e+01 1.530000e+01 1.540000e+01 1.550000e+01 1.560000e+01
+1.610000e+01 1.620000e+01 1.630000e+01 1.640000e+01 1.650000e+01 1.660000e+01
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,14 +14,18 @@
 3
 3
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 0.0 0.0
-2.200000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.100000e+00
+1.100000e+00
 2.200000e+00
-SCALARS other double 1
+VECTORS traction double
+2.100000e+00 0.0 0.0
+2.200000e+00 0.0 0.0
+SCALARS stress double 1
 LOOKUP_TABLE default
 1.200000e+00
 2.300000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00
+3.400000e+00 2.200000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -12,11 +12,14 @@
 CELL_TYPES 1
 3
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.100000e+00
-SCALARS other double 1
+1.100000e+00
+VECTORS traction double
+2.100000e+00 0.0 0.0
+SCALARS stress double 1
 LOOKUP_TABLE default
 1.200000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_mat_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -12,17 +12,23 @@
 CELL_TYPES 1
 3
 POINT_DATA 4
-VECTORS displacements double
-1.100000e+00 0.0 0.0
-2.200000e+00 0.0 0.0
-3.300000e+00 0.0 0.0
-4.400000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.100000e+00
-3.200000e+00
-4.300000e+00
-5.400000e+00
+1.100000e+00
+2.200000e+00
+3.300000e+00
+4.400000e+00
+VECTORS displacement double
+2.100000e+00 0.0 0.0
+3.200000e+00 0.0 0.0
+4.300000e+00 0.0 0.0
+5.400000e+00 0.0 0.0
+SCALARS stress double 1
+LOOKUP_TABLE default
+3.100000e+00
+4.200000e+00
+5.300000e+00
+6.400000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -9,10 +9,13 @@
 CELL_TYPES 1
 1
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.100000e+00
+1.100000e+00
+VECTORS traction double
+2.100000e+00 0.0 0.0
+SCALARS stress double 1
+LOOKUP_TABLE default
+3.100000e+00
 VECTORS other double
 1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_surf_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -9,11 +9,14 @@
 CELL_TYPES 1
 1
 POINT_DATA 1
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.100000e+00
+1.100000e+00
+VECTORS displacement double
+2.100000e+00 0.0 0.0
+SCALARS stress double 1
+LOOKUP_TABLE default
+3.100000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/line2_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,17 +14,23 @@
 3
 3
 POINT_DATA 4
-VECTORS displacements double
-1.100000e+00 0.0 0.0
-2.200000e+00 0.0 0.0
-3.300000e+00 0.0 0.0
-4.400000e+00 0.0 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
-2.100000e+00
-3.200000e+00
-4.300000e+00
-5.400000e+00
+1.100000e+00
+2.200000e+00
+3.300000e+00
+4.400000e+00
+VECTORS displacement double
+2.100000e+00 0.0 0.0
+3.200000e+00 0.0 0.0
+4.300000e+00 0.0 0.0
+5.400000e+00 0.0 0.0
+SCALARS stress double 1
+LOOKUP_TABLE default
+1.200000e+00
+1.300000e+00
+1.400000e+00
+1.500000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -13,13 +13,16 @@
 3
 3
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+VECTORS stress double
+1.200000e+00 1.300000e+00 1.400000e+00
+2.200000e+00 2.300000e+00 2.400000e+00
 VECTORS other double
 1.200000e+00 2.300000e+00 3.400000e+00
 4.500000e+00 5.600000e+00 6.700000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_bc_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -13,15 +13,19 @@
 3
 3
 POINT_DATA 3
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
-5.500000e+00 6.600000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
 4.300000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+2.100000e+00 2.200000e+00 2.300000e+00
+3.100000e+00 3.200000e+00 3.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell.h5
===================================================================
(Binary files differ)

Added: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell.xmf	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -0,0 +1,212 @@
+<?xml version="1.0" ?>
+<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" [
+<!ENTITY HeavyData "quad4_cell.h5">
+]>
+
+<Xdmf>
+  <Domain Name="domain">
+    <DataItem Name="cells"
+	      ItemType="Uniform"
+	      Format="HDF"
+	      NumberType="Float" Precision="8"
+	      Dimensions="2 4">
+      &HeavyData;:/topology/cells
+    </DataItem>
+    <DataItem Name="vertices"
+	      Format="HDF"
+	      Dimensions="6 2">
+      &HeavyData;:/geometry/vertices
+    </DataItem>
+    <!-- ============================================================ -->
+    <Grid Name="domain" GridType="Uniform">
+	<Topology
+	   TopologyType="Quadrilateral"
+	   NumberOfElements="2">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="cells"]
+	  </DataItem>
+	</Topology>
+	<Geometry GeometryType="XY">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="vertices"]
+	  </DataItem>
+	</Geometry>
+	<Attribute
+	   Name="other_0"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 2"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/other
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="other_1"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 2"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/other
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="pressure"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 1"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/pressure
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_xx"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 3"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_yy"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 3"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_xy"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 2
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 3"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="traction_x"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 2"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/traction
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="traction_y"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 2"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/traction
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+    </Grid>
+  </Domain>
+</Xdmf>

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,13 +16,17 @@
 9
 9
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 2.200000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
 4.500000e+00 5.600000e+00 6.700000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00
+4.500000e+00 5.600000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,10 +10,13 @@
 CELL_TYPES 1
 3
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 3.200000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_fault_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,13 +10,16 @@
 CELL_TYPES 1
 3
 POINT_DATA 2
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+VECTORS stress double
+1.200000e+00 1.300000e+00 1.400000e+00
+2.200000e+00 2.300000e+00 2.400000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,10 +14,13 @@
 CELL_TYPES 1
 9
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_mat_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,13 +14,6 @@
 CELL_TYPES 1
 9
 POINT_DATA 6
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
-5.500000e+00 6.600000e+00 0.0
-7.700000e+00 8.800000e+00 0.0
-9.900000e+00 1.010000e+01 0.0
-1.120000e+01 1.230000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -29,6 +22,20 @@
 5.400000e+00
 6.500000e+00
 7.600000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.010000e+01 0.0
+1.120000e+01 1.230000e+01 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+2.100000e+00 2.200000e+00 2.300000e+00
+3.100000e+00 3.200000e+00 3.300000e+00
+4.100000e+00 4.200000e+00 4.300000e+00
+5.100000e+00 5.200000e+00 5.300000e+00
+6.100000e+00 6.200000e+00 6.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_points_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_points_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_points_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -15,15 +15,19 @@
 1
 1
 POINT_DATA 3
-VECTORS displacements double
-4.400000e+00 5.500000e+00 0.0
-6.600000e+00 7.700000e+00 0.0
-9.900000e+00 1.010000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 3.750000e+00
 4.850000e+00
 6.500000e+00
+VECTORS displacement double
+4.400000e+00 5.500000e+00 0.0
+6.600000e+00 7.700000e+00 0.0
+9.900000e+00 1.010000e+01 0.0
+VECTORS stress double
+2.600000e+00 2.700000e+00 2.800000e+00
+3.600000e+00 3.700000e+00 3.800000e+00
+5.100000e+00 5.200000e+00 5.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 4.500000e+00 5.600000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -13,13 +13,17 @@
 3
 3
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
 4.500000e+00 5.600000e+00 6.700000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00
+4.500000e+00 5.600000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_surf_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -13,15 +13,19 @@
 3
 3
 POINT_DATA 3
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-5.500000e+00 6.600000e+00 0.0
-9.900000e+00 1.000000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 4.300000e+00
 6.500000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+9.900000e+00 1.000000e+01 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+3.100000e+00 3.200000e+00 3.300000e+00
+5.100000e+00 5.200000e+00 5.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex.h5
===================================================================
(Binary files differ)

Added: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex.xmf	                        (rev 0)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -0,0 +1,212 @@
+<?xml version="1.0" ?>
+<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" [
+<!ENTITY HeavyData "quad4_vertex.h5">
+]>
+
+<Xdmf>
+  <Domain Name="domain">
+    <DataItem Name="cells"
+	      ItemType="Uniform"
+	      Format="HDF"
+	      NumberType="Float" Precision="8"
+	      Dimensions="2 4">
+      &HeavyData;:/topology/cells
+    </DataItem>
+    <DataItem Name="vertices"
+	      Format="HDF"
+	      Dimensions="6 2">
+      &HeavyData;:/geometry/vertices
+    </DataItem>
+    <!-- ============================================================ -->
+    <Grid Name="domain" GridType="Uniform">
+	<Topology
+	   TopologyType="Quadrilateral"
+	   NumberOfElements="2">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="cells"]
+	  </DataItem>
+	</Topology>
+	<Geometry GeometryType="XY">
+	  <DataItem Reference="XML">
+	    /Xdmf/Domain/DataItem[@Name="vertices"]
+	  </DataItem>
+	</Geometry>
+	<Attribute
+	   Name="displacement_x"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 2"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/displacement
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="displacement_y"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 2"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/displacement
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="other_0"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 2"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/other
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="other_1"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 2"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/other
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="pressure"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 1"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/pressure
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_xx"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 3"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_yy"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 3"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_xy"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 2
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 3"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+    </Grid>
+  </Domain>
+</Xdmf>

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/quad4_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,13 +16,6 @@
 9
 9
 POINT_DATA 6
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
-5.500000e+00 6.600000e+00 0.0
-7.700000e+00 8.800000e+00 0.0
-9.900000e+00 1.010000e+01 0.0
-1.120000e+01 1.230000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -31,6 +24,20 @@
 5.400000e+00
 6.500000e+00
 7.600000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.010000e+01 0.0
+1.120000e+01 1.230000e+01 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+2.100000e+00 2.200000e+00 3.300000e+00
+3.100000e+00 3.200000e+00 4.300000e+00
+4.100000e+00 4.200000e+00 5.300000e+00
+5.100000e+00 5.200000e+00 6.300000e+00
+6.100000e+00 6.200000e+00 7.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,14 +16,18 @@
 5
 5
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
 7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01
+SCALARS other double 4
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_bc_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,13 +16,6 @@
 5
 5
 POINT_DATA 6
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
-1.000000e+01 1.110000e+01 1.220000e+01
-1.330000e+01 1.440000e+01 1.550000e+01
-1.660000e+01 1.770000e+01 1.880000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -31,6 +24,21 @@
 5.400000e+00
 6.500000e+00
 7.600000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
+1.660000e+01 1.770000e+01 1.880000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell.xmf	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -33,21 +33,21 @@
 	</Geometry>
 	<Attribute
 	   Name="other"
-	   Type="Tensor6"
+	   Type="Matrix"
 	   Center="Cell">
           <DataItem ItemType="HyperSlab"
-		    Dimensions="1 2 6"
+		    Dimensions="1 2 4"
 		    Type="HyperSlab">
             <DataItem
 	       Dimensions="3 3"
 	       Format="XML">
               0 0 0
               1 1 1
-              1 2 6
+              1 2 4
 	    </DataItem>
 	    <DataItem
 	       DataType="Float" Precision="8"
-	       Dimensions="1 2 6"
+	       Dimensions="1 2 4"
 	       Format="HDF">
 	      &HeavyData;:/cell_fields/other
 	    </DataItem>
@@ -76,6 +76,28 @@
 	  </DataItem>
 	</Attribute>
 	<Attribute
+	   Name="stress"
+	   Type="Tensor6"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 6"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 2 6
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 6"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
 	   Name="traction"
 	   Type="Vector"
 	   Center="Cell">

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,14 +18,18 @@
 10
 10
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
 7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01
+SCALARS other double 4
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -11,11 +11,13 @@
 CELL_TYPES 1
 5
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
+VECTORS other double
+1.200000e+00 2.300000e+00 3.400000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_fault_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -11,15 +11,20 @@
 CELL_TYPES 1
 5
 POINT_DATA 3
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
 4.300000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,14 +18,18 @@
 10
 10
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
 7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00
+7.800000e+00 8.900000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_mat_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,15 +18,6 @@
 10
 10
 POINT_DATA 8
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
-1.000000e+01 1.110000e+01 1.220000e+01
-1.330000e+01 1.440000e+01 1.550000e+01
-1.660000e+01 1.770000e+01 1.880000e+01
-1.990000e+01 2.000000e+01 2.110000e+01
-2.220000e+01 2.330000e+01 2.440000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -37,6 +28,25 @@
 7.600000e+00
 8.700000e+00
 9.800000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
+1.660000e+01 1.770000e+01 1.880000e+01
+1.990000e+01 2.000000e+01 2.110000e+01
+2.220000e+01 2.330000e+01 2.440000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
+7.100000e+00 7.200000e+00 7.300000e+00 7.400000e+00 7.500000e+00 7.600000e+00
+8.100000e+00 8.200000e+00 8.300000e+00 8.400000e+00 8.500000e+00 8.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_points_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_points_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_points_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,17 +18,23 @@
 1
 1
 POINT_DATA 4
-VECTORS displacements double
-1.346667e+01 1.423333e+01 1.533333e+01
-7.366667e+00 8.466667e+00 9.566667e+00
-7.200000e+00 8.300000e+00 9.400000e+00
-1.660000e+01 1.770000e+01 1.880000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 6.500000e+00
 4.300000e+00
 4.300000e+00
 7.600000e+00
+VECTORS displacement double
+1.346667e+01 1.423333e+01 1.533333e+01
+7.366667e+00 8.466667e+00 9.566667e+00
+7.200000e+00 8.300000e+00 9.400000e+00
+1.660000e+01 1.770000e+01 1.880000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 9.333333e+00 1.043333e+01

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,14 +14,18 @@
 5
 5
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
-SCALARS other double 6
+VECTORS traction double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+SCALARS stress double 6
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00 5.600000e+00 6.700000e+00
 7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01 1.120000e+01 1.230000e+01
+SCALARS other double 4
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00
+7.800000e+00 8.900000e+00 9.000000e+00 1.010000e+01

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_surf_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,17 +14,23 @@
 5
 5
 POINT_DATA 4
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-1.000000e+01 1.110000e+01 1.220000e+01
-1.330000e+01 1.440000e+01 1.550000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
 5.400000e+00
 6.500000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex.xmf	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -32,7 +32,7 @@
 	  </DataItem>
 	</Geometry>
 	<Attribute
-	   Name="displacements"
+	   Name="displacement"
 	   Type="Vector"
 	   Center="Node">
           <DataItem ItemType="HyperSlab"
@@ -49,7 +49,7 @@
 	       DataType="Float" Precision="8"
 	       Dimensions="1 8 3"
 	       Format="HDF">
-	      &HeavyData;:/vertex_fields/displacements
+	      &HeavyData;:/vertex_fields/displacement
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
@@ -97,6 +97,28 @@
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
+	<Attribute
+	   Name="stress"
+	   Type="Tensor6"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 8 6"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 8 6
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 8 6"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
     </Grid>
   </Domain>
 </Xdmf>

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tet4_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -18,15 +18,6 @@
 10
 10
 POINT_DATA 8
-VECTORS displacements double
-1.100000e+00 2.200000e+00 3.300000e+00
-4.400000e+00 5.500000e+00 6.600000e+00
-7.700000e+00 8.800000e+00 9.900000e+00
-1.000000e+01 1.110000e+01 1.220000e+01
-1.330000e+01 1.440000e+01 1.550000e+01
-1.660000e+01 1.770000e+01 1.880000e+01
-1.990000e+01 2.000000e+01 2.110000e+01
-2.220000e+01 2.330000e+01 2.440000e+01
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -37,6 +28,25 @@
 7.600000e+00
 8.700000e+00
 9.800000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 3.300000e+00
+4.400000e+00 5.500000e+00 6.600000e+00
+7.700000e+00 8.800000e+00 9.900000e+00
+1.000000e+01 1.110000e+01 1.220000e+01
+1.330000e+01 1.440000e+01 1.550000e+01
+1.660000e+01 1.770000e+01 1.880000e+01
+1.990000e+01 2.000000e+01 2.110000e+01
+2.220000e+01 2.330000e+01 2.440000e+01
+SCALARS stress double 6
+LOOKUP_TABLE default
+1.100000e+00 1.200000e+00 1.300000e+00 1.400000e+00 1.500000e+00 1.600000e+00
+2.100000e+00 2.200000e+00 2.300000e+00 2.400000e+00 2.500000e+00 2.600000e+00
+3.100000e+00 3.200000e+00 3.300000e+00 3.400000e+00 3.500000e+00 3.600000e+00
+4.100000e+00 4.200000e+00 4.300000e+00 4.400000e+00 4.500000e+00 4.600000e+00
+5.100000e+00 5.200000e+00 5.300000e+00 5.400000e+00 5.500000e+00 5.600000e+00
+6.100000e+00 6.200000e+00 6.300000e+00 6.400000e+00 6.500000e+00 6.600000e+00
+7.100000e+00 7.200000e+00 7.300000e+00 7.400000e+00 7.500000e+00 7.600000e+00
+8.100000e+00 8.200000e+00 8.300000e+00 8.400000e+00 8.500000e+00 8.600000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,10 +10,13 @@
 CELL_TYPES 1
 3
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+2.100000e+00 2.200000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_bc_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,13 +10,16 @@
 CELL_TYPES 1
 3
 POINT_DATA 2
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+2.100000e+00 2.200000e+00 2.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell.xmf	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -32,7 +32,7 @@
 	  </DataItem>
 	</Geometry>
 	<Attribute
-	   Name="other_xx"
+	   Name="other_0"
 	   Type="Scalar"
 	   Center="Cell">
           <DataItem ItemType="HyperSlab"
@@ -47,14 +47,14 @@
 	    </DataItem>
 	    <DataItem
 	       DataType="Float" Precision="8"
-	       Dimensions="1 2 3"
+	       Dimensions="1 2 2"
 	       Format="HDF">
 	      &HeavyData;:/cell_fields/other
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
 	<Attribute
-	   Name="other_yy"
+	   Name="other_1"
 	   Type="Scalar"
 	   Center="Cell">
           <DataItem ItemType="HyperSlab"
@@ -69,14 +69,14 @@
 	    </DataItem>
 	    <DataItem
 	       DataType="Float" Precision="8"
-	       Dimensions="1 2 3"
+	       Dimensions="1 2 2"
 	       Format="HDF">
 	      &HeavyData;:/cell_fields/other
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
 	<Attribute
-	   Name="other_xy"
+	   Name="pressure"
 	   Type="Scalar"
 	   Center="Cell">
           <DataItem ItemType="HyperSlab"
@@ -85,20 +85,20 @@
             <DataItem
 	       Dimensions="3 3"
 	       Format="XML">
-              0 0 2
+              0 0 0
               1 1 1
               1 2 1
 	    </DataItem>
 	    <DataItem
 	       DataType="Float" Precision="8"
-	       Dimensions="1 2 3"
+	       Dimensions="1 2 1"
 	       Format="HDF">
-	      &HeavyData;:/cell_fields/other
+	      &HeavyData;:/cell_fields/pressure
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
 	<Attribute
-	   Name="pressure"
+	   Name="stress_xx"
 	   Type="Scalar"
 	   Center="Cell">
           <DataItem ItemType="HyperSlab"
@@ -113,13 +113,57 @@
 	    </DataItem>
 	    <DataItem
 	       DataType="Float" Precision="8"
-	       Dimensions="1 2 1"
+	       Dimensions="1 2 3"
 	       Format="HDF">
-	      &HeavyData;:/cell_fields/pressure
+	      &HeavyData;:/cell_fields/stress
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
 	<Attribute
+	   Name="stress_yy"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 3"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_xy"
+	   Type="Scalar"
+	   Center="Cell">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 2 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 2
+              1 1 1
+              1 2 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 2 3"
+	       Format="HDF">
+	      &HeavyData;:/cell_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
 	   Name="traction_x"
 	   Type="Scalar"
 	   Center="Cell">

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,13 +16,17 @@
 5
 5
 CELL_DATA 2
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 2.200000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
 4.500000e+00 5.600000e+00 6.700000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00
+4.500000e+00 5.600000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,10 +10,13 @@
 CELL_TYPES 1
 3
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
+SCALARS other double 4
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00 3.400000e+00 4.500000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_fault_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,13 +10,16 @@
 CELL_TYPES 1
 3
 POINT_DATA 2
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
 3.200000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+2.100000e+00 2.200000e+00 2.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,10 +14,13 @@
 CELL_TYPES 1
 5
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_mat_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -14,13 +14,6 @@
 CELL_TYPES 1
 5
 POINT_DATA 6
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
-5.500000e+00 6.600000e+00 0.0
-7.700000e+00 8.800000e+00 0.0
-9.900000e+00 1.000000e+01 0.0
-1.110000e+01 1.220000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -29,6 +22,20 @@
 5.400000e+00
 6.500000e+00
 7.600000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.000000e+01 0.0
+1.110000e+01 1.220000e+01 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+2.100000e+00 2.200000e+00 3.300000e+00
+3.100000e+00 3.200000e+00 4.300000e+00
+4.100000e+00 4.200000e+00 5.300000e+00
+5.100000e+00 5.200000e+00 6.300000e+00
+6.100000e+00 6.200000e+00 7.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_points_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_points_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_points_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -15,15 +15,19 @@
 1
 1
 POINT_DATA 3
-VECTORS displacements double
-7.366667e+00 8.133334e+00 0.0
-4.400000e+00 5.500000e+00 0.0
-7.700000e+00 8.800000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 5.400000e+00
 3.750000e+00
 5.400000e+00
+VECTORS displacement double
+7.366667e+00 8.133334e+00 0.0
+4.400000e+00 5.500000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+VECTORS stress double
+4.100000e+00 4.200000e+00 4.300000e+00
+2.600000e+00 2.700000e+00 2.800000e+00
+4.100000e+00 4.200000e+00 4.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 7.133334e+00 8.233334e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_cell.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_cell_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,10 +10,13 @@
 CELL_TYPES 1
 3
 CELL_DATA 1
-VECTORS traction double
-1.100000e+00 2.200000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
-VECTORS other double
+VECTORS traction double
+1.100000e+00 2.200000e+00 0.0
+VECTORS stress double
 1.200000e+00 2.300000e+00 3.400000e+00
+SCALARS other double 2
+LOOKUP_TABLE default
+1.200000e+00 2.300000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_surf_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -10,13 +10,16 @@
 CELL_TYPES 1
 3
 POINT_DATA 2
-VECTORS displacements double
-3.300000e+00 4.400000e+00 0.0
-7.700000e+00 8.800000e+00 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 3.200000e+00
 5.400000e+00
+VECTORS displacement double
+3.300000e+00 4.400000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+VECTORS stress double
+2.100000e+00 2.200000e+00 2.300000e+00
+4.100000e+00 4.200000e+00 4.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 3.400000e+00 4.500000e+00

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex.h5
===================================================================
(Binary files differ)

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex.xmf
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex.xmf	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex.xmf	2012-09-17 21:52:11 UTC (rev 20722)
@@ -32,7 +32,7 @@
 	  </DataItem>
 	</Geometry>
 	<Attribute
-	   Name="displacements_x"
+	   Name="displacement_x"
 	   Type="Scalar"
 	   Center="Node">
           <DataItem ItemType="HyperSlab"
@@ -49,12 +49,12 @@
 	       DataType="Float" Precision="8"
 	       Dimensions="1 6 2"
 	       Format="HDF">
-	      &HeavyData;:/vertex_fields/displacements
+	      &HeavyData;:/vertex_fields/displacement
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
 	<Attribute
-	   Name="displacements_y"
+	   Name="displacement_y"
 	   Type="Scalar"
 	   Center="Node">
           <DataItem ItemType="HyperSlab"
@@ -71,7 +71,7 @@
 	       DataType="Float" Precision="8"
 	       Dimensions="1 6 2"
 	       Format="HDF">
-	      &HeavyData;:/vertex_fields/displacements
+	      &HeavyData;:/vertex_fields/displacement
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
@@ -141,6 +141,72 @@
 	    </DataItem>
 	  </DataItem>
 	</Attribute>
+	<Attribute
+	   Name="stress_xx"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 0
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 3"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_yy"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 1
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 3"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
+	<Attribute
+	   Name="stress_xy"
+	   Type="Scalar"
+	   Center="Node">
+          <DataItem ItemType="HyperSlab"
+		    Dimensions="1 6 1"
+		    Type="HyperSlab">
+            <DataItem
+	       Dimensions="3 3"
+	       Format="XML">
+              0 0 2
+              1 1 1
+              1 6 1
+	    </DataItem>
+	    <DataItem
+	       DataType="Float" Precision="8"
+	       Dimensions="1 6 3"
+	       Format="HDF">
+	      &HeavyData;:/vertex_fields/stress
+	    </DataItem>
+	  </DataItem>
+	</Attribute>
     </Grid>
   </Domain>
 </Xdmf>

Modified: short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex_t10.vtk
===================================================================
--- short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex_t10.vtk	2012-09-17 15:38:27 UTC (rev 20721)
+++ short/3D/PyLith/branches/v1.7-stable/unittests/libtests/meshio/data/tri3_vertex_t10.vtk	2012-09-17 21:52:11 UTC (rev 20722)
@@ -16,13 +16,6 @@
 5
 5
 POINT_DATA 6
-VECTORS displacements double
-1.100000e+00 2.200000e+00 0.0
-3.300000e+00 4.400000e+00 0.0
-5.500000e+00 6.600000e+00 0.0
-7.700000e+00 8.800000e+00 0.0
-9.900000e+00 1.000000e+01 0.0
-1.110000e+01 1.220000e+01 0.0
 SCALARS pressure double 1
 LOOKUP_TABLE default
 2.100000e+00
@@ -31,6 +24,20 @@
 5.400000e+00
 6.500000e+00
 7.600000e+00
+VECTORS displacement double
+1.100000e+00 2.200000e+00 0.0
+3.300000e+00 4.400000e+00 0.0
+5.500000e+00 6.600000e+00 0.0
+7.700000e+00 8.800000e+00 0.0
+9.900000e+00 1.000000e+01 0.0
+1.110000e+01 1.220000e+01 0.0
+VECTORS stress double
+1.100000e+00 1.200000e+00 1.300000e+00
+2.100000e+00 2.200000e+00 2.300000e+00
+3.100000e+00 3.200000e+00 3.300000e+00
+4.100000e+00 4.200000e+00 4.300000e+00
+5.100000e+00 5.200000e+00 5.300000e+00
+6.100000e+00 6.200000e+00 6.300000e+00
 SCALARS other double 2
 LOOKUP_TABLE default
 1.200000e+00 2.300000e+00



More information about the CIG-COMMITS mailing list